class Blumquist::JSONPointer

Constants

DOCUMENT_ADDRESS_IDENTIFIER
DOCUMENT_ROOT_IDENTIFIER

Attributes

uri[R]

Public Class Methods

new(uri, document: nil) click to toggle source
# File lib/blumquist/json_pointer.rb, line 21
def initialize(uri, document: nil)
  @uri = uri
  validate_uri!
  @document = document
end

Public Instance Methods

value() click to toggle source
# File lib/blumquist/json_pointer.rb, line 27
def value
  result = keys.any? ? document&.dig(*keys) : document

  raise(Errors::InvalidPointer, pointer: uri, document: document) if result.nil?

  result
end

Private Instance Methods

address() click to toggle source
# File lib/blumquist/json_pointer.rb, line 45
def address
  return @address if defined?(@address)

  @address = uri.scan(/.*\.json/).first
end
document() click to toggle source
# File lib/blumquist/json_pointer.rb, line 51
def document
  if points_to_document_address?
    @external_document ||= JSON.parse( File.read(address) )
  else
    @document
  end
end
keys() click to toggle source
# File lib/blumquist/json_pointer.rb, line 37
def keys
  return @keys if defined?(@keys)

  @keys = @uri.split('#')[1]
  @keys = @keys&.sub('/', '') if @keys&.start_with?('/')
  @keys = @keys&.split('/') || []
end
points_to_document_address?() click to toggle source
# File lib/blumquist/json_pointer.rb, line 59
def points_to_document_address?
  !address.nil?
end
validate_uri!() click to toggle source
# File lib/blumquist/json_pointer.rb, line 63
def validate_uri!
  #
  # Why only this uri formats are valid?
  # Refer to the description on the top of this file
  #

  return if uri.start_with?(DOCUMENT_ROOT_IDENTIFIER)
  return if uri.match(DOCUMENT_ADDRESS_IDENTIFIER)

  raise(Errors::UnsupportedPointer, pointer: uri)
end