Class: StreamRails::Enrich
- Inherits:
-
Object
- Object
- StreamRails::Enrich
- Defined in:
- lib/stream_rails/enrich.rb
Instance Method Summary collapse
- #collect_references(activities) ⇒ Object
- #enrich_activities(activities) ⇒ Object
- #enrich_aggregated_activities(aggregated_activities) ⇒ Object
-
#initialize(fields = nil) ⇒ Enrich
constructor
A new instance of Enrich.
- #inject_objects(activities, objects) ⇒ Object
- #model_field?(field_value) ⇒ Boolean
- #retrieve_objects(references) ⇒ Object
Constructor Details
#initialize(fields = nil) ⇒ Enrich
Returns a new instance of Enrich.
31 32 33 |
# File 'lib/stream_rails/enrich.rb', line 31 def initialize(fields = nil) @fields = fields || [:actor, :object, :target] end |
Instance Method Details
#collect_references(activities) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/stream_rails/enrich.rb', line 67 def collect_references(activities) model_refs = Hash.new { |h, k| h[k] = {} } activities.each do |activity| activity.select { |k, _v| @fields.include? k.to_sym }.each do |_field, value| next unless self.model_field?(value) model, id = value.split(':') model_refs[model][id] = 0 end end model_refs end |
#enrich_activities(activities) ⇒ Object
48 49 50 51 52 |
# File 'lib/stream_rails/enrich.rb', line 48 def enrich_activities(activities) references = collect_references(activities) objects = retrieve_objects(references) inject_objects(activities, objects) end |
#enrich_aggregated_activities(aggregated_activities) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/stream_rails/enrich.rb', line 54 def enrich_aggregated_activities(aggregated_activities) references = {} aggregated_activities.each do |aggregated| refs = collect_references(aggregated['activities']) references = references.merge(refs) { |_key, v1, v2| v1.merge(v2) } end objects = retrieve_objects(references) aggregated_activities.each do |aggregated| aggregated['activities'] = inject_objects(aggregated['activities'], objects) end create_activity_results(aggregated_activities) end |
#inject_objects(activities, objects) ⇒ Object
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/stream_rails/enrich.rb', line 83 def inject_objects(activities, objects) create_activity_results(activities).each do |activity| activity.select { |k, _v| @fields.include? k.to_sym }.each do |field, value| next unless self.model_field?(value) model, id = value.split(':') activity[field] = objects[model][id] || value activity.track_not_enriched_field(field, value) if objects[model][id].nil? end end end |
#model_field?(field_value) ⇒ Boolean
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/stream_rails/enrich.rb', line 35 def model_field?(field_value) return false unless field_value.respond_to?('split') bits = field_value.split(':') return false if bits.length < 2 begin bits[0].classify.constantize rescue NameError return false else return true end end |
#retrieve_objects(references) ⇒ Object
79 80 81 |
# File 'lib/stream_rails/enrich.rb', line 79 def retrieve_objects(references) Hash[references.map { |model, ids| [model, Hash[model.classify.constantize.where(id: ids.keys).map { |i| [i.id.to_s, i] }]] }] end |