Module: UserTrackers

Defined in:
lib/user_trackers.rb,
lib/user_trackers/configuration.rb,
lib/user_trackers/slack_tracker.rb,
lib/user_trackers/intercom_tracker.rb,
lib/user_trackers/mixpanel_tracker.rb,
lib/user_trackers/workers/resque_worker.rb,
lib/user_trackers/workers/sidekiq_worker.rb,
lib/generators/user_trackers/install_generator.rb

Defined Under Namespace

Modules: Configuration, IntercomTracker, MixpanelTracker, SlackTracker Classes: InstallGenerator, RescueWorker, SidekiqWorker

Constant Summary collapse

TRACKERS =
['mixpanel','intercom','slack']

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.optionsObject

Returns the value of attribute options.



17
18
19
# File 'lib/user_trackers.rb', line 17

def options
  @options
end

Class Method Details

._track(params) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/user_trackers.rb', line 34

def self._track(params)
  if !ignore_event? params['event_name']
    if !options[Rails.env.to_sym][:db] || !ignore_event?(params['event_name'], :db)
      UserEvent.create(
        anonymous_id: params['anonymous_id'],
        event_name:'logged_in_as', 
        event_attributes:{ user_id: params['user_id'] }
      )  if params['user_logged_in']
      UserEvent.create(params.except('user_logged_in')) 
    end
    trackers.each do |tracker|
      if options[Rails.env.to_sym][tracker.to_sym]
        if !ignore_event?(params['event_name'], tracker.to_sym)
          eval("#{tracker.capitalize}Tracker.track(params)")
        end
      end
    end
  end
end

.ignore_event?(event_name, tracker = nil) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
# File 'lib/user_trackers.rb', line 29

def self.ignore_event?(event_name, tracker = nil)
  ignore_events = tracker ? options[Rails.env.to_sym][tracker][:ignore_events] || [] : options[Rails.env.to_sym][:ignore_events] || []
  ignore_events.include?(event_name) || ignore_events.include?('*')
end

.track(params, session = nil) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/user_trackers.rb', line 54

def self.track(params, session = nil)
  if session
    if params[:user_id] && session['anonymous_id']
      params[:user_logged_in] = true
      params[:anonymous_id] = session['anonymous_id']
      session.delete('anonymous_id')
    elsif !params[:user_id]
      session['anonymous_id'] ||= UUID.new.generate
      params[:anonymous_id] = session['anonymous_id']
    end
  end
  params[:anonymous_id] ||= UUID.new.generate

  # for usage with sidekiq and resque
  params = params.as_json

  if options[Rails.env.to_sym][:queue_adapter] == 'sidekiq'
    SidekiqWorker.perform_async(params) 
  elsif options[Rails.env.to_sym][:queue_adapter] == 'resque'
    Resque.enqueue(RescueWorker, params)
  else 
    _track(params)
  end
end

.trackersObject



21
22
23
# File 'lib/user_trackers.rb', line 21

def self.trackers
  TRACKERS
end