Class: Eco::Language::Models::Collection
- Inherits:
-
Object
- Object
- Eco::Language::Models::Collection
show all
- Includes:
- Enumerable
- Defined in:
- lib/eco/language/models/collection.rb
Constant Summary
collapse
- ATTR_PRESENCE_METHODS =
["present", "empty", "present_all?", "present_some?"]
- ATTR_COLLECTION_METHODS =
["exclude", "remove", "attr", "attr?", "attrs", "unique_attrs", "contains"] + ATTR_PRESENCE_METHODS
Class Method Summary
collapse
Instance Method Summary
collapse
-
#<(value) ⇒ Object
-
#<<(value) ⇒ Object
-
#attr(attr, value = true, modifier = Language::MatchModifier.new) ⇒ Object
-
#attr?(attr, value = true, modifier = Language::MatchModifier.new) ⇒ Boolean
-
#attrs(attr) ⇒ Object
-
#contains(attr, value, modifier = Language::MatchModifier.new) ⇒ Object
-
#delete!(value) ⇒ Object
-
#each(params: {}, &block) ⇒ Object
-
#empty(attr, flag = true) ⇒ Object
-
#empty? ⇒ Boolean
-
#exclude(attr, value, modifier = Language::MatchModifier.new) ⇒ Object
-
#group_by(attr = nil, &block) ⇒ Object
-
#initialize(data = [], klass:, factory: nil, handy: Eco::Assets::Language.new) ⇒ Collection
constructor
-
#length ⇒ Object
-
#merge(data) ⇒ Object
-
#new ⇒ Object
-
#newFrom(data) ⇒ Object
-
#present(attr, flag = true) ⇒ Object
-
#present_all?(attr, flag = true) ⇒ Boolean
-
#present_some?(attr, flag = true) ⇒ Boolean
-
#remove(attr, value, modifier = Language::MatchModifier.new) ⇒ Object
-
#to_c ⇒ Object
-
#to_h(attr) ⇒ Object
-
#unique_attrs(attr) ⇒ Object
-
#update(&block) ⇒ Object
Constructor Details
#initialize(data = [], klass:, factory: nil, handy: Eco::Assets::Language.new) ⇒ Collection
40
41
42
43
44
45
46
|
# File 'lib/eco/language/models/collection.rb', line 40
def initialize(data = [], klass:, factory: nil, handy: Eco::Assets::Language.new)
raise "Raise klass required, given: #{klass}" if !klass
@klass = klass
@factory = factory
@handy = handy
@items = to_klass(data)
end
|
Class Method Details
.attr_collection(*attrs) ⇒ Object
12
13
14
15
|
# File 'lib/eco/language/models/collection.rb', line 12
def attr_collection (*attrs)
block = ->(method) { attrs_create_method(attrs, method) }
ATTR_COLLECTION_METHODS.each(&block)
end
|
.attr_presence(*attrs) ⇒ Object
17
18
19
20
|
# File 'lib/eco/language/models/collection.rb', line 17
def attr_presence (*attrs)
block = ->(method) { attrs_create_method(attrs, method) }
ATTR_PRESENCE_METHODS.each(&block)
end
|
.attrs_create_method(attrs, method) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/eco/language/models/collection.rb', line 22
def attrs_create_method(attrs, method)
attrs.each do |attr|
attr = attr.to_s
if method.include?("attr")
attr_method = method.sub("attr", attr)
else
attr_method = "#{attr}_#{method}"
end
define_method attr_method do |*args|
send(method, attr, *args)
end
end
end
|
Instance Method Details
#<(value) ⇒ Object
78
79
80
81
|
# File 'lib/eco/language/models/collection.rb', line 78
def <(value)
@items.clear
self << value
end
|
#<<(value) ⇒ Object
83
84
85
86
87
|
# File 'lib/eco/language/models/collection.rb', line 83
def <<(value)
@items.concat(into_a(value))
on_change
self
end
|
#attr(attr, value = true, modifier = Language::MatchModifier.new) ⇒ Object
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/eco/language/models/collection.rb', line 106
def attr(attr, value = true, modifier = Language::MatchModifier.new)
if !!value == value present(attr, value)
else
return newFrom select { |object|
attr_val = fetch_attr(object, attr)
match?(attr_val, value, modifier)
}
end
end
|
#attr?(attr, value = true, modifier = Language::MatchModifier.new) ⇒ Boolean
117
118
119
120
121
122
123
124
125
|
# File 'lib/eco/language/models/collection.rb', line 117
def attr?(attr, value = true, modifier = Language::MatchModifier.new)
modifier = modifier.new.reverse
if !!value == value present(attr, value).length == length
else
obj_vals = attrs(attr)
return match?(obj_vals, value, modifier)
end
end
|
#attrs(attr) ⇒ Object
127
128
129
|
# File 'lib/eco/language/models/collection.rb', line 127
def attrs(attr)
map { |object| fetch_attr(object, attr) }
end
|
#contains(attr, value, modifier = Language::MatchModifier.new) ⇒ Object
152
153
154
155
|
# File 'lib/eco/language/models/collection.rb', line 152
def contains(attr, value, modifier = Language::MatchModifier.new)
modifier = modifier.new.pattern
self.attr(attr, value, modifier)
end
|
#delete!(value) ⇒ Object
93
94
95
|
# File 'lib/eco/language/models/collection.rb', line 93
def delete!(value)
self < @items - into_a(value)
end
|
#each(params: {}, &block) ⇒ Object
73
74
75
76
|
# File 'lib/eco/language/models/collection.rb', line 73
def each(params: {}, &block)
return to_enum(:each) unless block
@items.each(&block)
end
|
#empty(attr, flag = true) ⇒ Object
140
141
142
|
# File 'lib/eco/language/models/collection.rb', line 140
def empty(attr, flag = true)
present(attr, !flag)
end
|
#empty? ⇒ Boolean
69
70
71
|
# File 'lib/eco/language/models/collection.rb', line 69
def empty?
count == 0
end
|
#exclude(attr, value, modifier = Language::MatchModifier.new) ⇒ Object
98
99
100
|
# File 'lib/eco/language/models/collection.rb', line 98
def exclude(attr, value, modifier = Language::MatchModifier.new)
newFrom @items - self.attr(attr, value, modifier)
end
|
#group_by(attr = nil, &block) ⇒ Object
157
158
159
160
|
# File 'lib/eco/language/models/collection.rb', line 157
def group_by(attr = nil, &block)
return to_h(attr) if attr
to_a.group_by(&block) if block
end
|
#length ⇒ Object
65
66
67
|
# File 'lib/eco/language/models/collection.rb', line 65
def length
count
end
|
#merge(data) ⇒ Object
52
53
54
55
|
# File 'lib/eco/language/models/collection.rb', line 52
def merge(data)
data = data.to_a unless data.is_a?(Array)
newFrom to_a + data
end
|
#new ⇒ Object
61
62
63
|
# File 'lib/eco/language/models/collection.rb', line 61
def new
self.class.new(to_a, klass: @klass, factory: @factory)
end
|
#newFrom(data) ⇒ Object
48
49
50
|
# File 'lib/eco/language/models/collection.rb', line 48
def newFrom(data)
self.class.new(data, klass: @klass, factory: @factory)
end
|
#present(attr, flag = true) ⇒ Object
135
136
137
138
|
# File 'lib/eco/language/models/collection.rb', line 135
def present(attr, flag = true)
block = ->(o) { !!fetch_attr(o, attr) == !!flag }
newFrom select(&block)
end
|
#present_all?(attr, flag = true) ⇒ Boolean
144
145
146
|
# File 'lib/eco/language/models/collection.rb', line 144
def present_all?(attr, flag = true)
present(attr, flag).length == length
end
|
#present_some?(attr, flag = true) ⇒ Boolean
148
149
150
|
# File 'lib/eco/language/models/collection.rb', line 148
def present_some?(attr, flag = true)
present(attr, flag).length > 0
end
|
#remove(attr, value, modifier = Language::MatchModifier.new) ⇒ Object
102
103
104
|
# File 'lib/eco/language/models/collection.rb', line 102
def remove(attr, value, modifier = Language::MatchModifier.new)
self < exclude(attr, value, modifier)
end
|
#to_c ⇒ Object
57
58
59
|
# File 'lib/eco/language/models/collection.rb', line 57
def to_c
Collection.new(self, klass: @klass, factory: @factory)
end
|
#to_h(attr) ⇒ Object
162
163
164
165
|
# File 'lib/eco/language/models/collection.rb', line 162
def to_h(attr)
return {} if !attr
to_a.group_by { |object| object.method(attr).call }
end
|
#unique_attrs(attr) ⇒ Object
131
132
133
|
# File 'lib/eco/language/models/collection.rb', line 131
def unique_attrs(attr)
to_h(attr).keys
end
|
#update(&block) ⇒ Object
89
90
91
|
# File 'lib/eco/language/models/collection.rb', line 89
def update(&block)
newFrom self.map(&block)
end
|