private IEnumerator <ILiquidizable> GetEnumeratorInternal() { return(_enumerable .Cast <object>() .Select(x => LiquidUtil.CreateSafeObject(x)) .OfType <ILiquidizable>() .GetEnumerator()); }
protected object GetOrCreateSafeObject(string name) { if (!_safeObjects.TryGetValue(name, out var safeObject)) { safeObject = LiquidUtil.CreateSafeObject(InvokeMember(name)); if (safeObject is ISafeObject) { _safeObjects[name] = safeObject; } } return(safeObject); }
private RenderParameters CreateParameters(object data, IFormatProvider formatProvider) { var p = new RenderParameters(formatProvider); Hash hash = null; if (data is ISafeObject so) { if (so.GetWrappedObject() is IDictionary <string, object> soDict) { hash = Hash.FromDictionary(soDict); } else { data = so.GetWrappedObject(); } } if (hash == null) { hash = new Hash(); if (data is IDictionary <string, object> dict) { foreach (var kvp in dict) { hash[kvp.Key] = LiquidUtil.CreateSafeObject(kvp.Value); } } else { var props = FastProperty.GetProperties(data.GetType()); foreach (var prop in props) { hash[prop.Key] = LiquidUtil.CreateSafeObject(prop.Value.GetValue(data)); } } } p.LocalVariables = hash; p.ErrorsOutputMode = HostingEnvironment.IsHosted ? ErrorsOutputMode.Display : ErrorsOutputMode.Rethrow; return(p); }