Class: StreamRails::Enrich

Inherits:
Object
  • Object
show all
Defined in:
lib/stream_rails/enrich.rb

Instance Method Summary collapse

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

Returns:

  • (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