Class: Sawyer::Relation
- Inherits:
-
Object
- Object
- Sawyer::Relation
- Defined in:
- lib/sawyer/relation.rb
Defined Under Namespace
Classes: Map
Instance Attribute Summary collapse
-
#agent ⇒ Object
readonly
Returns the value of attribute agent.
-
#available_methods ⇒ Object
readonly
Returns the value of attribute available_methods.
-
#href_template ⇒ Object
readonly
Returns the value of attribute href_template.
-
#method ⇒ Object
readonly
Returns the value of attribute method.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Class Method Summary collapse
-
.from_link(agent, name, options) ⇒ Object
Public: Builds a single Relation from the given options.
-
.from_links(agent, index, rels = Map.new) ⇒ Object
Public: Builds an index of Relations from the value of a ‘_links` property in a resource.
Instance Method Summary collapse
-
#call(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation.
-
#delete(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using DELETE.
-
#get(options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using GET.
-
#head(options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using HEAD.
- #href(options = nil) ⇒ Object
-
#initialize(agent, name, href, method = nil) ⇒ Relation
constructor
A Relation represents an available next action for a resource.
- #inspect ⇒ Object
-
#options(data = nil, opt = nil) ⇒ Object
Public: Makes an API request with the curent Relation using OPTIONS.
-
#patch(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using PATCH.
-
#post(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using POST.
-
#put(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using PUT.
Constructor Details
#initialize(agent, name, href, method = nil) ⇒ Relation
A Relation represents an available next action for a resource.
agent - The Sawyer::Agent that made the request. name - The Symbol name of the relation. href - The String URL of the location of the next action. method - The Symbol HTTP method. Default: :get
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/sawyer/relation.rb', line 107 def initialize(agent, name, href, method = nil) @agent = agent @name = name.to_sym @href = href @href_template = Addressable::Template.new(href.to_s) methods = nil if method.is_a? String if method.size.zero? method = nil else method.downcase! methods = method.split(',').map! do |m| m.strip! m.to_sym end method = methods.first end end @method = (method || :get).to_sym @available_methods = Set.new methods || [@method] end |
Instance Attribute Details
#agent ⇒ Object (readonly)
Returns the value of attribute agent.
55 56 57 |
# File 'lib/sawyer/relation.rb', line 55 def agent @agent end |
#available_methods ⇒ Object (readonly)
Returns the value of attribute available_methods.
55 56 57 |
# File 'lib/sawyer/relation.rb', line 55 def available_methods @available_methods end |
#href_template ⇒ Object (readonly)
Returns the value of attribute href_template.
55 56 57 |
# File 'lib/sawyer/relation.rb', line 55 def href_template @href_template end |
#method ⇒ Object (readonly)
Returns the value of attribute method.
55 56 57 |
# File 'lib/sawyer/relation.rb', line 55 def method @method end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
55 56 57 |
# File 'lib/sawyer/relation.rb', line 55 def name @name end |
Class Method Details
.from_link(agent, name, options) ⇒ Object
Public: Builds a single Relation from the given options. These are usually taken from a ‘_links` property in a resource.
agent - The Sawyer::Agent that made the request. name - The Symbol name of the Relation. options - A Hash containing the other Relation properties.
:href - The String URL of the next action's location.
:method - The optional String HTTP method.
Returns a Relation.
92 93 94 95 96 97 98 99 |
# File 'lib/sawyer/relation.rb', line 92 def self.from_link(agent, name, ) case when Hash new agent, name, [:href], [:method] when String new agent, name, end end |
.from_links(agent, index, rels = Map.new) ⇒ Object
Public: Builds an index of Relations from the value of a ‘_links` property in a resource. :get is the default method. Any links with multiple specified methods will get multiple relations created.
index - The Hash mapping Relation names to the Hash Relation
options.
rels - A Relation::Map to store the Relations.
Returns a Relation::Map
70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/sawyer/relation.rb', line 70 def self.from_links(agent, index, rels = Map.new) if index.is_a?(Array) raise ArgumentError, "Links must be a hash of rel => {_href => '...'}: #{index.inspect}" end index.each do |name, | rels << from_link(agent, name, ) end if index rels end |
Instance Method Details
#call(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation.
data - The Optional Hash or Resource body to be sent. :get or :head
requests can have no body, so this can be the options Hash
instead.
options - Hash of option to configure the API request.
:headers - Hash of API headers to set.
:query - Hash of URL query params to set.
:method - Symbol HTTP method.
Raises ArgumentError if the :method value is not in @available_methods. Returns a Sawyer::Response.
258 259 260 261 262 263 264 265 |
# File 'lib/sawyer/relation.rb', line 258 def call(data = nil, = nil) m = && [:method] if m && !@agent.allow_undefined_methods? && !@available_methods.include?(m == :head ? :get : m) raise ArgumentError, "method #{m.inspect} is not available: #{@available_methods.to_a.inspect}" end @agent.call m || @method, @href_template, data, end |
#delete(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using DELETE.
data - The Optional Hash or Resource body to be sent. options - Hash of option to configure the API request.
:headers - Hash of API headers to set.
:query - Hash of URL query params to set.
:method - Symbol HTTP method.
Returns a Sawyer::Response.
220 221 222 223 224 |
# File 'lib/sawyer/relation.rb', line 220 def delete(data = nil, = nil) ||= {} [:method] = :delete call data, end |
#get(options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using GET.
data - The Optional Hash or Resource body to be sent. :get or :head
requests can have no body, so this can be the options Hash
instead.
options - Hash of option to configure the API request.
:headers - Hash of API headers to set.
:query - Hash of URL query params to set.
:method - Symbol HTTP method.
Returns a Sawyer::Response.
160 161 162 163 164 |
# File 'lib/sawyer/relation.rb', line 160 def get( = nil) ||= {} [:method] = :get call end |
#head(options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using HEAD.
data - The Optional Hash or Resource body to be sent. :get or :head
requests can have no body, so this can be the options Hash
instead.
options - Hash of option to configure the API request.
:headers - Hash of API headers to set.
:query - Hash of URL query params to set.
:method - Symbol HTTP method.
Returns a Sawyer::Response.
143 144 145 146 147 |
# File 'lib/sawyer/relation.rb', line 143 def head( = nil) ||= {} [:method] = :head call end |
#href(options = nil) ⇒ Object
241 242 243 244 |
# File 'lib/sawyer/relation.rb', line 241 def href( = nil) return @href if @href_template.nil? @href_template.( || {}).to_s end |
#inspect ⇒ Object
267 268 269 |
# File 'lib/sawyer/relation.rb', line 267 def inspect %(#<#{self.class}: #{@name}: #{@method} #{@href_template}>) end |
#options(data = nil, opt = nil) ⇒ Object
Public: Makes an API request with the curent Relation using OPTIONS.
data - The Optional Hash or Resource body to be sent. options - Hash of option to configure the API request.
:headers - Hash of API headers to set.
:query - Hash of URL query params to set.
:method - Symbol HTTP method.
Returns a Sawyer::Response.
235 236 237 238 239 |
# File 'lib/sawyer/relation.rb', line 235 def (data = nil, opt = nil) opt ||= {} opt[:method] = :options call data, opt end |
#patch(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using PATCH.
data - The Optional Hash or Resource body to be sent. options - Hash of option to configure the API request.
:headers - Hash of API headers to set.
:query - Hash of URL query params to set.
:method - Symbol HTTP method.
Returns a Sawyer::Response.
205 206 207 208 209 |
# File 'lib/sawyer/relation.rb', line 205 def patch(data = nil, = nil) ||= {} [:method] = :patch call data, end |
#post(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using POST.
data - The Optional Hash or Resource body to be sent. options - Hash of option to configure the API request.
:headers - Hash of API headers to set.
:query - Hash of URL query params to set.
:method - Symbol HTTP method.
Returns a Sawyer::Response.
175 176 177 178 179 |
# File 'lib/sawyer/relation.rb', line 175 def post(data = nil, = nil) ||= {} [:method] = :post call data, end |
#put(data = nil, options = nil) ⇒ Object
Public: Makes an API request with the curent Relation using PUT.
data - The Optional Hash or Resource body to be sent. options - Hash of option to configure the API request.
:headers - Hash of API headers to set.
:query - Hash of URL query params to set.
:method - Symbol HTTP method.
Returns a Sawyer::Response.
190 191 192 193 194 |
# File 'lib/sawyer/relation.rb', line 190 def put(data = nil, = nil) ||= {} [:method] = :put call data, end |