-
Notifications
You must be signed in to change notification settings - Fork 373
/
ahoy.rb
132 lines (98 loc) · 2.75 KB
/
ahoy.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# stdlib
require "ipaddr"
# dependencies
require "active_support"
require "active_support/core_ext"
require "safely/core"
# modules
require "ahoy/utils"
require "ahoy/base_store"
require "ahoy/controller"
require "ahoy/database_store"
require "ahoy/helper"
require "ahoy/model"
require "ahoy/query_methods"
require "ahoy/tracker"
require "ahoy/version"
require "ahoy/visit_properties"
require "ahoy/engine" if defined?(Rails)
module Ahoy
mattr_accessor :visit_duration
self.visit_duration = 4.hours
mattr_accessor :visitor_duration
self.visitor_duration = 2.years
mattr_accessor :cookies
self.cookies = true
# TODO deprecate in favor of cookie_options
mattr_accessor :cookie_domain
mattr_accessor :cookie_options
self.cookie_options = {}
mattr_accessor :server_side_visits
self.server_side_visits = true
mattr_accessor :quiet
self.quiet = true
mattr_accessor :geocode
self.geocode = false
mattr_accessor :max_content_length
self.max_content_length = 8192
mattr_accessor :max_events_per_request
self.max_events_per_request = 10
mattr_accessor :job_queue
self.job_queue = :ahoy
mattr_accessor :api
self.api = false
mattr_accessor :api_only
self.api_only = false
mattr_accessor :protect_from_forgery
self.protect_from_forgery = true
mattr_accessor :preserve_callbacks
self.preserve_callbacks = [:load_authlogic, :activate_authlogic]
mattr_accessor :user_method
self.user_method = lambda do |controller|
(controller.respond_to?(:current_user, true) && controller.send(:current_user)) || (controller.respond_to?(:current_resource_owner, true) && controller.send(:current_resource_owner)) || nil
end
mattr_accessor :exclude_method
mattr_accessor :track_bots
self.track_bots = false
mattr_accessor :bot_detection_version
self.bot_detection_version = 2
mattr_accessor :token_generator
self.token_generator = -> { SecureRandom.uuid }
mattr_accessor :mask_ips
self.mask_ips = false
mattr_accessor :user_agent_parser
self.user_agent_parser = :device_detector
mattr_accessor :logger
def self.log(message)
logger.info { "[ahoy] #{message}" } if logger
end
def self.mask_ip(ip)
addr = IPAddr.new(ip)
if addr.ipv4?
# set last octet to 0
addr.mask(24).to_s
else
# set last 80 bits to zeros
addr.mask(48).to_s
end
end
def self.instance
Thread.current[:ahoy]
end
def self.instance=(value)
Thread.current[:ahoy] = value
end
end
ActiveSupport.on_load(:action_controller) do
include Ahoy::Controller
end
ActiveSupport.on_load(:active_record) do
extend Ahoy::Model
end
ActiveSupport.on_load(:action_view) do
include Ahoy::Helper
end
# Mongoid
ActiveSupport.on_load(:mongoid) do
Mongoid::Document::ClassMethods.include(Ahoy::Model)
end