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 || %i[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
75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/stream_rails/enrich.rb', line 75 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.rpartition(':') model_refs[model][id] = 0 end end model_refs end |
#enrich_activities(activities) ⇒ Object
56 57 58 59 60 |
# File 'lib/stream_rails/enrich.rb', line 56 def enrich_activities(activities) references = collect_references(activities) objects = retrieve_objects(references) inject_objects(activities, objects) end |
#enrich_aggregated_activities(aggregated_activities) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/stream_rails/enrich.rb', line 62 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
96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/stream_rails/enrich.rb', line 96 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.rpartition(':') 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 53 54 |
# File 'lib/stream_rails/enrich.rb', line 41 def model_field?(field_value) return false unless field_value.respond_to?('split') model, _, id = field_value.rpartition(':') return false unless model.present? && id.present? begin model.classify.constantize rescue NameError false else true end end |
#retrieve_objects(references) ⇒ Object
88 89 90 91 92 93 94 |
# File 'lib/stream_rails/enrich.rb', line 88 def retrieve_objects(references) references.map do |model, ids| [model, model.classify.constantize.where(model.classify.constantize.primary_key => ids.keys).map do |i| [i.id.to_s, i] end.to_h] end.to_h end |