public void GetSegments_Expected_LastSegmentIsCorrect() { PocoPath path = new PocoPath("EnumerableData().NestedData.NestedData.Name", "EnumerableData.NestedData.NestedData.Name"); string expected = "Name"; string actual = path.GetSegements().Last().ToString(); Assert.AreEqual(expected, actual); }
public void GetSegments_Expected_CorrectSegmentCount() { PocoPath path = new PocoPath("EnumerableData().NestedData.Name", "EnumerableData.NestedData.Name"); int expected = 3; int actual = path.GetSegements().Count(); Assert.AreEqual(expected, actual); }
public IEnumerable <object> SelectEnumerable(IPath path) { if (path == null) { throw new ArgumentNullException("path"); } PocoPath pocoPath = path as PocoPath; if (pocoPath == null) { throw new Exception(string.Format("Path of type '{0}' expected, path of type '{1}' received.", typeof(PocoPath), path.GetType())); } List <object> returnData; if (path.ActualPath == PocoPath.SeperatorSymbol) { returnData = new List <object> { Data }; } else if (path.ActualPath == PocoPath.EnumerableSymbol + PocoPath.SeperatorSymbol) { IEnumerable enumerableData = Data as IEnumerable; returnData = new List <object>(); if (enumerableData != null) { IEnumerator enumerator = enumerableData.GetEnumerator(); enumerator.Reset(); while (enumerator.MoveNext()) { returnData.Add(enumerator.Current); } } } else { returnData = SelectEnumberable(pocoPath.GetSegements().ToList(), Data).ToList(); } return(returnData); }
public object SelectScalar(IPath path) { if (path == null) { throw new ArgumentNullException("path"); } PocoPath pocoPath = path as PocoPath; if (pocoPath == null) { throw new Exception(string.Format("Path of type '{0}' expected, path of type '{1}' received.", typeof(PocoPath), path.GetType())); } object currentData = Data; if (path.ActualPath == PocoPath.SeperatorSymbol) { currentData = Data.ToString(); } else if (path.ActualPath == PocoPath.EnumerableSymbol + PocoPath.SeperatorSymbol) { IEnumerable enumerableData = currentData as IEnumerable; if (enumerableData == null) { currentData = null; } else { IEnumerator enumerator = enumerableData.GetEnumerator(); enumerator.Reset(); while (enumerator.MoveNext()) { currentData = enumerator.Current; } } } else { List <IPathSegment> pathSegments = pocoPath.GetSegements().ToList(); int segmentIndex = 0; while (currentData != null && segmentIndex < pathSegments.Count) { if (pathSegments[segmentIndex].IsEnumarable) { IEnumerable enumerableData = GetEnumerableValueForPathSegment(pathSegments[segmentIndex], currentData); if (enumerableData == null) { currentData = null; } else { IEnumerator enumerator = enumerableData.GetEnumerator(); enumerator.Reset(); while (enumerator.MoveNext()) { currentData = enumerator.Current; } } } else { currentData = GetScalarValueForPathSegement(pathSegments[segmentIndex], currentData); } segmentIndex++; } } return(currentData); }