Class: Namo::Collection

Inherits:
Namo
  • Object
show all
Defined in:
lib/Namo/Collection.rb

Constant Summary

Constants inherited from Namo

VERSION

Instance Attribute Summary collapse

Attributes inherited from Namo

#data, #formulae, #name

Instance Method Summary collapse

Methods inherited from Namo

#&, #*, #**, #+, #-, #/, #<, #<=, #==, #===, #>, #>=, #[], #[]=, #^, #coordinates, #data_dimensions, #derived_dimensions, #dimensions, #eql?, #hash, #to_a, #to_h, #values, #|

Methods included from Enumerable

#drop, #drop_while, #each, #first, #last, #partition, #reject, #select, #sort_by, #take, #take_while, #uniq

Instance Attribute Details

#membersObject (readonly)

Returns the value of attribute members.



6
7
8
# File 'lib/Namo/Collection.rb', line 6

def members
  @members
end

Instance Method Details

#<<(*members) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/Namo/Collection.rb', line 8

def <<(*members)
  members.flatten.each do |member|
    @members.reject!{|existing| existing.name == member.name} unless member.name.nil?
    @members << member
  end
  @data = detail.data
  self
end

#as_detail(by = :member) ⇒ Object



40
41
42
43
# File 'lib/Namo/Collection.rb', line 40

def as_detail(by = :member)
  @data = detail(by: by).data
  self
end

#as_summary(dimension, by: :member, reducer: :sum) ⇒ Object



35
36
37
38
# File 'lib/Namo/Collection.rb', line 35

def as_summary(dimension, by: :member, reducer: :sum)
  @data = summary(dimension, by: by, reducer: reducer).data
  self
end

#detail(by: :member) ⇒ Object



28
29
30
31
32
33
# File 'lib/Namo/Collection.rb', line 28

def detail(by: :member)
  rows = @members.flat_map do |member|
    member.data.map{|row| row.key?(by) ? row : row.merge(by => member.name)}
  end
  Namo.new(rows)
end

#find(name) ⇒ Object



17
18
19
# File 'lib/Namo/Collection.rb', line 17

def find(name)
  @members.find{|member| member.name == name} unless name.nil?
end

#summary(dimension, by: :member, reducer: :sum) ⇒ Object



21
22
23
24
25
26
# File 'lib/Namo/Collection.rb', line 21

def summary(dimension, by: :member, reducer: :sum)
  rows = @members.map do |member|
    {by => member.name, dimension => member.values(dimension).send(reducer)}
  end
  Namo.new(rows)
end