public ObjectBlock BlockFor(object input, BlockWritingContext context, string objectName = null)
        {
            Accessor implicitAccessor = null;
            var      type             = input.GetType();

            if (context.Accessor != null)
            {
                var parentSettings = _blocks.SettingsFor(context.Accessor.OwnerType);
                implicitAccessor = parentSettings.FindImplicitValue(type);
            }

            var implicitValue = implicitAccessor != null
                ? implicitAccessor.GetValue(input).ToString()
                : null;

            var properties = _cache.GetPropertiesFor(type).Values;
            var settings   = _blocks.SettingsFor(type);

            return(new ObjectBlock
            {
                Blocks = properties
                         .Where(x => !settings.ShouldIgnore(input, new SingleProperty(x)))
                         .Where(x => x.GetValue(input, null) != null && !isImplicitValue(x, implicitAccessor))
                         .Select(x =>
                {
                    context.StartProperty(x);

                    var writer = _writerLibrary.WriterFor(context);
                    var block = writer.Write(context);

                    context.FinishProperty();

                    return block;
                }).ToList(),
                Name = _blocks.NameFor(new BlockToken(objectName)),
                ImplicitValue = implicitValue
            });
        }
 private BlockWritingContext contextFor(Expression <Func <WritingTarget, object> > expression, WritingTarget target)
 {
     return(BlockWritingContext.ContextFor(expression, target));
 }
Exemplo n.º 3
0
 public IBlock Write(BlockWritingContext context)
 {
     return(context.Writer.BlockFor(context.RawValue, context.Token.Value));
 }
        public ObjectBlock BlockFor(object input, string objectName = null)
        {
            var context = new BlockWritingContext(_services, this, _blocks, input);

            return(BlockFor(input, context, objectName));
        }
Exemplo n.º 5
0
 public bool Matches(BlockWritingContext context)
 {
     return(true);
 }