Module: ModelObserver::ActiveRecord

Defined in:
lib/model_observer/active_record3.rb,
lib/model_observer/active_record4.rb

Class Method Summary collapse

Class Method Details

.enableObject



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/model_observer/active_record3.rb', line 3

def self.enable
  require 'active_record'

  ::ActiveRecord::Inheritance::ClassMethods.class_eval do
    alias_method :origin_instantiate, :instantiate

    def instantiate(record)
      started_at = Time.now
      instance = origin_instantiate(record)
      ModelObserver::Collector.add_metric(ModelObserver::Metric.new(instance, started_at, Time.now))
      instance
    end
  end

  ::ActiveRecord::Querying.class_eval do
    alias_method :origin_find_by_sql, :find_by_sql

    def find_by_sql(sql, binds = [])
      ::ActiveSupport::Notifications.instrumenter.instrument(
        "instantiate.model_observer",
        :sql   => connection.to_sql(sanitize_sql(sql), binds),
        :name  => "#{name} Instantiate") { origin_find_by_sql(sql, binds) }
    end
  end
end