Class: Async::REST::Resource
- Inherits:
-
Protocol::HTTP::Middleware
- Object
- Protocol::HTTP::Middleware
- Async::REST::Resource
- Defined in:
- lib/async/rest/resource.rb
Overview
The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. “today’s weather in Los Angeles”), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author’s hypertext reference must fit within the definition of a resource. A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time.
Instance Attribute Summary collapse
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
-
#reference ⇒ Object
readonly
Returns the value of attribute reference.
Class Method Summary collapse
- .connect(endpoint) ⇒ Object
- .for(endpoint, *args) ⇒ Object
- .with(parent, *args, headers: {}, **options) ⇒ Object
Instance Method Summary collapse
- #get(klass = Representation, **parameters) ⇒ Object
-
#initialize(delegate, reference = ::Protocol::HTTP::Reference.parse, headers = ::Protocol::HTTP::Headers.new) ⇒ Resource
constructor
A new instance of Resource.
- #inspect ⇒ Object
- #prepare_request(verb, payload) ⇒ Object
- #to_s ⇒ Object
- #with(*args, **options) ⇒ Object
Constructor Details
#initialize(delegate, reference = ::Protocol::HTTP::Reference.parse, headers = ::Protocol::HTTP::Headers.new) ⇒ Resource
Returns a new instance of Resource.
35 36 37 38 39 40 |
# File 'lib/async/rest/resource.rb', line 35 def initialize(delegate, reference = ::Protocol::HTTP::Reference.parse, headers = ::Protocol::HTTP::Headers.new) super(delegate) @reference = reference @headers = headers end |
Instance Attribute Details
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
70 71 72 |
# File 'lib/async/rest/resource.rb', line 70 def headers @headers end |
#reference ⇒ Object (readonly)
Returns the value of attribute reference.
69 70 71 |
# File 'lib/async/rest/resource.rb', line 69 def reference @reference end |
Class Method Details
.connect(endpoint) ⇒ Object
42 43 44 45 46 |
# File 'lib/async/rest/resource.rb', line 42 def self.connect(endpoint) reference = ::Protocol::HTTP::Reference.parse(endpoint.path) return ::Protocol::HTTP::AcceptEncoding.new(HTTP::Client.new(endpoint)), reference end |
.for(endpoint, *args) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/async/rest/resource.rb', line 48 def self.for(endpoint, *args) # TODO This behaviour is deprecated and will probably be removed. if endpoint.is_a? String endpoint = HTTP::Endpoint.parse(endpoint) end client, reference = connect(endpoint) resource = self.new(client, reference, *args) return resource unless block_given? Async.run do begin yield resource ensure resource.close end end end |
.with(parent, *args, headers: {}, **options) ⇒ Object
72 73 74 75 76 |
# File 'lib/async/rest/resource.rb', line 72 def self.with(parent, *args, headers: {}, **) reference = parent.reference.with(**) self.new(*args, parent.delegate, reference, parent.headers.merge(headers)) end |
Instance Method Details
#get(klass = Representation, **parameters) ⇒ Object
82 83 84 |
# File 'lib/async/rest/resource.rb', line 82 def get(klass = Representation, **parameters) klass.new(self.with(parameters: parameters)).tap(&:value) end |
#inspect ⇒ Object
100 101 102 |
# File 'lib/async/rest/resource.rb', line 100 def inspect "\#<#{self.class} #{@reference.inspect} #{@headers.inspect}>" end |
#prepare_request(verb, payload) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/async/rest/resource.rb', line 88 def prepare_request(verb, payload) if payload headers = @headers.dup body = yield payload, headers else headers = @headers body = nil end return ::Protocol::HTTP::Request[verb, @reference, headers, body] end |
#to_s ⇒ Object
104 105 106 |
# File 'lib/async/rest/resource.rb', line 104 def to_s "\#<#{self.class} #{@reference.to_s}>" end |
#with(*args, **options) ⇒ Object
78 79 80 |
# File 'lib/async/rest/resource.rb', line 78 def with(*args, **) self.class.with(self, *args, **) end |