Class: Hyperdrive::Endpoint
- Inherits:
-
Object
- Object
- Hyperdrive::Endpoint
- Defined in:
- lib/hyperdrive/endpoint.rb
Class Attribute Summary collapse
-
.env ⇒ Object
readonly
Returns the value of attribute env.
-
.headers ⇒ Object
Returns the value of attribute headers.
-
.media_type ⇒ Object
readonly
Returns the value of attribute media_type.
-
.params ⇒ Object
readonly
Returns the value of attribute params.
-
.request ⇒ Object
readonly
Returns the value of attribute request.
-
.resource ⇒ Object
readonly
Returns the value of attribute resource.
Class Method Summary collapse
- .before_response ⇒ Object
- .body ⇒ Object
- .call(env) ⇒ Object
- .error(status, message) ⇒ Object
- .instrument(*args) ⇒ Object
- .json? ⇒ Boolean
- .page ⇒ Object
- .per_page ⇒ Object
- .render(body) ⇒ Object
- .requested_version ⇒ Object
- .response ⇒ Object
- .status ⇒ Object
- .xml? ⇒ Boolean
Class Attribute Details
.env ⇒ Object (readonly)
Returns the value of attribute env.
21 22 23 |
# File 'lib/hyperdrive/endpoint.rb', line 21 def env @env end |
.headers ⇒ Object
Returns the value of attribute headers.
22 23 24 |
# File 'lib/hyperdrive/endpoint.rb', line 22 def headers @headers end |
.media_type ⇒ Object (readonly)
Returns the value of attribute media_type.
21 22 23 |
# File 'lib/hyperdrive/endpoint.rb', line 21 def media_type @media_type end |
.params ⇒ Object (readonly)
Returns the value of attribute params.
21 22 23 |
# File 'lib/hyperdrive/endpoint.rb', line 21 def params @params end |
.request ⇒ Object (readonly)
Returns the value of attribute request.
21 22 23 |
# File 'lib/hyperdrive/endpoint.rb', line 21 def request @request end |
.resource ⇒ Object (readonly)
Returns the value of attribute resource.
21 22 23 |
# File 'lib/hyperdrive/endpoint.rb', line 21 def resource @resource end |
Class Method Details
.before_response ⇒ Object
71 72 73 74 75 |
# File 'lib/hyperdrive/endpoint.rb', line 71 def self.before_response if resource.has_callback?(:before, env['REQUEST_METHOD'], requested_version) instance_eval(&resource.callback(:before, env['REQUEST_METHOD'], requested_version)) end end |
.body ⇒ Object
88 89 90 91 92 |
# File 'lib/hyperdrive/endpoint.rb', line 88 def self.body body = instance_eval(&resource.request_handler(env['REQUEST_METHOD'], requested_version)) body = '' if env['REQUEST_METHOD'] == 'DELETE' body end |
.call(env) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/hyperdrive/endpoint.rb', line 6 def self.call(env) @env = env @request = Rack::Request.new(@env) @media_type = env['hyperdrive.media_type'] @params = env['hyperdrive.params'] @resource = env['hyperdrive.resource'] @headers = Hyperdrive::Values.default_headers.dup @headers.merge!('Allow' => resource.allowed_methods.join(', '), 'Content-Type' => @media_type) before_response response.finish end |
.error(status, message) ⇒ Object
63 64 65 |
# File 'lib/hyperdrive/endpoint.rb', line 63 def self.error(status, ) raise Errors::HTTPError.new(, status) end |
.instrument(*args) ⇒ Object
67 68 69 |
# File 'lib/hyperdrive/endpoint.rb', line 67 def self.instrument(*args) hyperdrive.instrument(*args) end |
.json? ⇒ Boolean
25 26 27 |
# File 'lib/hyperdrive/endpoint.rb', line 25 def self.json? media_type =~ /json$/ ? true : false end |
.page ⇒ Object
38 39 40 |
# File 'lib/hyperdrive/endpoint.rb', line 38 def self.page env['hyperdrive.page'] end |
.per_page ⇒ Object
42 43 44 |
# File 'lib/hyperdrive/endpoint.rb', line 42 def self.per_page env['hyperdrive.per_page'] end |
.render(body) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/hyperdrive/endpoint.rb', line 46 def self.render(body) case body when Array, Hash if json? MultiJson.dump(body) else puts "Hyperdrive::Endpoint: Can't serialize response automatically" raise Errors::NoResponse.new end when String body else puts "Hyperdrive::Endpoint: Coerceing response to string. Probably not what you want" body.to_s end end |
.requested_version ⇒ Object
33 34 35 36 |
# File 'lib/hyperdrive/endpoint.rb', line 33 def self.requested_version regex = /.*\/vnd.#{hyperdrive.config[:vendor]}\..*\.(.*?)\+.*$/ regex.match(media_type) { |version| version.captures.first } or resource.latest_version(env['REQUEST_METHOD']) end |
.response ⇒ Object
94 95 96 |
# File 'lib/hyperdrive/endpoint.rb', line 94 def self.response ::Rack::Response.new(render(body), status, headers) end |
.status ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/hyperdrive/endpoint.rb', line 77 def self.status case env['REQUEST_METHOD'] when 'POST' 201 when 'DELETE' 204 else 200 end end |
.xml? ⇒ Boolean
29 30 31 |
# File 'lib/hyperdrive/endpoint.rb', line 29 def self.xml? media_type =~ /xml$/ ? true : false end |