module TrackerJacker::Trackable

Constants

AttributeTrackingCallback
EventTrackingCallback

Public Class Methods

included(base) click to toggle source
# File lib/tracker_jacker/trackable.rb, line 6
def self.included(base)
  base.extend(ClassMethods)
  base.class_eval do
    after_save :run_track_event_callbacks
    after_save :run_track_attribute_callbacks
  end
end

Public Instance Methods

ignore_tracking!() click to toggle source
# File lib/tracker_jacker/trackable.rb, line 81
def ignore_tracking!
  @ignore_tracking = true
end
run_track_attribute_callbacks() click to toggle source
# File lib/tracker_jacker/trackable.rb, line 43
def run_track_attribute_callbacks
  return if @ignore_tracking

  object = self
  object.class.analytic_attribute_tracking_callbacks.values.each do |event_callback|
    if object.saved_change_to_attribute?(event_callback.attribute)
      owner = object.public_send(event_callback.owner_method)
      TrackerJacker::TrackableEvent.create(
        category: event_callback.category,
        owner: owner,
        trackable: object,
        event: event_callback.attribute.to_s + "_changed",
        old_value: attribute_before_last_save(event_callback.attribute),
        new_value: object.public_send(event_callback.attribute)
      )
    end
  end
  true
end
run_track_event_callbacks() click to toggle source
# File lib/tracker_jacker/trackable.rb, line 63
def run_track_event_callbacks
  return if @ignore_tracking

  object = self
  object.class.analytic_event_tracking_callbacks.values.each do |event_callback|
    if event_callback.if_proc.call(object)
      owner = object.public_send(event_callback.owner_method)
      TrackerJacker::TrackableEvent.create(
        category: event_callback.category,
        owner: owner,
        trackable: object,
        event: event_callback.event
      )
    end
  end
  true
end