Class: Namo::Collection
- Inherits:
-
Namo
- Object
- Namo
- Namo::Collection
- Defined in:
- lib/Namo/Collection.rb
Instance Attribute Summary collapse
-
#members ⇒ Object
readonly
Returns the value of attribute members.
Instance Method Summary collapse
- #<<(*constituents) ⇒ Object
- #as_detail(by = :member) ⇒ Object
- #as_summary(dimension, by: :member, reducer: :sum) ⇒ Object
- #detail(by: :member) ⇒ Object
- #find(name) ⇒ Object
- #summary(dimension, by: :member, reducer: :sum) ⇒ Object
Instance Attribute Details
#members ⇒ Object (readonly)
Returns the value of attribute members.
6 7 8 |
# File 'lib/Namo/Collection.rb', line 6 def members @members end |
Instance Method Details
#<<(*constituents) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/Namo/Collection.rb', line 8 def <<(*constituents) constituents.flatten.each do |constituent| case constituent when Namo then add_member(constituent) when Module then attach(constituent) when Hash, Row raise ArgumentError, "a Collection's rows come from its members; add a member (a named Namo), not a loose row" else raise TypeError, "can't append #{constituent.class} to a Collection" end end @data = detail.data self end |
#as_detail(by = :member) ⇒ Object
45 46 47 48 |
# File 'lib/Namo/Collection.rb', line 45 def as_detail(by = :member) @data = detail(by: by).data self end |
#as_summary(dimension, by: :member, reducer: :sum) ⇒ Object
40 41 42 43 |
# File 'lib/Namo/Collection.rb', line 40 def as_summary(dimension, by: :member, reducer: :sum) @data = summary(dimension, by: by, reducer: reducer).data self end |
#detail(by: :member) ⇒ Object
33 34 35 36 37 38 |
# File 'lib/Namo/Collection.rb', line 33 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
22 23 24 |
# File 'lib/Namo/Collection.rb', line 22 def find(name) @members.find{|member| member.name == name} unless name.nil? end |
#summary(dimension, by: :member, reducer: :sum) ⇒ Object
26 27 28 29 30 31 |
# File 'lib/Namo/Collection.rb', line 26 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 |