Module: Wherever::Recalculate
- Included in:
- Wherever
- Defined in:
- lib/wherever/wherever/recalculate.rb
Instance Method Summary collapse
- #recalculate(name) ⇒ Object
- #recalculate_identifier ⇒ Object
- #recalculate_with_key(group) ⇒ Object
- #sum_group_for(group, options) ⇒ Object
Instance Method Details
#recalculate(name) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/wherever/wherever/recalculate.rb', line 3 def recalculate(name) keys = get_lookup(name).keys recalculate_identifier groups = config.key_groups groups_with_key, groups_without_key = groups.partition do |group| group & keys == keys end groups_with_key.each do |group| recalculate_with_key(group) end @summing.each do |group, | groups_without_key.delete(group) get_key_store(*group).datasets.delete_all sum_group_for(StringHelper.add_method_to_id(group, false), ) end groups_without_key.each do |group| get_key_store(*group).datasets.delete_all identifier_set.datasets.all.each do |record| for_group(group, record.values, record, false) end end end |
#recalculate_identifier ⇒ Object
43 44 45 46 47 48 |
# File 'lib/wherever/wherever/recalculate.rb', line 43 def recalculate_identifier identifier_set.datasets.all.each do |record| @grouping.call(record.values, nil, record, config.keys) record.save! end end |
#recalculate_with_key(group) ⇒ Object
50 51 52 53 54 55 |
# File 'lib/wherever/wherever/recalculate.rb', line 50 def recalculate_with_key(group) get_key_store(*group).datasets.all.each do |record| @grouping.call(record.values, nil, record, group) record.save! end end |
#sum_group_for(group, options) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/wherever/wherever/recalculate.rb', line 30 def sum_group_for(group, ) group_by = ['group_by'] || lambda do |record| group.inject({}) { |r, v| r[v.to_id] = record[v.to_id]; r } end summer = ['summer'] || raise('Summer must be set.') source = ['source'] || ['identifier'] grouped = get_key_store(*source).datasets.all.group_by{|record| group_by.call(record)} grouped.map do |key, records| get_key_store(*group).datasets.create(key.merge(summer.call(records))) end end |