Class: INatGet::Data::DSL::List

Inherits:
Object
  • Object
show all
Includes:
Enumerable, INatGet::Data::DSL
Defined in:
lib/inat-get/data/dsl/list.rb

Enumerable collapse

Data Access collapse

Operators collapse

Sorting collapse

Methods included from INatGet::Data::DSL

#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

Returns:



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

Returns:



118
119
120
# File 'lib/inat-get/data/dsl/list.rb', line 118

def * other
  copy.mul! other
end

#+(other) ⇒ List

Returns:



113
114
115
# File 'lib/inat-get/data/dsl/list.rb', line 113

def + other
  copy.add! other
end

#-(other) ⇒ List

Returns:



123
124
125
# File 'lib/inat-get/data/dsl/list.rb', line 123

def - other
  copy.sub! other
end

#[](key) ⇒ Dataset?

Returns:



27
28
29
# File 'lib/inat-get/data/dsl/list.rb', line 27

def [] key
  @datasets[key]
end

#add!(other) ⇒ self

Returns:

  • (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

#countInteger Also known as: size

Returns:

  • (Integer)


147
148
149
# File 'lib/inat-get/data/dsl/list.rb', line 147

def count
  @datasets.count
end

#datasetsArray<Dataset> Also known as: to_a, values

Returns:



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

Yields:

  • Block

Yield Parameters:

Returns:

  • (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

Returns:

  • (Boolean)


197
198
199
# File 'lib/inat-get/data/dsl/list.rb', line 197

def empty?
  @datasets.empty?
end

#filter {|ds| ... } ⇒ List

Yields:

  • Boolean expression

Yield Parameters:

Returns:



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

Yields:

  • Boolean expression

Yield Parameters:

Returns:

  • (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

Yields:

  • Boolean expression

Yield Parameters:

  • key (Object)

Returns:



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

Yields:

  • Boolean expression

Yield Parameters:

  • key (Object)

Returns:

  • (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

Returns:

  • (Boolean)


193
194
195
# File 'lib/inat-get/data/dsl/list.rb', line 193

def has_key? key
  @datasets.has_key? key
end

#keysArray<Object>

Returns:

  • (Array<Object>)


22
23
24
# File 'lib/inat-get/data/dsl/list.rb', line 22

def keys
  @datasets.keys
end

#mul!(other) ⇒ self

Returns:

  • (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

Yield Parameters:

Returns:



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

Yield Parameters:

Returns:

  • (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

Returns:

  • (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

#to_datasetDataset

Returns:



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_hHash

Returns:

  • (Hash)


205
206
207
# File 'lib/inat-get/data/dsl/list.rb', line 205

def to_h
  @datasets.dup
end