ahoy_matey 0.1.4 → 0.1.5
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/CHANGELOG.md +6 -0
- data/README.md +52 -3
- data/app/controllers/ahoy/visits_controller.rb +1 -1
- data/lib/ahoy/model.rb +20 -16
- data/lib/ahoy/version.rb +1 -1
- data/lib/ahoy_matey.rb +13 -0
- 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: e01d2ba2f3f5b56e44fa016d8f0eb16e669b499d
|
4
|
+
data.tar.gz: 9f243b939b05458432e3651d7f75728bbd592ab8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10c69828ab683a8a0048e22a62f83d1c920d811e7e723658c8e90d954e2f7221b695a91038dae105bfecabb04b5470d45d9a9108b2b784663a377f4eed02a43c
|
7
|
+
data.tar.gz: 6200522f9ede3ce32ab07bd02fcfc5e179b874cea692ea6ade74f62cbd7b7642870ad568a7115408b01976a9dc29e04f716048d71f833ade6a0c86434a4602ab
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -19,6 +19,8 @@ Order.joins(:visit).group("utm_campaign").sum(:revenue)
|
|
19
19
|
|
20
20
|
:seedling: To track events like page views, check out [Ahoy Events](https://github.com/ankane/ahoy_events).
|
21
21
|
|
22
|
+
:postbox: To track emails, check out [Ahoy Email](https://github.com/ankane/ahoy_email).
|
23
|
+
|
22
24
|
## Installation
|
23
25
|
|
24
26
|
Add this line to your application’s Gemfile:
|
@@ -167,7 +169,7 @@ Turn off logging
|
|
167
169
|
ahoy.debug(false);
|
168
170
|
```
|
169
171
|
|
170
|
-
### Native Apps
|
172
|
+
### Native Apps
|
171
173
|
|
172
174
|
When a user launches the app, create a visit. Send a `POST` request to `/ahoy/visits` with:
|
173
175
|
|
@@ -189,6 +191,22 @@ Send the visit token in the `Ahoy-Visit` header for all requests.
|
|
189
191
|
|
190
192
|
After 4 hours, create another visit and use the updated visit token.
|
191
193
|
|
194
|
+
### Doorkeeper
|
195
|
+
|
196
|
+
To attach the user with [Doorkeeper](https://github.com/doorkeeper-gem/doorkeeper), be sure you have a `current_resource_owner` method in `ApplicationController`.
|
197
|
+
|
198
|
+
```ruby
|
199
|
+
class ApplicationController < ActionController::Base
|
200
|
+
|
201
|
+
private
|
202
|
+
|
203
|
+
def current_resource_owner
|
204
|
+
User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
208
|
+
```
|
209
|
+
|
192
210
|
### More
|
193
211
|
|
194
212
|
- Excludes bots
|
@@ -210,11 +228,42 @@ Change the platform on the web
|
|
210
228
|
var ahoy = {"platform": "Mobile Web"}
|
211
229
|
```
|
212
230
|
|
231
|
+
Track additional values
|
232
|
+
|
233
|
+
```ruby
|
234
|
+
class Visit < ActiveRecord::Base
|
235
|
+
ahoy_visit
|
236
|
+
|
237
|
+
before_create :set_gclid
|
238
|
+
|
239
|
+
def set_gclid
|
240
|
+
self.gclid = landing_params["gclid"]
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
```
|
245
|
+
|
246
|
+
Use a method besides `current_user`
|
247
|
+
|
248
|
+
```ruby
|
249
|
+
Ahoy.user_method = :true_user
|
250
|
+
```
|
251
|
+
|
252
|
+
or use a Proc
|
253
|
+
|
254
|
+
```ruby
|
255
|
+
Ahoy.user_method = proc {|controller| controller.current_user }
|
256
|
+
```
|
257
|
+
|
258
|
+
Customize visitable
|
259
|
+
|
260
|
+
```ruby
|
261
|
+
visitable :sign_up_visit, class_name: "Visit"
|
262
|
+
```
|
263
|
+
|
213
264
|
## TODO
|
214
265
|
|
215
|
-
- track emails
|
216
266
|
- simple dashboard
|
217
|
-
- hook to store additional fields
|
218
267
|
- turn off modules
|
219
268
|
|
220
269
|
## History
|
@@ -13,7 +13,7 @@ module Ahoy
|
|
13
13
|
v.user_agent = request.user_agent if v.respond_to?(:user_agent=)
|
14
14
|
v.referrer = params[:referrer] if v.respond_to?(:referrer=)
|
15
15
|
v.landing_page = params[:landing_page] if v.respond_to?(:landing_page=)
|
16
|
-
v.user =
|
16
|
+
v.user = Ahoy.fetch_user(self) if v.respond_to?(:user=)
|
17
17
|
v.platform = params[:platform] if v.respond_to?(:platform=)
|
18
18
|
v.app_version = params[:app_version] if v.respond_to?(:app_version=)
|
19
19
|
v.os_version = params[:os_version] if v.respond_to?(:os_version=)
|
data/lib/ahoy/model.rb
CHANGED
@@ -21,12 +21,8 @@ module Ahoy
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def set_utm_parameters
|
24
|
-
|
25
|
-
|
26
|
-
query_values = landing_uri.query_values || {}
|
27
|
-
%w[utm_source utm_medium utm_term utm_content utm_campaign].each do |name|
|
28
|
-
self[name] = query_values[name] if respond_to?(:"#{name}=")
|
29
|
-
end
|
24
|
+
%w[utm_source utm_medium utm_term utm_content utm_campaign].each do |name|
|
25
|
+
self[name] = landing_params[name] if respond_to?(:"#{name}=")
|
30
26
|
end
|
31
27
|
true
|
32
28
|
end
|
@@ -92,23 +88,31 @@ module Ahoy
|
|
92
88
|
true
|
93
89
|
end
|
94
90
|
|
91
|
+
def landing_params
|
92
|
+
@landing_params ||= begin
|
93
|
+
landing_uri = Addressable::URI.parse(landing_page) rescue nil
|
94
|
+
ActiveSupport::HashWithIndifferentAccess.new((landing_uri && landing_uri.query_values) || {})
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
95
98
|
end # end class_eval
|
96
99
|
end
|
97
100
|
|
98
|
-
def visitable
|
101
|
+
def visitable(name = nil, options = {})
|
102
|
+
if name.is_a?(Hash)
|
103
|
+
name = nil
|
104
|
+
options = name
|
105
|
+
end
|
106
|
+
name ||= :visit
|
99
107
|
class_eval do
|
100
|
-
belongs_to
|
101
|
-
|
108
|
+
belongs_to name, options
|
102
109
|
before_create :set_visit
|
103
|
-
|
110
|
+
end
|
111
|
+
class_eval %Q{
|
104
112
|
def set_visit
|
105
|
-
|
106
|
-
raise "Add a visit_id column to this table to use visitable"
|
107
|
-
else
|
108
|
-
self.visit ||= RequestStore.store[:ahoy_controller].try(:send, :current_visit)
|
109
|
-
end
|
113
|
+
self.#{name} ||= RequestStore.store[:ahoy_controller].try(:send, :current_visit)
|
110
114
|
end
|
111
|
-
|
115
|
+
}
|
112
116
|
end
|
113
117
|
|
114
118
|
end
|
data/lib/ahoy/version.rb
CHANGED
data/lib/ahoy_matey.rb
CHANGED
@@ -24,6 +24,19 @@ module Ahoy
|
|
24
24
|
@referrer_parser ||= RefererParser::Referer.new("https://github.com/ankane/ahoy")
|
25
25
|
end
|
26
26
|
|
27
|
+
def self.fetch_user(controller)
|
28
|
+
if user_method.respond_to?(:call)
|
29
|
+
user_method.call(controller)
|
30
|
+
else
|
31
|
+
controller.send(user_method)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
mattr_accessor :user_method
|
36
|
+
self.user_method = proc do |controller|
|
37
|
+
(controller.respond_to?(:current_user) && controller.current_user) || (controller.respond_to?(:current_resource_owner, true) and controller.send(:current_resource_owner))
|
38
|
+
end
|
39
|
+
|
27
40
|
end
|
28
41
|
|
29
42
|
ActionController::Base.send :include, Ahoy::Controller
|
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.5
|
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-
|
11
|
+
date: 2014-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|