Sha256: 1066544aa6c3c93ae1a99af26ce2180298f56f70c63e8f829acb30f12cedbbe3

Contents?: true

Size: 1.9 KB

Versions: 2

Compression:

Stored size: 1.9 KB

Contents

module Ahoy
  class VisitsController < ActionController::Base

    def create
      visit =
        Ahoy::Visit.new do |v|
          v.visit_token = params[:visit_token]
          v.visitor_token = params[:visitor_token]
          v.ip = request.remote_ip
          v.user_agent = request.user_agent
          v.referrer = params[:referrer]
          v.landing_page = params[:landing_page]
          v.user = current_user if respond_to?(:current_user)
        end

      referring_uri = Addressable::URI.parse(params[:referrer]) rescue nil
      if referring_uri
        visit.referring_domain = referring_uri.host
      end

      landing_uri = Addressable::URI.parse(params[:landing_page]) rescue nil
      if landing_uri
        visit.campaign = (landing_uri.query_values || {})["utm_campaign"]
      end

      browser = Browser.new(ua: request.user_agent)
      visit.browser = browser.name

      # TODO add more
      visit.os =
        if browser.android?
          "Android"
        elsif browser.ios?
          "iOS"
        elsif browser.windows_phone?
          "Windows Phone"
        elsif browser.blackberry?
          "Blackberry"
        elsif browser.chrome_os?
          "Chrome OS"
        elsif browser.mac?
          "Mac"
        elsif browser.windows?
          "Windows"
        elsif browser.linux?
          "Linux"
        end

      visit.device_type =
        if browser.tv?
          "TV"
        elsif browser.console?
          "Console"
        elsif browser.tablet?
          "Tablet"
        elsif browser.mobile?
          "Mobile"
        else
          "Desktop"
        end

      # location
      location = Geocoder.search(request.remote_ip).first rescue nil
      if location
        visit.country = location.country.presence
        visit.region = location.state.presence
        visit.city = location.city.presence
      end

      visit.save!
      render json: {id: visit.id}
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ahoy_matey-0.0.2 app/controllers/ahoy/visits_controller.rb
ahoy_matey-0.0.1 app/controllers/ahoy/visits_controller.rb