Sha256: 95551c627280a9532aaa8fba043a2f5444906014d834eb80ea8ceab221e64521

Contents?: true

Size: 1.59 KB

Versions: 2

Compression:

Stored size: 1.59 KB

Contents

require "addressable/uri"
require "browser"
require "geocoder"
require "referer-parser"
require "user_agent_parser"
require "request_store"
require "ahoy/version"
require "ahoy/controller"
require "ahoy/model"
require "ahoy/engine"

module Ahoy

  def self.visit_model
    @visit_model || ::Visit
  end

  def self.visit_model=(visit_model)
    @visit_model = visit_model
  end

  # TODO private
  # performance hack for referer-parser
  def self.referrer_parser
    @referrer_parser ||= RefererParser::Referer.new("https://github.com/ankane/ahoy")
  end

  # performance
  def self.user_agent_parser
    @user_agent_parser ||= UserAgentParser::Parser.new
  end

  def self.fetch_user(controller)
    if user_method.respond_to?(:call)
      user_method.call(controller)
    else
      controller.send(user_method)
    end
  end

  mattr_accessor :user_method
  self.user_method = proc do |controller|
    (controller.respond_to?(:current_user) && controller.current_user) || (controller.respond_to?(:current_resource_owner, true) and controller.send(:current_resource_owner))
  end

end

ActionController::Base.send :include, Ahoy::Controller
ActiveRecord::Base.send(:extend, Ahoy::Model) if defined?(ActiveRecord)

if defined?(Warden)
  Warden::Manager.after_set_user except: :fetch do |user, auth, opts|
    request = ActionDispatch::Request.new(auth.env)
    visit_token = request.cookies["ahoy_visit"] || request.headers["Ahoy-Visit"]
    if visit_token
      visit = Ahoy.visit_model.where(visit_token: visit_token).first
      if visit and !visit.user
        visit.user = user
        visit.save!
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ahoy_matey-0.1.7 lib/ahoy_matey.rb
ahoy_matey-0.1.6 lib/ahoy_matey.rb