class Greendeck::Rails::GreendeckTracker

Public Class Methods

new(request) click to toggle source
# File lib/greendeck/rails.rb, line 27
def initialize(request)
        @request = request
        @current_config = @@default_config
        @custom_config = {app: @@SDK_ID}
        @user = {}
        @events = []
        @user_up_to_date = true
        @has_pushed = 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
        return self
end

Public Instance Methods

config(data) click to toggle source
# File lib/greendeck/rails.rb, line 42
def config(data)
        data.each do |key, value|
                if @@default_config.has_key?(key)
                        @current_config[key] = value
                        if key != :ip_address && key != :cookie_value
                                @custom_config[key] = value
                        end        
                end
        end
end
identify(user) click to toggle source
# File lib/greendeck/rails.rb, line 53
def identify(user)
        @user = user
        @user_up_to_date = false
        return self
end
js_code() click to toggle source
# File lib/greendeck/rails.rb, line 91
def js_code
        code = "\n" + '<!-- Woopra code starts here -->'.html_safe + "\n"
        code += '<script>'.html_safe + "\n"
        code += '   (function(){'.html_safe + "\n"
        code += '   var t,i,e,n=window,o=document,a=arguments,s="script",r=["config","track","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)'.html_safe + "\n"
        code += '   })("woopra");'.html_safe + "\n"
        if @custom_config.length != 0
                code += "   woopra.config(".html_safe + @custom_config.to_json.html_safe + ");".html_safe + "\n"
        end
        if not @user_up_to_date
                code += "   woopra.identify(".html_safe + @user.to_json.html_safe + ");".html_safe + "\n"
        end
        for event in @events
                if event[0] == nil
                        code += "   woopra.track();".html_safe + "\n"
                else
                        code += "   woopra.track('".html_safe + event[0].html_safe + "', ".html_safe + event[1].to_json.html_safe + ");".html_safe + "\n"
                end
        end
        if @has_pushed
                code += "   woopra.push();".html_safe + "\n"
        end
        code += "</script>".html_safe + "\n"
        code += "<!-- Woopra code ends here -->".html_safe + "\n"
        return code.html_safe
end
push(back_end_tracking = false) click to toggle source
# File lib/greendeck/rails.rb, line 81
def push(back_end_tracking = false)
        if not @user_up_to_date
                if back_end_tracking
                        woopra_http_request(false)
                else
                        has_pushed = true
                end
        end
end
track(*p) click to toggle source
# File lib/greendeck/rails.rb, line 59
def track(*p)
        event_name = nil
        event_data = nil
        back_end_tracking = false
        for param in p
                case param
                when String
                        event_name = param
                when Hash
                        event_data = param
                when TrueClass
                        back_end_tracking = param
                end
        end
        if back_end_tracking
                woopra_http_request(true, [event_name, event_data])
        else
                @events << [event_name, event_data]
        end
        return self
end

Private Instance Methods

get_client_ip() click to toggle source
# File lib/greendeck/rails.rb, line 178
def get_client_ip
        if not @request.env['HTTP_X_FORWARDED_FOR'].nil?
                return @request.env['HTTP_X_FORWARDED_FOR'].split(",")[0].strip
        else
                return @request.remote_ip
        end
end
woopra_http_request(is_tracking, event = nil) click to toggle source
# File lib/greendeck/rails.rb, line 124
def woopra_http_request(is_tracking, event = nil)
        base_url = "www.woopra.com"
        get_params = {}

        # Configuration
        get_params["host"] = @current_config[:domain].to_s
        get_params["cookie"] = @current_config[:cookie_value].to_s
        get_params["ip"] = @current_config[:ip_address].to_s
        get_params["timeout"] = @current_config[:idle_timeout].to_s

        # Identification
        @user.each do |key, value|
                get_params["cv_" + key.to_s] = value.to_s
        end

        if not is_tracking
                url = "/track/identify/?"
                get_params.each do |key, value|
                        url += URI::encode(key) + "=" + URI::encode(value) + "&"
                end
                url = url[0..-1] + "&ce_app=" + @@SDK_ID
        else
                if event[0].nil?
                        get_params["event"] = "pv"
                        get_params["ce_url"] = @request.url.to_s
                else
                        get_params["event"] = event[0].to_s
                        if not event[1].nil?
                                event[1].each do |key, value|
                                        get_params["ce_" + key.to_s] = value.to_s
                                end
                        end
                end
                url = "/track/ce/?"
                get_params.each do |key, value|
                        url += URI::encode(key) + "=" + URI::encode(value) + "&"
                end
                url = url[0..-1] + "&ce_app=" + @@SDK_ID
        end
        http = Net::HTTP.new(base_url)
        user_agent = @request.env['HTTP_USER_AGENT']
        if not user_agent.nil?
                req = Net::HTTP::Get.new(url, {'User-Agent' => user_agent})
        else
                req = Net::HTTP::Get.new(url)
        end
        response = http.request(req)
end