Class: StreamRails::Enrich
- Inherits:
-
Object
- Object
- StreamRails::Enrich
- Defined in:
- lib/stream_rails/enrich.rb
Instance Attribute Summary collapse
-
#fields ⇒ Object
readonly
Returns the value of attribute fields.
Instance Method Summary collapse
- #add_fields(new_fields) ⇒ Object
- #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.
33 34 35 |
# File 'lib/stream_rails/enrich.rb', line 33 def initialize(fields = nil) @fields = fields || [:actor, :object, :target] end |
Instance Attribute Details
#fields ⇒ Object (readonly)
Returns the value of attribute fields.
31 32 33 |
# File 'lib/stream_rails/enrich.rb', line 31 def fields @fields end |
Instance Method Details
#add_fields(new_fields) ⇒ Object
37 38 39 |
# File 'lib/stream_rails/enrich.rb', line 37 def add_fields(new_fields) new_fields.each { |i| @fields << i } end |
#collect_references(activities) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/stream_rails/enrich.rb', line 73 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 model_field?(value) model, id = value.split(':') model_refs[model][id] = 0 end end model_refs end |
#enrich_activities(activities) ⇒ Object
54 55 56 57 58 |
# File 'lib/stream_rails/enrich.rb', line 54 def enrich_activities(activities) references = collect_references(activities) objects = retrieve_objects(references) inject_objects(activities, objects) end |
#enrich_aggregated_activities(aggregated_activities) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/stream_rails/enrich.rb', line 60 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
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/stream_rails/enrich.rb', line 89 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 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
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/stream_rails/enrich.rb', line 41 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
85 86 87 |
# File 'lib/stream_rails/enrich.rb', line 85 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 |