ahoy_matey 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -15
- data/app/controllers/ahoy/visits_controller.rb +5 -5
- data/lib/ahoy/model.rb +52 -43
- data/lib/ahoy/version.rb +1 -1
- data/lib/ahoy_matey.rb +6 -0
- data/lib/generators/ahoy/templates/install.rb +4 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93699ebff0f9bfc35b50d48e7ff477963114b1b2
|
4
|
+
data.tar.gz: 848e8110b3cedef57143e54d8415e23a5e650c66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbd26a7a790231a5b8e8b3dfa2d9b7b99b9e87cd862cffbd15d53ae4a003d1e18afea1f4f46c34576c3a5d6a5f25f4f9f39cfdbb94ab9e58a24488df85c18119
|
7
|
+
data.tar.gz: b4046b11ece28d61d46f852bf3b0a699f52d24d34faffad687dce093260fcc564d8a5aee29e3583ec3f354fa3fb17d1e68721e7c2419551ab7e0f0e006e46ee3
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
:fire: Simple, powerful visit tracking for Rails
|
4
4
|
|
5
|
+
Visits are stored in **your database** so you can easily combine them with other data.
|
6
|
+
|
5
7
|
You get:
|
6
8
|
|
7
9
|
- traffic source - referrer, referring domain, landing page, search keyword
|
@@ -9,23 +11,23 @@ You get:
|
|
9
11
|
- technology - browser, OS, and device type
|
10
12
|
- utm parameters - source, medium, term, content, campaign
|
11
13
|
|
12
|
-
It’s all stored in **your database** so you can easily combine it with other data.
|
13
|
-
|
14
14
|
See which campaigns generate the most revenue effortlessly.
|
15
15
|
|
16
16
|
```ruby
|
17
17
|
Order.joins(:visit).group("utm_campaign").sum(:revenue)
|
18
18
|
```
|
19
19
|
|
20
|
+
Goes great with services like [Google Analytics](http://www.google.com/analytics/)
|
21
|
+
|
20
22
|
## Ready, Set, Go
|
21
23
|
|
22
24
|
Add this line to your application’s Gemfile:
|
23
25
|
|
24
26
|
```ruby
|
25
|
-
gem
|
27
|
+
gem 'ahoy_matey'
|
26
28
|
```
|
27
29
|
|
28
|
-
And run the generator. This creates a
|
30
|
+
And run the generator. This creates a model to store visits.
|
29
31
|
|
30
32
|
```sh
|
31
33
|
rails generate ahoy:install
|
@@ -71,22 +73,16 @@ class Order < ActiveRecord::Base
|
|
71
73
|
end
|
72
74
|
```
|
73
75
|
|
74
|
-
When a visitor places an order, the `visit_id` column
|
76
|
+
When a visitor places an order, the `visit_id` column is automatically set.
|
75
77
|
|
76
|
-
|
77
|
-
|
78
|
-
```ruby
|
79
|
-
class Order < ActiveRecord::Base
|
80
|
-
belongs_to :visit
|
81
|
-
end
|
82
|
-
```
|
78
|
+
:tada: Magic!
|
83
79
|
|
84
|
-
|
80
|
+
To see where your orders are coming from, use:
|
85
81
|
|
86
82
|
```ruby
|
87
83
|
Order.joins(:visit).group("referring_domain").count
|
88
|
-
Order.joins(:visit).group("device_type").count
|
89
84
|
Order.joins(:visit).group("city").count
|
85
|
+
Order.joins(:visit).group("device_type").count
|
90
86
|
```
|
91
87
|
|
92
88
|
## Users
|
@@ -128,7 +124,7 @@ or
|
|
128
124
|
http://datakick.org/?utm_medium=twitter&utm_campaign=social&utm_source=tweet123
|
129
125
|
```
|
130
126
|
|
131
|
-
## Features
|
127
|
+
## More Features
|
132
128
|
|
133
129
|
- Excludes bots
|
134
130
|
- Degrades gracefully when cookies are disabled
|
@@ -7,11 +7,11 @@ module Ahoy
|
|
7
7
|
Ahoy.visit_model.new do |v|
|
8
8
|
v.visit_token = params[:visit_token]
|
9
9
|
v.visitor_token = params[:visitor_token]
|
10
|
-
v.ip = request.remote_ip
|
11
|
-
v.user_agent = request.user_agent
|
12
|
-
v.referrer = params[:referrer]
|
13
|
-
v.landing_page = params[:landing_page]
|
14
|
-
v.user = current_user if respond_to?(:current_user)
|
10
|
+
v.ip = request.remote_ip if v.respond_to?(:ip=)
|
11
|
+
v.user_agent = request.user_agent if v.respond_to?(:user_agent=)
|
12
|
+
v.referrer = params[:referrer] if v.respond_to?(:referrer=)
|
13
|
+
v.landing_page = params[:landing_page] if v.respond_to?(:landing_page=)
|
14
|
+
v.user = current_user if respond_to?(:current_user) and v.respond_to?(:user=)
|
15
15
|
end
|
16
16
|
|
17
17
|
visit.save!
|
data/lib/ahoy/model.rb
CHANGED
@@ -12,10 +12,12 @@ module Ahoy
|
|
12
12
|
before_create :set_location
|
13
13
|
|
14
14
|
def set_traffic_source
|
15
|
-
|
16
|
-
self.referring_domain =
|
17
|
-
|
18
|
-
|
15
|
+
referring_domain = Addressable::URI.parse(referrer).host.first(255) rescue nil
|
16
|
+
self.referring_domain = referring_domain if respond_to?(:referring_domain=)
|
17
|
+
# performance hack for referer-parser
|
18
|
+
search_keyword = Ahoy.referrer_parser.parse(referrer)[1].first(255) rescue nil
|
19
|
+
self.search_keyword = search_keyword.presence if respond_to?(:search_keyword=)
|
20
|
+
true
|
19
21
|
end
|
20
22
|
|
21
23
|
def set_utm_parameters
|
@@ -23,57 +25,64 @@ module Ahoy
|
|
23
25
|
if landing_uri
|
24
26
|
query_values = landing_uri.query_values || {}
|
25
27
|
%w[utm_source utm_medium utm_term utm_content utm_campaign].each do |name|
|
26
|
-
self[name] = query_values[name]
|
28
|
+
self[name] = query_values[name] if respond_to?(:"#{name}=")
|
27
29
|
end
|
28
30
|
end
|
31
|
+
true
|
29
32
|
end
|
30
33
|
|
31
34
|
def set_technology
|
32
|
-
|
35
|
+
if respond_to?(:user_agent)
|
36
|
+
browser = Browser.new(ua: user_agent)
|
33
37
|
|
34
|
-
|
38
|
+
self.browser = browser.name if respond_to?(:browser=)
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
40
|
+
# TODO add more
|
41
|
+
self.os =
|
42
|
+
if browser.android?
|
43
|
+
"Android"
|
44
|
+
elsif browser.ios?
|
45
|
+
"iOS"
|
46
|
+
elsif browser.windows_phone?
|
47
|
+
"Windows Phone"
|
48
|
+
elsif browser.blackberry?
|
49
|
+
"Blackberry"
|
50
|
+
elsif browser.chrome_os?
|
51
|
+
"Chrome OS"
|
52
|
+
elsif browser.mac?
|
53
|
+
"Mac"
|
54
|
+
elsif browser.windows?
|
55
|
+
"Windows"
|
56
|
+
elsif browser.linux?
|
57
|
+
"Linux"
|
58
|
+
end if respond_to?(:os=)
|
55
59
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
60
|
+
self.device_type =
|
61
|
+
if browser.tv?
|
62
|
+
"TV"
|
63
|
+
elsif browser.console?
|
64
|
+
"Console"
|
65
|
+
elsif browser.tablet?
|
66
|
+
"Tablet"
|
67
|
+
elsif browser.mobile?
|
68
|
+
"Mobile"
|
69
|
+
else
|
70
|
+
"Desktop"
|
71
|
+
end if respond_to?(:device_type=)
|
72
|
+
end
|
73
|
+
true
|
68
74
|
end
|
69
75
|
|
70
76
|
def set_location
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
77
|
+
if respond_to?(:ip) and [:country=, :region=, :city=].any?{|method| respond_to?(method) }
|
78
|
+
location = Geocoder.search(ip).first rescue nil
|
79
|
+
if location
|
80
|
+
self.country = location.country.presence if respond_to?(:country=)
|
81
|
+
self.region = location.state.presence if respond_to?(:region=)
|
82
|
+
self.city = location.city.presence if respond_to?(:city=)
|
83
|
+
end
|
76
84
|
end
|
85
|
+
true
|
77
86
|
end
|
78
87
|
|
79
88
|
end # end class_eval
|
data/lib/ahoy/version.rb
CHANGED
data/lib/ahoy_matey.rb
CHANGED
@@ -14,6 +14,12 @@ module Ahoy
|
|
14
14
|
::Visit
|
15
15
|
end
|
16
16
|
|
17
|
+
# TODO private
|
18
|
+
# performance hack for referer-parser
|
19
|
+
def self.referrer_parser
|
20
|
+
@referrer_parser ||= RefererParser::Referer.new("https://github.com/ankane/ahoy")
|
21
|
+
end
|
22
|
+
|
17
23
|
end
|
18
24
|
|
19
25
|
ActionController::Base.send :include, Ahoy::Controller
|
@@ -1,10 +1,13 @@
|
|
1
1
|
class <%= migration_class_name %> < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
create_table :visits do |t|
|
4
|
-
# cookies
|
4
|
+
# cookies *required*
|
5
5
|
t.string :visit_token
|
6
6
|
t.string :visitor_token
|
7
7
|
|
8
|
+
# the rest are recommended but optional
|
9
|
+
# simply remove the columns you don't want
|
10
|
+
|
8
11
|
# standard
|
9
12
|
t.string :ip
|
10
13
|
t.text :user_agent
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ahoy_matey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|