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.



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

Returns:

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