Module: Blamescope::Trackable

Defined in:
lib/blamescope/trackable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.send_event(model, method_name) ⇒ type

Send event for model

Parameters:

  • model (Object)

    current object

  • method_name (String|Symbol)

    method invoked

Returns:

  • (type)
    description


15
16
17
18
19
20
21
22
23
24
25
# File 'lib/blamescope/trackable.rb', line 15

def self.send_event(model, method_name)
  class_name = model.class == Class ? model.name : model.class.name
    attrs = {}
    attrs[:id] = model.id if model.respond_to? :id
    if model.respond_to? :name
      attrs[:name] = model.name
    elsif model.respond_to? :title
      attrs[:title] = model.title
    end
    Blamescope.emit(model: class_name, action: method_name, attrs: attrs)
end

Instance Method Details

#blame_activerecordObject

Track ActiveRecord model



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/blamescope/trackable.rb', line 52

def blame_activerecord
  after_create do
    Blamescope::Trackable.send_event(self, :create)
  end
  after_update do
    Blamescope::Trackable.send_event(self, :update)
  end
  after_destroy do
    Blamescope::Trackable.send_event(self, :delete)
  end
end

#blame_method(method_name) ⇒ Object

Track method

Parameters:

  • name (String|Symbol)

    method name



31
32
33
34
35
36
37
# File 'lib/blamescope/trackable.rb', line 31

def blame_method method_name
  alias_method "original_#{method_name}", method_name
  define_method method_name do |*args, &block|
    Blamescope::Trackable.send_event(self, method_name)
    send("original_#{method_name}", *args, &block)
  end
end

#blame_methods(*names) ⇒ Object

Track multiple methods

Parameters:

  • *names (String|Symbol)

    method name



43
44
45
46
47
# File 'lib/blamescope/trackable.rb', line 43

def blame_methods *names
  names.each do |name|
    blame_method(name)
  end
end