public ITableMapper Parse(JobParser parser, ParseState state)
        {
            var table = parser.ParseTableDefinition(state.Select("Table") ?? state.Select(null, true));

            Type itemType;
            var  selector = Selectors.SelectFromName(GetSelector(parser, state), out itemType);

            var expand = state.Select("Expand");

            if (expand != null)
            {
                var expandField = parser.ParseFieldMapper(expand) as SimpleFieldMapper;
                if (expandField == null)
                {
                    throw ParseException.AttributeError(expand, "Invalid field specified");
                }

                var delimiter = state.TryGet("Delimiter", "|");

                return(new SimpleTableMapper(selector,
                                             new TableDefinition("").Map(
                                                 new SimpleTableMapper(
                                                     scope =>
                                                     expandField.Selector(scope)
                                                     .TryGet(v => "" + v, "")
                                                     .Split(new[] { delimiter }, StringSplitOptions.RemoveEmptyEntries), table))));
            }

            return(new SimpleTableMapper(selector, table));
        }
Example #2
0
        public ITableMapper Parse(JobParser parser, ParseState state)
        {
            var repeats = state.TryGet("Repeats", 10);


            var repeatState = new State();

            var def = parser.ParseTableDefinition(state);

            def.FieldMappers = def.FieldMappers.Concat(new[] {
                new SimpleFieldMapper("Repeat", scope => "Value" + repeatState.Level, typeof(string), FieldType.Dimension)
            }).ToArray();

            return(new SimpleTableMapper(scope => Repeat(scope, repeats, repeatState), def));
        }