class WoopraTrack::Tracker
Public Class Methods
new(request)
click to toggle source
# File lib/woopra_track/tracker.rb, line 26 def initialize(request) @request = request @current_config = @@default_config @custom_config = { app: @@application_id } @user = {} @events = [] @user_up_to_date = true @has_pushed = false @disable_tracking = false @current_config[:domain] = @request.host @current_config[:cookie_domain] = @request.host @current_config[:ip_address] = get_client_ip @current_config[:cookie_value] = @request.cookies[@current_config[:cookie_name]] || random_cookie end
Public Instance Methods
config(data)
click to toggle source
# File lib/woopra_track/tracker.rb, line 46 def config(data) data = Hash(data) custom = data.select { |k, _v| k.in? @@default_config.keys } custom = custom.except(:ip_address, :cookie_value) @custom_config = @custom_config.merge(custom) @disable_tracking = data[:disable_tracking].is_a? TrueClass end
enable_logging()
click to toggle source
# File lib/woopra_track/tracker.rb, line 42 def enable_logging @logger = Logger.new(STDOUT) end
identify(user)
click to toggle source
# File lib/woopra_track/tracker.rb, line 55 def identify(user) @user = user @user_up_to_date = false end
javascript_tag()
click to toggle source
# File lib/woopra_track/tracker.rb, line 93 def javascript_tag return if disable_tracking? code = ['(function(){var t,i,e,n=window,o=document,a=arguments,s="script",r=["config","track","trackForm","trackClick","identify","visit","push","call"],c=function(){var t,i=this;for(i._e=[],t=0;r.length>t;t++)(function(t){i[t]=function(){return i._e.push([t].concat(Array.prototype.slice.call(arguments,0))),i}})(r[t])};for(n._w=n._w||{},t=0;a.length>t;t++)n._w[a[t]]=n[a[t]]=n[a[t]]||new c;i=o.createElement(s),i.async=1,i.src="//static.woopra.com/js/w.js",e=o.getElementsByTagName(s)[0],e.parentNode.insertBefore(i,e)})("woopra");'] code << "woopra.config(#{@custom_config.to_json});" if @custom_config.length != 0 code << "woopra.identify(#{@user.to_json});" if not @user_up_to_date @events.each do |event| if event.first.nil? code << "woopra.track();" else code << "woopra.track('#{event.first}', #{event.second.to_json});" end end code << "woopra.push();" if @has_pushed "<script>\n#{code.join("\n")}\n</script>".html_safe end
push(back_end=false)
click to toggle source
# File lib/woopra_track/tracker.rb, line 83 def push(back_end=false) if not @user_up_to_date if back_end http_request() else @has_pushed = true end end end
track(*args)
click to toggle source
# File lib/woopra_track/tracker.rb, line 60 def track(*args) event_name = nil event_data = nil back_end = false args.each do |param| case param when String event_name = param when Hash event_data = param when TrueClass back_end = param end end if back_end http_request([event_name, event_data]) else @events << [event_name, event_data] end end
Private Instance Methods
disable_tracking?()
click to toggle source
# File lib/woopra_track/tracker.rb, line 180 def disable_tracking? @disable_tracking.is_a? TrueClass end
get_client_ip()
click to toggle source
# File lib/woopra_track/tracker.rb, line 172 def get_client_ip if not @request.env['HTTP_X_FORWARDED_FOR'].nil? @request.env['HTTP_X_FORWARDED_FOR'].split(',').first.strip else @request.remote_ip end end
http_request(event=nil)
click to toggle source
# File lib/woopra_track/tracker.rb, line 121 def http_request(event=nil) return if disable_tracking? request_url = 'https://www.woopra.com' get_params = { host: @current_config[:domain], cookie: @current_config[:cookie_value], ip: @current_config[:ip_address], timeout: @current_config[:idle_timeout] } user_params = Hash[@user.map { |k, v| [:"cv_#{k}", "#{v}"] }] get_params = get_params.merge(user_params) if event.nil? request_url = URI.join(request_url, 'track/identify') else request_url = URI.join(request_url, 'track/ce') if event.first.nil? get_params = get_params.merge(event: 'pv', ce_url: @request.url) else event_data = Hash[Array(event.second).map { |k, v| [:"ce_#{k}", "#{v}"] }] get_params = get_params.merge(event: event.first).merge(event_data) end end request_url.query = URI.encode_www_form(get_params.merge(ce_app: @@application_id)) request_headers = { 'User-Agent' => @request.env['HTTP_USER_AGENT'] } request_response = Typhoeus.get(request_url, headers: request_headers) log_request(request_response, request_url) if @logger end
log_request(response, url)
click to toggle source
# File lib/woopra_track/tracker.rb, line 155 def log_request(response, url) if response.success? @logger.info("Woopra") { "Success: #{url}" } elsif response.timed_out? @logger.warn("Woopra") { "Timeout: #{url}" } elsif response.code == 0 @logger.error("Woopra") { "#{response.return_message}, #{url}" } else @logger.error("Woopra") { "WOOPRA Failed: #{response.code}, #{url}" } end end