Class: StreamRails::Enrich

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

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#fieldsObject (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

Returns:

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