Class: JSONAPIonify::Structure::Collections::Base
- Inherits:
-
Concurrent::Array
- Object
- Concurrent::Array
- JSONAPIonify::Structure::Collections::Base
show all
- Includes:
- EnumerableObserver, Helpers::InheritsOrigin
- Defined in:
- lib/jsonapionify/structure/collections/base.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#client?, #origin, #server?
Constructor Details
#initialize(array = []) ⇒ Base
Returns a new instance of Base.
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 22
def initialize(array = [])
observe.added do |items|
items.each do |item|
item.instance_variable_set(:@parent, self) unless item.frozen?
end
end
array.each do |instance|
self << instance
end
end
|
Instance Attribute Details
#parent ⇒ Object
Returns the value of attribute parent.
10
11
12
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 10
def parent
@parent
end
|
Class Method Details
.value_is(type_class) ⇒ Object
14
15
16
17
18
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 14
def self.value_is(type_class)
define_method(:type_class) do
type_class
end
end
|
Instance Method Details
#<<(instance) ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 68
def <<(instance)
new_instance =
case instance
when Hash
type_class.new(**instance)
when type_class
instance
else
if type_class < instance.class
type_class.from_hash instance.to_h
else
raise(
ValidationError,
"Can't initialize collection `#{self.class.name}` with a type of `#{instance.class.name}`"
)
end
end
super new_instance
end
|
#collect_hashes ⇒ Object
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 47
def collect_hashes
map do |member|
case member
when Objects::Base, Hash
member.to_h
else
member
end
end
end
|
#compile ⇒ Object
58
59
60
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 58
def compile
collect_hashes
end
|
#errors ⇒ Object
88
89
90
91
92
93
94
95
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 88
def errors
map.each_with_index.each_with_object({}) do |(value, key), errors|
next unless value.respond_to? :errors
value.errors.each do |error_key, message|
errors[[key, error_key].join('/')] = message
end
end
end
|
#new(**attributes) ⇒ Object
Also known as:
append
62
63
64
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 62
def new(**attributes)
self << attributes
end
|
#original_method(method) ⇒ Object
33
34
35
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 33
def original_method(method)
Array.instance_method(method).bind(self)
end
|
#signature ⇒ Object
43
44
45
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 43
def signature
"#{self.class.name}:#{Digest::SHA2.hexdigest map(&:signature).join}"
end
|
#validate ⇒ Object
37
38
39
40
41
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 37
def validate
each do |member|
member.validate if member.respond_to? :validate
end
end
|
#warnings ⇒ Object
Also known as:
all_warnings
97
98
99
100
101
102
103
104
|
# File 'lib/jsonapionify/structure/collections/base.rb', line 97
def warnings
map.each_with_index.each_with_object({}) do |(value, key), warnings|
next unless value.respond_to? :all_warnings
value.all_warnings.each do |warning_key, message|
warnings[[key, warning_key].join('. ')] = message
end
end
end
|