Class: Hyperdrive::Endpoint

Inherits:
Object
  • Object
show all
Defined in:
lib/hyperdrive/endpoint.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.envObject (readonly)

Returns the value of attribute env.



21
22
23
# File 'lib/hyperdrive/endpoint.rb', line 21

def env
  @env
end

.headersObject

Returns the value of attribute headers.



22
23
24
# File 'lib/hyperdrive/endpoint.rb', line 22

def headers
  @headers
end

.media_typeObject (readonly)

Returns the value of attribute media_type.



21
22
23
# File 'lib/hyperdrive/endpoint.rb', line 21

def media_type
  @media_type
end

.paramsObject (readonly)

Returns the value of attribute params.



21
22
23
# File 'lib/hyperdrive/endpoint.rb', line 21

def params
  @params
end

.requestObject (readonly)

Returns the value of attribute request.



21
22
23
# File 'lib/hyperdrive/endpoint.rb', line 21

def request
  @request
end

.resourceObject (readonly)

Returns the value of attribute resource.



21
22
23
# File 'lib/hyperdrive/endpoint.rb', line 21

def resource
  @resource
end

Class Method Details

.bodyObject



55
56
57
58
59
# File 'lib/hyperdrive/endpoint.rb', line 55

def self.body
  body = instance_eval(&resource.request_handler(env['REQUEST_METHOD']))
  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, 'Content-Type' => @media_type)

  response.finish
end

.json?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/hyperdrive/endpoint.rb', line 25

def self.json?
  media_type =~ /json$/
end

.render(body) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/hyperdrive/endpoint.rb', line 33

def self.render(body)
  case body
  when Array, Hash
    Oj.dump(body, mode: :compat) if json?
  when String
    body
  else
    body.to_s
  end
end

.responseObject



61
62
63
# File 'lib/hyperdrive/endpoint.rb', line 61

def self.response
  ::Rack::Response.new(body, status, headers)
end

.statusObject



44
45
46
47
48
49
50
51
52
53
# File 'lib/hyperdrive/endpoint.rb', line 44

def self.status
  case env['REQUEST_METHOD']
  when 'POST'
    201
  when 'DELETE'
    204
  else
    200
  end
end

.xml?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/hyperdrive/endpoint.rb', line 29

def self.xml?
  media_type =~ /xml$/
end