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(name, hyperdrive_config = hyperdrive.config) ⇒ 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(name, hyperdrive_config = hyperdrive.config) ⇒ Resource
Returns a new instance of Resource.
9
10
11
12
13
14
15
16
17
|
# File 'lib/hyperdrive/resource.rb', line 9
def initialize(name, hyperdrive_config = hyperdrive.config)
@namespace = name.to_s.en.plural
@endpoint = "/#{namespace}"
@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
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/hyperdrive/resource.rb', line 42
def acceptable_content_types(http_request_method)
content_types = []
@config[:media_types].each do |media_type|
available_versions(http_request_method).each do |version|
content_types << "application/vnd.#{@config[:vendor]}.#{namespace}.#{version}+#{media_type}"
end
content_types << "application/vnd.#{@config[:vendor]}.#{namespace}+#{media_type}"
content_types << "application/vnd.#{@config[:vendor]}+#{media_type}"
end
content_types
end
|
#allowed_methods ⇒ Object
67
68
69
|
# File 'lib/hyperdrive/resource.rb', line 67
def allowed_methods
request_methods.values_at(*request_handlers.keys)
end
|
#available_versions(http_request_method) ⇒ Object
54
55
56
57
|
# File 'lib/hyperdrive/resource.rb', line 54
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
59
60
61
|
# File 'lib/hyperdrive/resource.rb', line 59
def latest_version(http_request_method)
available_versions(http_request_method).first
end
|
#register_filter(filter, description, options = {}) ⇒ Object
23
24
25
|
# File 'lib/hyperdrive/resource.rb', line 23
def register_filter(filter, description, options = {})
@filters[filter] = Filter.new(filter, description, options)
end
|
#register_param(param, description, options = {}) ⇒ Object
19
20
21
|
# File 'lib/hyperdrive/resource.rb', line 19
def register_param(param, description, options = {})
@params[param] = Param.new(param, description, options)
end
|
#register_request_handler(request_method, request_handler, version = 'v1') ⇒ Object
27
28
29
30
31
32
33
34
|
# File 'lib/hyperdrive/resource.rb', line 27
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
36
37
38
39
40
|
# File 'lib/hyperdrive/resource.rb', line 36
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
63
64
65
|
# File 'lib/hyperdrive/resource.rb', line 63
def request_method_allowed?(http_request_method)
allowed_methods.include?(http_request_method)
end
|
#required?(param, http_request_method) ⇒ Boolean
81
82
83
|
# File 'lib/hyperdrive/resource.rb', line 81
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
76
77
78
79
|
# File 'lib/hyperdrive/resource.rb', line 76
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
71
72
73
74
|
# File 'lib/hyperdrive/resource.rb', line 71
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
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/hyperdrive/resource.rb', line 85
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
|