Пример #1
0
        object ProcessProperty(IMetadataObject node, string name, Type argumentType, object fallback)
        {
            var path           = node.GetDataPath();
            var propertyChange = _changes[path].FirstOrDefault(c => c.Property.Name.Equals(name, StringComparison.OrdinalIgnoreCase));

            if (propertyChange != null)
            {
                return(propertyChange.MergeValue.ToObject(argumentType, _serializer.Value));
            }
            else
            {
                return(fallback is ICloneable cloneable?cloneable.Clone() : fallback);
            }
        }
Пример #2
0
        /// <inheritdoc />
        public IMetadataObject With(IMetadataObject source, IPredicateReflector predicate)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (predicate == null)
            {
                throw new ArgumentNullException(nameof(predicate));
            }

            var newInstance = DeepClone(
                source.Repository,
                predicate.ProcessArgument,
                predicate.GetChildChanges,
                n => n.IsParentOf(source));

            return(newInstance.TryGetFromGitPath(source.GetDataPath()));
        }