Beispiel #1
0
        private void RemoveValue(PatchRequest patchCmd, string propName, RavenJToken token)
        {
            EnsurePreviousValueMatchCurrentValue(patchCmd, token);
            if (token == null)
            {
                token = new RavenJArray();
                document[propName] = token;
            }
            var array = GetArray(token, propName);

            array = new RavenJArray(array);
            document[propName] = array;

            var position = patchCmd.Position;
            var value    = patchCmd.Value;

            if (position == null && (value == null || value.Type == JTokenType.Null))
            {
                throw new InvalidOperationException("Cannot remove value from  '" + propName +
                                                    "' because position element does not exists or not an integer and no value was present");
            }
            if (position != null && value != null && value.Type != JTokenType.Null)
            {
                throw new InvalidOperationException("Cannot remove value from  '" + propName +
                                                    "' because both a position and a value are set");
            }
            if (position != null && (position.Value < 0 || position.Value >= array.Length))
            {
                throw new IndexOutOfRangeException("Cannot remove value from  '" + propName +
                                                   "' because position element is out of bounds");
            }

            if (value != null && value.Type != JTokenType.Null)
            {
                foreach (var ravenJToken in array.Where(x => RavenJToken.DeepEquals(x, value)).ToList())
                {
                    array.Remove(ravenJToken);
                }

                return;
            }

            if (position != null)
            {
                array.RemoveAt(position.Value);
            }
        }
Beispiel #2
0
		private void RemoveValue(PatchRequest patchCmd, string propName, RavenJToken token)
		{
			EnsurePreviousValueMatchCurrentValue(patchCmd, token);
			if (token == null)
			{
				token = new RavenJArray();
				document[propName] = token;
			}
			var array = GetArray(token, propName);
			array = new RavenJArray(array);
			document[propName] = array;

			var position = patchCmd.Position;
			var value = patchCmd.Value;
			if (position == null && (value == null || value.Type == JTokenType.Null))
				throw new InvalidOperationException("Cannot remove value from  '" + propName +
				                                    "' because position element does not exists or not an integer and no value was present");
			if (position != null && value != null && value.Type != JTokenType.Null)
				throw new InvalidOperationException("Cannot remove value from  '" + propName +
				                                    "' because both a position and a value are set");
			if (position != null && (position.Value < 0 || position.Value >= array.Length))
				throw new IndexOutOfRangeException("Cannot remove value from  '" + propName +
				                                   "' because position element is out of bounds");

			if (value != null && value.Type != JTokenType.Null)
			{
				foreach (var ravenJToken in array.Where(x => RavenJToken.DeepEquals(x, value)).ToList())
				{
					array.Remove(ravenJToken);
				}

				return;
			}

			if (position != null)
				array.RemoveAt(position.Value);
		}