class Mixpal::Tracker

Constants

STORAGE_KEY

Attributes

alias_user[R]
events[R]
identity[R]
js_snippets[R]
revenue_updates[R]
user_updates[R]

Public Class Methods

new(args = {}) click to toggle source
# File lib/mixpal/tracker.rb, line 7
def initialize(args = {})
  extend Mixpal.configuration.helper_module

  @events = []
  @user_updates = []
  @revenue_updates = []
  @js_snippets = []

  @identity = args[:identity]
end

Public Instance Methods

add_js_snippet(snippet) click to toggle source
# File lib/mixpal/tracker.rb, line 35
def add_js_snippet(snippet)
  js_snippets << Mixpal::Snippet.new(snippet)
end
register_user(properties) click to toggle source
# File lib/mixpal/tracker.rb, line 18
def register_user(properties)
  @alias_user = true
  update_user(properties)
end
render() click to toggle source
# File lib/mixpal/tracker.rb, line 39
def render
  ''.tap do |html|
    html << '<script type="text/javascript">'
    html << "mixpanel.alias(\"#{identity}\");" if alias_user
    html << "mixpanel.identify(\"#{identity}\");" if identity
    html << events.map(&:render).join('')
    html << user_updates.map(&:render).join('')
    html << revenue_updates.map(&:render).join('')
    html << js_snippets.map(&:render).join('')
    html << '</script>'
  end.html_safe
end
restore!(session) click to toggle source
# File lib/mixpal/tracker.rb, line 56
def restore!(session)
  data = session[STORAGE_KEY] || {}

  @alias_user = data['alias_user']
  @identity ||= data['identity']

  if data['events']
    @events = data['events'].map { |e| Mixpal::Event.from_store(e) }
  end

  if data['user_updates']
    @user_updates = data['user_updates'].map { |u| Mixpal::User.from_store(u) }
  end

  if data['revenue_updates']
    @revenue_updates = data['revenue_updates'].map { |u| Mixpal::Revenue.from_store(u) }
  end

  if data['js_snippets']
    @js_snippets = data['js_snippets'].map { |u| Mixpal::Snippet.from_store(u) }
  end

  session.delete(STORAGE_KEY)
end
store!(session) click to toggle source
# File lib/mixpal/tracker.rb, line 52
def store!(session)
  session[STORAGE_KEY] = to_store
end
track(name, properties = {}) click to toggle source
# File lib/mixpal/tracker.rb, line 27
def track(name, properties = {})
  events << Mixpal::Event.new(name, properties)
end
track_charge(amount, properties = {}) click to toggle source
# File lib/mixpal/tracker.rb, line 31
def track_charge(amount, properties = {})
  revenue_updates << Mixpal::Revenue.new(amount, properties)
end
update_user(properties) click to toggle source
# File lib/mixpal/tracker.rb, line 23
def update_user(properties)
  user_updates << Mixpal::User.new(properties)
end

Private Instance Methods

to_store() click to toggle source
# File lib/mixpal/tracker.rb, line 83
def to_store
  {
    'alias_user' => alias_user,
    'identity' => identity,
    'events' => events.map(&:to_store),
    'user_updates' => user_updates.map(&:to_store),
    'revenue_updates' => revenue_updates.map(&:to_store),
    'js_snippets' => js_snippets.map(&:to_store)
  }
end