Class: INatGet::Data::DSL::List
- Inherits:
-
Object
- Object
- INatGet::Data::DSL::List
show all
- Includes:
- Enumerable, INatGet::Data::DSL
- Defined in:
- lib/inat-get/data/dsl/list.rb
#AND, #ANYTHING, #NOT, #NOTHING, #OR, #Q, #finish_time, #get_identification, #get_observation, #get_place, #get_project, #get_taxon, #get_user, #now, #select_identifications, #select_observations, #select_places, #select_projects, #select_taxa, #select_users, #start_time, #time_range, #today, #version, #version!, #version?, #version_alias
Class Method Details
.commons(num, *src) ⇒ List
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
# File 'lib/inat-get/data/dsl/list.rb', line 212
def self.commons num, *src
keys = {}
values = {}
src.each do |s|
s.each do |value|
key = value.key
if value
keys[key] ||= 0
keys[key] += 1
values[key] ||= []
values[key] << value
end
end
end
selected_keys = keys.select { |_, value| value >= num }.keys
result = new
values.slice(*selected_keys).each_value do |value|
result.add! value.reduce(:+)
end
result
end
|
Instance Method Details
#*(other) ⇒ List
118
119
120
|
# File 'lib/inat-get/data/dsl/list.rb', line 118
def * other
copy.mul! other
end
|
#+(other) ⇒ List
113
114
115
|
# File 'lib/inat-get/data/dsl/list.rb', line 113
def + other
copy.add! other
end
|
#-(other) ⇒ List
123
124
125
|
# File 'lib/inat-get/data/dsl/list.rb', line 123
def - other
copy.sub! other
end
|
27
28
29
|
# File 'lib/inat-get/data/dsl/list.rb', line 27
def [] key
@datasets[key]
end
|
#add!(other) ⇒ self
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/inat-get/data/dsl/list.rb', line 50
def add! other
other.each do |ds|
if @datasets.has_key?(ds.key)
@datasets[ds.key] += ds
else
@datasets[ds.key] = ds
end
end
self
end
|
#count ⇒ Integer
Also known as:
size
147
148
149
|
# File 'lib/inat-get/data/dsl/list.rb', line 147
def count
@datasets.count
end
|
#datasets ⇒ Array<Dataset>
Also known as:
to_a, values
41
42
43
44
45
46
47
|
# File 'lib/inat-get/data/dsl/list.rb', line 41
def datasets
if @sorter
@datasets.values.sort_by(&@sorter)
else
@datasets.values
end
end
|
#each {|ds| ... } ⇒ self
136
137
138
139
140
141
142
143
144
|
# File 'lib/inat-get/data/dsl/list.rb', line 136
def each
return to_enum(__method__) unless block_given?
if @sorter
@datasets.values.sort_by(&@sorter).each { |ds| yield ds }
else
@datasets.each { |_, ds| yield ds }
end
self
end
|
#empty? ⇒ Boolean
197
198
199
|
# File 'lib/inat-get/data/dsl/list.rb', line 197
def empty?
@datasets.empty?
end
|
#filter {|ds| ... } ⇒ List
180
181
182
183
|
# File 'lib/inat-get/data/dsl/list.rb', line 180
def filter &block
return to_enum(__method__) unless block_given?
copy.filter!(&block)
end
|
#filter! {|ds| ... } ⇒ self
156
157
158
159
160
161
162
163
|
# File 'lib/inat-get/data/dsl/list.rb', line 156
def filter!
if block_given?
@datasets.filter! do |_, value|
yield value
end
end
self
end
|
#filter_keys {|key| ... } ⇒ List
188
189
190
191
|
# File 'lib/inat-get/data/dsl/list.rb', line 188
def filter_keys &block
return to_enum(__method__) unless block_given?
copy.filter_keys!(&block)
end
|
#filter_keys! {|key| ... } ⇒ self
168
169
170
171
172
173
174
175
|
# File 'lib/inat-get/data/dsl/list.rb', line 168
def filter_keys!
if block_given?
@datasets.filter! do |key, _|
yield key
end
end
self
end
|
#has_key?(key) ⇒ Boolean
193
194
195
|
# File 'lib/inat-get/data/dsl/list.rb', line 193
def has_key? key
@datasets.has_key? key
end
|
#keys ⇒ Array<Object>
22
23
24
|
# File 'lib/inat-get/data/dsl/list.rb', line 22
def keys
@datasets.keys
end
|
#mul!(other) ⇒ self
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/inat-get/data/dsl/list.rb', line 62
def mul! other
result = {}
case other
when INatGet::Data::DSL::List
other.each do |ds|
sds = @datasets[ds.key]
if sds
result[ds.key] = sds + ds
end
end
when Enumerable
other.each do |key|
sds = @datasets[key]
if sds
result[key] = sds
end
end
end
@datasets = result
self
end
|
#sort {|ds| ... } ⇒ List
240
241
242
243
244
245
246
|
# File 'lib/inat-get/data/dsl/list.rb', line 240
def sort &block
if block_given?
copy.sort!(&block)
else
copy.sort!
end
end
|
#sort! {|ds| ... } ⇒ self
250
251
252
253
254
255
256
257
|
# File 'lib/inat-get/data/dsl/list.rb', line 250
def sort! &block
if block_given?
@sorter = block
else
@sorter = lambda { |ds| ds.key }
end
self
end
|
#sub!(other) ⇒ self
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/inat-get/data/dsl/list.rb', line 85
def sub! other
case other
when INatGet::Data::DSL::List
other.each do |ds|
@datasets.delete ds.key
end
when Enumerable
other.each do |key|
@datasets.delete key
end
end
self
end
|
100
101
102
103
104
105
106
|
# File 'lib/inat-get/data/dsl/list.rb', line 100
def to_dataset
result = INatGet::Data::DSL::Dataset::new(nil, NOTHING, true)
@datasets.each do |_, ds|
result += ds
end
result
end
|
#to_h ⇒ Hash
205
206
207
|
# File 'lib/inat-get/data/dsl/list.rb', line 205
def to_h
@datasets.dup
end
|