Class: Tacokit::Resource
- Inherits:
-
Object
show all
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/tacokit/resource.rb
Constant Summary
- SPECIAL_METHODS =
Set.new(%w[fields])
Instance Attribute Summary (collapse)
Instance Method Summary
(collapse)
Constructor Details
- (Resource) initialize(data = {})
Returns a new instance of Resource
19
20
21
22
23
24
25
26
|
# File 'lib/tacokit/resource.rb', line 19
def initialize(data = {})
@attrs = {}
@_fields = Set.new
data.each do |key, value|
@attrs[key.to_sym] = process_value(value)
end
new_attrs(*data.keys)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
- (Object) method_missing(method, *args)
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/tacokit/resource.rb', line 87
def method_missing(method, *args)
attr_name, suffix = method.to_s.scan(/([a-z0-9\_]+)(\?|\=)?$/i).first
if suffix == ATTR_SETTER
setter_missing(attr_name, args.first)
elsif attr_name && @_fields.include?(attr_name.to_sym)
getter_missing(attr_name, suffix)
elsif suffix.nil? && SPECIAL_METHODS.include?(attr_name)
instance_variable_get "@_#{attr_name}"
elsif attr_name && !@_fields.include?(attr_name.to_sym)
nil
else
super
end
end
|
Instance Attribute Details
- (Object) _fields
Returns the value of attribute _fields
12
13
14
|
# File 'lib/tacokit/resource.rb', line 12
def _fields
@_fields
end
|
- (Object) attrs
Also known as:
to_hash, to_h
Returns the value of attribute attrs
13
14
15
|
# File 'lib/tacokit/resource.rb', line 13
def attrs
@attrs
end
|
Instance Method Details
- (Object) [](method)
32
33
34
35
36
|
# File 'lib/tacokit/resource.rb', line 32
def [](method)
send(method.to_sym)
rescue NoMethodError
nil
end
|
- (Object) []=(method, value)
38
39
40
41
42
|
# File 'lib/tacokit/resource.rb', line 38
def []=(method, value)
send("#{method}=", value)
rescue NoMethodError
nil
end
|
- (Object) each(&block)
28
29
30
|
# File 'lib/tacokit/resource.rb', line 28
def each(&block)
@attrs.each(&block)
end
|
- (Object) inspect
Also known as:
to_s
50
51
52
|
# File 'lib/tacokit/resource.rb', line 50
def inspect
(to_attrs.respond_to?(:pretty_inspect) ? to_attrs.pretty_inspect : to_attrs.inspect)
end
|
- (Boolean) key?(key)
Also known as:
has_key?, include?
44
45
46
|
# File 'lib/tacokit/resource.rb', line 44
def key?(key)
@_fields.include?(key)
end
|
- (Object) to_attrs
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/tacokit/resource.rb', line 56
def to_attrs
hash = attrs.clone
hash.keys.each do |k|
if hash[k].is_a?(Resource)
hash[k] = hash[k].to_attrs
elsif hash[k].is_a?(Array) && hash[k].all? { |el| el.is_a?(Resource) }
hash[k] = hash[k].collect(&:to_attrs)
end
end
hash
end
|
- (Object) update(attributes)
68
69
70
71
72
|
# File 'lib/tacokit/resource.rb', line 68
def update(attributes)
attributes.each do |key, value|
send("#{key}=", value)
end
end
|