class HalClient::Interpreter
Interprets parsed JSON
Constants
- RESERVED_PROPERTIES
Collection
of reserved properties tools.ietf.org/html/draft-kelly-json-hal-07#section-4.1
Attributes
hal_client[R]
raw[R]
Public Class Methods
new(parsed_json, hal_client)
click to toggle source
# File lib/hal_client/interpreter.rb, line 16 def initialize(parsed_json, hal_client) (fail InvalidRepresentationError, "Invalid HAL representation: #{parsed_json.inspect}") unless hashish?(parsed_json) @raw = parsed_json @hal_client = hal_client end
Public Instance Methods
extract_links()
click to toggle source
# File lib/hal_client/interpreter.rb, line 30 def extract_links() extract_embedded_links + extract_basic_links end
extract_props()
click to toggle source
Returns hash of properties from `parsed_json`
# File lib/hal_client/interpreter.rb, line 26 def extract_props() raw.reject{|k,_| RESERVED_PROPERTIES.include?(k) } end
Protected Instance Methods
arrayify(obj)
click to toggle source
# File lib/hal_client/interpreter.rb, line 134 def arrayify(obj) if Array === obj obj else [obj] end end
build_direct_link(rel, info)
click to toggle source
# File lib/hal_client/interpreter.rb, line 107 def build_direct_link(rel, info) fail InvalidRepresentationError unless hashish?(info) target_url = info.fetch("href") { fail InvalidRepresentationError } return nil unless target_url target_repr = Representation.new(href: target_url, hal_client: hal_client) SimpleLink.new(rel: rel, target: target_repr, curie_resolver: curie_resolver) rescue InvalidRepresentationError MalformedLink.new(rel: rel, msg: "/_links/#{jpointer_esc(rel)} is invalid", curie_resolver: curie_resolver) end
build_embedded_links(rel, targets_json)
click to toggle source
# File lib/hal_client/interpreter.rb, line 75 def build_embedded_links(rel, targets_json) arrayify(targets_json) .map{ |target_json| target_repr = Representation.new(parsed_json: target_json, hal_client: hal_client) SimpleLink.new(rel: rel, target: target_repr, curie_resolver: curie_resolver) } rescue InvalidRepresentationError MalformedLink.new(rel: rel, msg: "/_embedded/#{jpointer_esc(rel)} is invalid", curie_resolver: curie_resolver) end
build_links(rel, target_info)
click to toggle source
# File lib/hal_client/interpreter.rb, line 63 def build_links(rel, target_info) arrayify(target_info) .map { |info| if info["templated"] build_templated_link(rel, info) else build_direct_link(rel, info) end } .compact end
build_templated_link(rel, info)
click to toggle source
# File lib/hal_client/interpreter.rb, line 91 def build_templated_link(rel, info) fail(InvalidRepresentationError) unless hashish?(info) target_pattern = info.fetch("href") { fail InvalidRepresentationError } TemplatedLink.new(rel: rel, template: Addressable::Template.new(target_pattern), curie_resolver: curie_resolver, hal_client: hal_client) rescue InvalidRepresentationError MalformedLink.new(rel: rel, msg: "/_links/#{jpointer_esc(rel)} is invalid", curie_resolver: curie_resolver) end
curie_resolver()
click to toggle source
# File lib/hal_client/interpreter.rb, line 125 def curie_resolver @curie_resolver ||= CurieResolver.new(raw.fetch("_links", {}).fetch("curies", [])) end
extract_basic_links()
click to toggle source
# File lib/hal_client/interpreter.rb, line 43 def extract_basic_links raw .fetch("_links") { Hash.new } .flat_map { |rel, target_info| build_links(rel, target_info) } .compact .to_set end
extract_embedded_links()
click to toggle source
# File lib/hal_client/interpreter.rb, line 53 def extract_embedded_links raw .fetch("_embedded") { Hash.new } .flat_map { |rel, embedded_json| build_embedded_links(rel, embedded_json) } .compact .to_set end
hashish?(obj)
click to toggle source
# File lib/hal_client/interpreter.rb, line 38 def hashish?(obj) obj.respond_to?(:[]) && obj.respond_to?(:map) end
jpointer_esc(str)
click to toggle source
# File lib/hal_client/interpreter.rb, line 142 def jpointer_esc(str) str.gsub "/", "~1" end