Class: HalClient::Representation
- Inherits:
-
Object
- Object
- HalClient::Representation
- Extended by:
- Forwardable
- Defined in:
- lib/hal_client/representation.rb
Overview
HAL representation of a single resource. Provides access to properties, links and embedded representations.
Instance Method Summary collapse
-
#[](name_or_rel) ⇒ Object
Returns the value of the specified property or representations of resources related via the specified link rel or nil.
-
#fetch(name_or_rel, default = MISSING, &default_proc) ⇒ Object
Returns the value of the specified property or representations of resources related via the specified link rel or the specified default value.
-
#has_related?(link_rel) ⇒ Boolean
Returns true if this representation contains a link (including embedded links) whose rel is
link_rel. -
#href ⇒ Object
Returns the URL of the resource this representation represents.
-
#initialize(options) ⇒ Representation
constructor
Create a new Representation.
-
#post(data, options = {}) ⇒ Object
Posts a
RepresentationorStringto this resource. -
#property(name, default = MISSING, &default_proc) ⇒ Object
Returns The value of the specified property or the specified default value.
-
#related(link_rel, options = {}, &default_proc) ⇒ Object
Returns representations of resources related via the specified link rel or the specified default value.
-
#related_hrefs(link_rel, options = {}, &default_proc) ⇒ Object
Returns urls of resources related via the specified link rel or the specified default value.
-
#to_json ⇒ Object
Returns the raw json representation of this representation.
-
#to_s ⇒ Object
Returns a short human readable description of this representation.
Constructor Details
#initialize(options) ⇒ Representation
Create a new Representation
options - name parameters
:parsed_json - A hash structure representing a single HAL
document.
:href - The href of this representation.
:hal_client - The HalClient instance to use when navigating.
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/hal_client/representation.rb', line 21 def initialize() @raw = [:parsed_json] @hal_client = [:hal_client] @href = [:href] (fail ArgumentError, "Either parsed_json or href must be provided") if @raw.nil? && @href.nil? (fail InvalidRepresentationError, "Invalid HAL representation: #{raw.inspect}") if @raw && ! hashish?(@raw) end |
Instance Method Details
#[](name_or_rel) ⇒ Object
Returns the value of the specified property or representations
of resources via the specified link rel or nil
name_or_rel - The name of property or link rel of interest
90 91 92 93 |
# File 'lib/hal_client/representation.rb', line 90 def [](name_or_rel) item_key = name_or_rel fetch(item_key, nil) end |
#fetch(name_or_rel, default = MISSING, &default_proc) ⇒ Object
Returns the value of the specified property or representations
of resources related via the specified link rel or the
specified default value.
name_or_rel - The name of property or link rel of interest default - an optional object that should be return if the
specified property or link does not exist
default_proc - an option proc that will be called with name
to produce default value if the specified property or link does not
exist
Raises KeyError if the specified property or link does not exist
and no default nor default_proc is provided.
77 78 79 80 81 82 83 84 |
# File 'lib/hal_client/representation.rb', line 77 def fetch(name_or_rel, default=MISSING, &default_proc) item_key = name_or_rel default_proc ||= ->(_){default} if default != MISSING property(item_key) { (item_key, &default_proc) } end |
#has_related?(link_rel) ⇒ Boolean
Returns true if this representation contains a link (including embedded links) whose rel is link_rel.
link_rel - The link rel of interest
99 100 101 102 103 104 105 |
# File 'lib/hal_client/representation.rb', line 99 def (link_rel) _ = link_rel true rescue KeyError false end |
#href ⇒ Object
Returns the URL of the resource this representation represents.
60 61 62 |
# File 'lib/hal_client/representation.rb', line 60 def href @href ||= link_section.fetch("self").fetch("href") end |
#post(data, options = {}) ⇒ Object
Posts a Representation or String to this resource.
data - a String or an object that responds to #to_hal options - set of options to pass to ‘HalClient#post`
37 38 39 |
# File 'lib/hal_client/representation.rb', line 37 def post(data, ={}) @hal_client.post(href, data, ) end |
#property(name, default = MISSING, &default_proc) ⇒ Object
Returns The value of the specified property or the specified
default value.
name - The name of property of interest default - an optional object that should be return if the
specified property does not exist
default_proc - an option proc that will be called with name
to produce default value if the specified property does not
exist
Raises KeyError if the specified property does not exist
and no default nor default_proc is provided.
53 54 55 56 57 |
# File 'lib/hal_client/representation.rb', line 53 def property(name, default=MISSING, &default_proc) default_proc ||= ->(_){ default} if default != MISSING raw.fetch(name.to_s, &default_proc) end |
#related(link_rel, options = {}, &default_proc) ⇒ Object
Returns representations of resources related via the specified
link rel or the specified default value.
link_rel - The link rel of interest options - optional keys and values with which to expand any
templated links that are encountered
default_proc - an option proc that will be called with name
to produce default value if the specified property or link does not
exist
Raises KeyError if the specified link does not exist
and no default_proc is provided.
119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/hal_client/representation.rb', line 119 def (link_rel, = {}, &default_proc) default_proc ||= ->(link_rel){ raise KeyError, "No resources are related via `#{link_rel}`" } = (link_rel) linked = linked_or_nil(link_rel, ) if !.nil? or !linked.nil? RepresentationSet.new (Array() + Array(linked)) else default_proc.call link_rel end end |
#related_hrefs(link_rel, options = {}, &default_proc) ⇒ Object
Returns urls of resources related via the specified
link rel or the specified default value.
link_rel - The link rel of interest options - optional keys and values with which to expand any
templated links that are encountered
default_proc - an option proc that will be called with name
to produce default value if the specified property or link does not
exist
Raises KeyError if the specified link does not exist
and no default_proc is provided.
146 147 148 149 |
# File 'lib/hal_client/representation.rb', line 146 def (link_rel, ={}, &default_proc) (link_rel, , &default_proc). map(&:href) end |
#to_json ⇒ Object
Returns the raw json representation of this representation
158 159 160 |
# File 'lib/hal_client/representation.rb', line 158 def to_json raw.to_json end |
#to_s ⇒ Object
Returns a short human readable description of this representation.
153 154 155 |
# File 'lib/hal_client/representation.rb', line 153 def to_s "#<" + self.class.name + ": " + href + ">" end |