Class: Hyperdrive::Resource
- Inherits:
-
Object
- Object
- Hyperdrive::Resource
show all
- Includes:
- Values
- Defined in:
- lib/hyperdrive/resource.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#acceptable_content_types(http_request_method) ⇒ Object
-
#allowed_methods ⇒ Object
-
#available_versions(http_request_method) ⇒ Object
-
#initialize(resource, options = {}) ⇒ Resource
constructor
A new instance of Resource.
-
#latest_version(http_request_method) ⇒ Object
-
#register_filter(filter, description, options = {}) ⇒ Object
-
#register_param(param, description, options = {}) ⇒ Object
-
#register_request_handler(request_method, request_handler, version = 'v1') ⇒ Object
-
#request_handler(http_request_method, version = nil) ⇒ Object
-
#request_method_allowed?(http_request_method) ⇒ Boolean
-
#required?(param, http_request_method) ⇒ Boolean
-
#required_filter?(filter, http_request_method) ⇒ Boolean
-
#required_param?(param, http_request_method) ⇒ Boolean
-
#to_hash ⇒ Object
Methods included from Values
default_config, default_cors_options, default_headers, definable_request_methods, http_request_methods, request_methods, supported_request_methods
Constructor Details
#initialize(resource, options = {}) ⇒ Resource
Returns a new instance of Resource.
9
10
11
12
13
14
15
16
17
18
19
|
# File 'lib/hyperdrive/resource.rb', line 9
def initialize(resource, options = {})
@resource = resource.to_s.split('_')
@resource[-1] = @resource[-1].en.plural
@namespace = @resource.join(':')
@endpoint = options.fetch(:endpoint) { "/#{@resource.join('/')}" }
@params = default_params
@filters = default_filters
@request_handlers = default_request_handlers
@config = hyperdrive.config
@id = [@config[:vendor], @namespace].join(':')
end
|
Instance Attribute Details
#description ⇒ Object
Returns the value of attribute description.
7
8
9
|
# File 'lib/hyperdrive/resource.rb', line 7
def description
@description
end
|
#endpoint ⇒ Object
Returns the value of attribute endpoint.
6
7
8
|
# File 'lib/hyperdrive/resource.rb', line 6
def endpoint
@endpoint
end
|
#filters ⇒ Object
Returns the value of attribute filters.
6
7
8
|
# File 'lib/hyperdrive/resource.rb', line 6
def filters
@filters
end
|
#id ⇒ Object
Returns the value of attribute id.
6
7
8
|
# File 'lib/hyperdrive/resource.rb', line 6
def id
@id
end
|
#name ⇒ Object
Returns the value of attribute name.
7
8
9
|
# File 'lib/hyperdrive/resource.rb', line 7
def name
@name
end
|
#namespace ⇒ Object
Returns the value of attribute namespace.
6
7
8
|
# File 'lib/hyperdrive/resource.rb', line 6
def namespace
@namespace
end
|
#params ⇒ Object
Returns the value of attribute params.
6
7
8
|
# File 'lib/hyperdrive/resource.rb', line 6
def params
@params
end
|
#request_handlers ⇒ Object
Returns the value of attribute request_handlers.
6
7
8
|
# File 'lib/hyperdrive/resource.rb', line 6
def request_handlers
@request_handlers
end
|
#version ⇒ Object
Returns the value of attribute version.
6
7
8
|
# File 'lib/hyperdrive/resource.rb', line 6
def version
@version
end
|
Instance Method Details
#acceptable_content_types(http_request_method) ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/hyperdrive/resource.rb', line 44
def acceptable_content_types(http_request_method)
content_types = []
media_type_namepace = @resource.join('.')
@config[:media_types].each do |media_type|
available_versions(http_request_method).each do |version|
content_types << "application/vnd.#{@config[:vendor]}.#{media_type_namepace}.#{version}+#{media_type}"
end
content_types << "application/vnd.#{@config[:vendor]}.#{media_type_namepace}+#{media_type}"
content_types << "application/vnd.#{@config[:vendor]}+#{media_type}"
end
content_types
end
|
#allowed_methods ⇒ Object
70
71
72
|
# File 'lib/hyperdrive/resource.rb', line 70
def allowed_methods
request_methods.values_at(*request_handlers.keys)
end
|
#available_versions(http_request_method) ⇒ Object
57
58
59
60
|
# File 'lib/hyperdrive/resource.rb', line 57
def available_versions(http_request_method)
request_method = http_request_methods[http_request_method]
@request_handlers[request_method].keys.sort.reverse
end
|
#latest_version(http_request_method) ⇒ Object
62
63
64
|
# File 'lib/hyperdrive/resource.rb', line 62
def latest_version(http_request_method)
available_versions(http_request_method).first
end
|
#register_filter(filter, description, options = {}) ⇒ Object
25
26
27
|
# File 'lib/hyperdrive/resource.rb', line 25
def register_filter(filter, description, options = {})
@filters[filter] = Filter.new(filter, description, options)
end
|
#register_param(param, description, options = {}) ⇒ Object
21
22
23
|
# File 'lib/hyperdrive/resource.rb', line 21
def register_param(param, description, options = {})
@params[param] = Param.new(param, description, options)
end
|
#register_request_handler(request_method, request_handler, version = 'v1') ⇒ Object
29
30
31
32
33
34
35
36
|
# File 'lib/hyperdrive/resource.rb', line 29
def register_request_handler(request_method, request_handler, version = 'v1')
@request_handlers[request_method] ||= {}
@request_handlers[request_method].merge!({ version => request_handler })
if request_method == :get
@request_handlers[:head] ||= {}
@request_handlers[:head].merge!({ version => @request_handlers[:get][version] })
end
end
|
#request_handler(http_request_method, version = nil) ⇒ Object
38
39
40
41
42
|
# File 'lib/hyperdrive/resource.rb', line 38
def request_handler(http_request_method, version = nil)
version ||= latest_version(http_request_method)
request_method = http_request_methods[http_request_method]
request_handlers[request_method][version]
end
|
#request_method_allowed?(http_request_method) ⇒ Boolean
66
67
68
|
# File 'lib/hyperdrive/resource.rb', line 66
def request_method_allowed?(http_request_method)
allowed_methods.include?(http_request_method)
end
|
#required?(param, http_request_method) ⇒ Boolean
84
85
86
|
# File 'lib/hyperdrive/resource.rb', line 84
def required?(param, http_request_method)
required_param?(param, http_request_method) or required_filter?(param, http_request_method)
end
|
#required_filter?(filter, http_request_method) ⇒ Boolean
79
80
81
82
|
# File 'lib/hyperdrive/resource.rb', line 79
def required_filter?(filter, http_request_method)
return false unless %w(GET HEAD OPTIONS).include? http_request_method
filters.key?(filter) and filters[filter].required?(http_request_method)
end
|
#required_param?(param, http_request_method) ⇒ Boolean
74
75
76
77
|
# File 'lib/hyperdrive/resource.rb', line 74
def required_param?(param, http_request_method)
return false if %w(GET HEAD OPTIONS).include? http_request_method
params.key?(param) and params[param].required?(http_request_method)
end
|
#to_hash ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/hyperdrive/resource.rb', line 88
def to_hash
{
_links: { 'self' => { href: endpoint } },
id: id,
name: name,
description: description,
methods: allowed_methods,
params: params.map { |_,param| param.to_hash },
filters: filters.map { |_,filter| filter.to_hash },
media_types: allowed_methods.map { |method| acceptable_content_types(method) }.uniq
}
end
|