Class: PrefabC::AbstractResource
- Inherits:
-
Object
- Object
- PrefabC::AbstractResource
show all
- Defined in:
- lib/prefabc/abstract_resource.rb
Constant Summary
collapse
- KEYS_TO_PARSE_AS_DATETIME =
Set.new(%i[date])
- IMMUTABLE_PARAMETERS =
Set.new(%i[account amount book currency date entity])
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of AbstractResource.
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/prefabc/abstract_resource.rb', line 29
def initialize(raw_params = {})
@dirty_params = {}
raise 'Argument is expected to be a Hash.' unless raw_params.is_a?(Hash)
@params = AbstractResource.rubify_raw_params(raw_params)
@params.each do |key, value|
unless methods.include?(key.to_sym)
self.class.class_eval { attr_reader key.to_sym }
self.class.send(:define_method, "#{key}=") do |args|
resetting_immutable = IMMUTABLE_PARAMETERS.include?(key) &&
instance_variable_get("@#{key}")
raise "`#{key}` is an immutable property." if resetting_immutable
@dirty_params[key] = args
instance_variable_set("@#{key}", args)
end
end
if KEYS_TO_PARSE_AS_DATETIME.include?(key)
instance_variable_set("@#{key}", Time.parse(value))
else
instance_variable_set("@#{key}", value)
end
end
end
|
Class Method Details
.collection_name ⇒ Object
6
7
8
|
# File 'lib/prefabc/abstract_resource.rb', line 6
def self.collection_name
"#{resource_name}s"
end
|
.resource_name ⇒ Object
10
11
12
|
# File 'lib/prefabc/abstract_resource.rb', line 10
def self.resource_name
name.split('::').last.downcase
end
|
.rubify_raw_params(raw_params) ⇒ Object
22
23
24
25
26
27
|
# File 'lib/prefabc/abstract_resource.rb', line 22
def self.rubify_raw_params(raw_params)
tags = raw_params[:tags]
params = raw_params.to_snake_keys
params[:tags] = tags if tags
params
end
|
.subresource ⇒ Object
18
19
20
|
# File 'lib/prefabc/abstract_resource.rb', line 18
def self.subresource
raise 'This should be implemented in the subclass.'
end
|
Instance Method Details
#collection_path ⇒ Object
61
62
63
|
# File 'lib/prefabc/abstract_resource.rb', line 61
def collection_path
"#{parent_path}/#{self.class.collection_name}"
end
|
#parent_path ⇒ Object
65
66
67
68
69
70
71
72
73
|
# File 'lib/prefabc/abstract_resource.rb', line 65
def parent_path
@parent_path ||= begin
hierarchy = self.class.hierarchy
parents = hierarchy[0...hierarchy.index(self.class)]
parents.inject('') do |partial, klass|
"#{partial}/#{klass.collection_name}/#{send(klass.resource_name)}"
end
end
end
|
#resource_path ⇒ Object
57
58
59
|
# File 'lib/prefabc/abstract_resource.rb', line 57
def resource_path
"#{collection_path}/#{id}"
end
|
#subresource_collection_path ⇒ Object
53
54
55
|
# File 'lib/prefabc/abstract_resource.rb', line 53
def subresource_collection_path
"#{resource_path}/#{self.class.subresource.collection_name}"
end
|