Method: JSONP3::RelativeJSONPointer#to

Defined in:
lib/json_p3/pointer.rb

#to(pointer) ⇒ JSONPointer

Return a new JSON Pointer by applying this relative pointer to pointer.

Parameters:

Returns:

Raises:



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# File 'lib/json_p3/pointer.rb', line 208

def to(pointer)
  p = pointer.is_a?(String) ? JSONPointer.new(pointer) : pointer

  raise JSONPointerIndexError, "origin (#{@origin}) exceeds root (#{p.tokens.length})" if @origin > p.tokens.length

  tokens = @origin < 1 ? p.tokens[0..] || raise : p.tokens[0...-@origin] || raise
  tokens[-1] = (tokens[-1] || raise) + @index if @index != 0 && tokens.length.positive? && tokens[-1].is_a?(Integer)

  if @pointer == "#"
    tokens[-1] = "##{tokens[-1]}"
  else
    tokens.concat(@pointer.tokens) # steep:ignore
  end

  JSONPointer.new(JSONPointer.encode(tokens))
end