class StreamRails::Enrich
Attributes
fields[R]
Public Class Methods
new(fields = nil)
click to toggle source
# File lib/stream_rails/enrich.rb, line 33 def initialize(fields = nil) @fields = fields || %i[actor object target] end
Public Instance Methods
add_fields(new_fields)
click to toggle source
# File lib/stream_rails/enrich.rb, line 37 def add_fields(new_fields) new_fields.each { |i| @fields << i } end
collect_references(activities)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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
Private Instance Methods
create_activity_results(activities)
click to toggle source
# File lib/stream_rails/enrich.rb, line 110 def create_activity_results(activities) activities.map { |a| ActivityResult.new.from_activity(a) } end