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.
34 35 36 |
# File 'lib/stream_rails/enrich.rb', line 34 def initialize(fields = nil) @fields = fields || [:actor, :object] end |
Instance Method Details
#collect_references(activities) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/stream_rails/enrich.rb', line 71 def collect_references(activities) model_refs = Hash.new{ |h,k| h[k] = Hash.new} 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
52 53 54 55 56 |
# File 'lib/stream_rails/enrich.rb', line 52 def enrich_activities(activities) references = self.collect_references(activities) objects = self.retrieve_objects(references) self.inject_objects(activities, objects) end |
#enrich_aggregated_activities(aggregated_activities) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/stream_rails/enrich.rb', line 58 def enrich_aggregated_activities(aggregated_activities) references = Hash.new aggregated_activities.each do |aggregated| refs = self.collect_references(aggregated['activities']) references = references.merge(refs){|key, v1, v2| v1.merge(v2)} end objects = self.retrieve_objects(references) aggregated_activities.each do |aggregated| aggregated['activities'] = self.inject_objects(aggregated['activities'], objects) end aggregated_activities.map {|a| ActivityResult.new().from_activity(a)} end |
#inject_objects(activities, objects) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/stream_rails/enrich.rb', line 87 def inject_objects(activities, objects) activities = activities.map {|a| ActivityResult.new().from_activity(a)} 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 if objects[model][id].nil? activity.track_not_enriched_field(field, value) end end end activities end |
#model_field?(field_value) ⇒ Boolean
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/stream_rails/enrich.rb', line 38 def model_field?(field_value) bits = field_value.split(':') if bits.length < 2 return false end begin bits[0].classify.constantize rescue NameError return false else return true end end |
#retrieve_objects(references) ⇒ Object
83 84 85 |
# File 'lib/stream_rails/enrich.rb', line 83 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 |