Class: Paymos::Model
- Inherits:
-
Object
show all
- Defined in:
- lib/paymos/models.rb,
sig/paymos.rbs
Class Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(**attributes) ⇒ Model
Returns a new instance of Model.
47
48
49
50
51
52
53
54
55
|
# File 'lib/paymos/models.rb', line 47
def initialize(**attributes)
unknown = attributes.keys - self.class.field_names
raise ArgumentError, "Unknown model fields: #{unknown.join(', ')}" unless unknown.empty?
self.class.field_names.each do |name|
instance_variable_set("@#{name}", Model.deep_freeze(attributes[name]))
end
freeze
end
|
Class Attribute Details
.field_names ⇒ Object
Returns the value of attribute field_names.
28
29
30
|
# File 'lib/paymos/models.rb', line 28
def field_names
@field_names
end
|
.required_names ⇒ Object
Returns the value of attribute required_names.
28
29
30
|
# File 'lib/paymos/models.rb', line 28
def required_names
@required_names
end
|
Class Method Details
.deep_freeze(value) ⇒ Object
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/paymos/models.rb', line 65
def self.deep_freeze(value)
case value
when Hash
value.transform_values { |item| deep_freeze(item) }.freeze
when Array
value.map { |item| deep_freeze(item) }.freeze
else
value.freeze
end
end
|
.fields(*names, required: names) ⇒ Object
30
31
32
33
34
|
# File 'lib/paymos/models.rb', line 30
def fields(*names, required: names)
@field_names = names.freeze
@required_names = required.freeze
attr_reader(*names)
end
|
.from(value) ⇒ Object
36
37
38
39
40
41
42
43
44
|
# File 'lib/paymos/models.rb', line 36
def from(value)
raise Error, 'Paymos API response must be a JSON object' unless value.is_a?(Hash)
attributes = field_names.to_h { |name| [name, value[name.to_s]] }
missing = required_names.select { |name| attributes[name].nil? }
raise Error, "Paymos API response is missing: #{missing.join(', ')}" unless missing.empty?
new(**attributes)
end
|
Instance Method Details
#[](name) ⇒ Object
57
58
59
|
# File 'lib/paymos/models.rb', line 57
def [](name)
public_send(name.to_sym)
end
|
#to_h ⇒ Hash[Symbol, untyped]
61
62
63
|
# File 'lib/paymos/models.rb', line 61
def to_h
self.class.field_names.to_h { |name| [name, public_send(name)] }
end
|