ahoy_events 0.0.2 → 0.1.0
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 +3 -0
- data/README.md +21 -3
- data/app/controllers/ahoy/events_controller.rb +5 -1
- data/lib/ahoy_events/version.rb +1 -1
- data/vendor/assets/javascripts/ahoy_events.js +96 -7
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bb576fde4349935bb02f99ac5499240ac9f313c
|
4
|
+
data.tar.gz: e247bef1ae291d918d91a3c1ccee8a24bce382ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee83bfdf2cef88ab0318ec03a182f3297427c956fb50722562697d2019f9f55cbd54d7906504ef53a8f892b8f809c65bc026280779316dab0122729b26c5ffeb
|
7
|
+
data.tar.gz: d94ecaa8c17294b78aad164494c2e1fffd6db44f2d9a811c6225ba40957f50517c4f65c7bf1db5c246ac5f61c39adeb7a96823e33c60ba372f8918a05e71b16b
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -39,6 +39,12 @@ There are three ways to track events.
|
|
39
39
|
ahoy.track("Viewed book", {title: "The World is Flat"});
|
40
40
|
```
|
41
41
|
|
42
|
+
or track all views and clicks with:
|
43
|
+
|
44
|
+
```javascript
|
45
|
+
ahoy.trackAll();
|
46
|
+
```
|
47
|
+
|
42
48
|
#### Ruby
|
43
49
|
|
44
50
|
```ruby
|
@@ -98,6 +104,18 @@ Add as many subscribers as you’d like.
|
|
98
104
|
|
99
105
|
## Reference
|
100
106
|
|
107
|
+
Track view
|
108
|
+
|
109
|
+
```javascript
|
110
|
+
ahoy.trackView();
|
111
|
+
```
|
112
|
+
|
113
|
+
Track clicks
|
114
|
+
|
115
|
+
```javascript
|
116
|
+
ahoy.trackClicks();
|
117
|
+
```
|
118
|
+
|
101
119
|
Track all Rails actions
|
102
120
|
|
103
121
|
```ruby
|
@@ -112,15 +130,15 @@ class ApplicationController < ActionController::Base
|
|
112
130
|
end
|
113
131
|
```
|
114
132
|
|
115
|
-
Use a different model
|
133
|
+
Use a different model
|
116
134
|
|
117
135
|
```ruby
|
118
136
|
Ahoy.subscribers << Ahoy::Subscribers::ActiveRecord.new(model: Event)
|
119
137
|
```
|
120
138
|
|
121
|
-
##
|
139
|
+
## History
|
122
140
|
|
123
|
-
|
141
|
+
View the [changelog](https://github.com/ankane/ahoy_events/blob/master/CHANGELOG.md)
|
124
142
|
|
125
143
|
## Contributing
|
126
144
|
|
@@ -2,7 +2,11 @@ module Ahoy
|
|
2
2
|
class EventsController < Ahoy::BaseController
|
3
3
|
|
4
4
|
def create
|
5
|
-
|
5
|
+
options = {}
|
6
|
+
if params[:time] and (time = Time.at(params[:time].to_f) rescue nil) and (1.minute.ago..Time.now).cover?(time)
|
7
|
+
options[:time] = time
|
8
|
+
end
|
9
|
+
ahoy.track params[:name], params[:properties], options
|
6
10
|
render json: {}
|
7
11
|
end
|
8
12
|
|
data/lib/ahoy_events/version.rb
CHANGED
@@ -4,22 +4,111 @@
|
|
4
4
|
"use strict";
|
5
5
|
|
6
6
|
var ahoy = window.ahoy;
|
7
|
+
var canStringify = typeof(JSON) !== "undefined" && typeof(JSON.stringify) !== "undefined";
|
8
|
+
var eventQueue = [];
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
// https://github.com/klughammer/node-randomstring
|
11
|
+
function generateId() {
|
12
|
+
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz';
|
13
|
+
var length = 32;
|
14
|
+
var string = '';
|
15
|
+
|
16
|
+
for (var i = 0; i < length; i++) {
|
17
|
+
var randomNumber = Math.floor(Math.random() * chars.length);
|
18
|
+
string += chars.substring(randomNumber, randomNumber + 1);
|
19
|
+
}
|
20
|
+
|
21
|
+
return string;
|
22
|
+
}
|
23
|
+
|
24
|
+
function saveEventQueue() {
|
25
|
+
// TODO add stringify method for IE 7 and under
|
26
|
+
if (canStringify) {
|
27
|
+
ahoy.setCookie("ahoy_events", JSON.stringify(eventQueue), 1);
|
28
|
+
}
|
29
|
+
}
|
12
30
|
|
31
|
+
function trackEvent(event) {
|
32
|
+
ahoy.ready( function () {
|
13
33
|
// ensure JSON is defined
|
14
|
-
if (
|
34
|
+
if (canStringify) {
|
15
35
|
$.ajax({
|
16
36
|
type: "POST",
|
17
37
|
url: "/ahoy/events",
|
18
|
-
data: JSON.stringify(
|
38
|
+
data: JSON.stringify(event),
|
19
39
|
contentType: "application/json; charset=utf-8",
|
20
|
-
dataType: "json"
|
40
|
+
dataType: "json",
|
41
|
+
success: function() {
|
42
|
+
// remove from queue
|
43
|
+
for (var i = 0; i < eventQueue.length; i++) {
|
44
|
+
if (eventQueue[i].id == event.id) {
|
45
|
+
eventQueue.splice(i, 1);
|
46
|
+
break;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
saveEventQueue();
|
50
|
+
}
|
21
51
|
});
|
22
52
|
}
|
23
53
|
});
|
54
|
+
}
|
55
|
+
|
56
|
+
ahoy.track = function (name, properties) {
|
57
|
+
// generate unique id
|
58
|
+
var event = {
|
59
|
+
id: generateId(),
|
60
|
+
name: name,
|
61
|
+
properties: properties,
|
62
|
+
time: (new Date()).getTime() / 1000.0
|
63
|
+
};
|
64
|
+
ahoy.log(event);
|
65
|
+
|
66
|
+
eventQueue.push(event);
|
67
|
+
saveEventQueue();
|
68
|
+
|
69
|
+
// wait in case navigating to reduce duplicate events
|
70
|
+
setTimeout( function() {
|
71
|
+
trackEvent(event);
|
72
|
+
}, 1000);
|
24
73
|
};
|
74
|
+
|
75
|
+
ahoy.trackView = function() {
|
76
|
+
var properties = {
|
77
|
+
url: window.location.href,
|
78
|
+
title: document.title
|
79
|
+
};
|
80
|
+
ahoy.track("$view", properties);
|
81
|
+
};
|
82
|
+
|
83
|
+
ahoy.trackClicks = function() {
|
84
|
+
$(document).on("click", "a, button, input[type=submit]", function(e) {
|
85
|
+
var $target = $(e.currentTarget);
|
86
|
+
var tag = $target.get(0).tagName.toLowerCase();
|
87
|
+
var text = tag == "input" ? $target.val() : $.trim($target.text());
|
88
|
+
var properties = {
|
89
|
+
tag: tag,
|
90
|
+
id: $target.attr("id"),
|
91
|
+
class: $target.attr("class"),
|
92
|
+
text: text,
|
93
|
+
href: $target.attr("href")
|
94
|
+
};
|
95
|
+
ahoy.track("$click", properties);
|
96
|
+
});
|
97
|
+
};
|
98
|
+
|
99
|
+
ahoy.trackAll = function() {
|
100
|
+
ahoy.trackView();
|
101
|
+
ahoy.trackClicks();
|
102
|
+
};
|
103
|
+
|
104
|
+
// push events from queue
|
105
|
+
try {
|
106
|
+
eventQueue = JSON.parse(ahoy.getCookie("ahoy_events") || "[]");
|
107
|
+
} catch (e) {
|
108
|
+
// do nothing
|
109
|
+
}
|
110
|
+
|
111
|
+
for (var i = 0; i < eventQueue.length; i++) {
|
112
|
+
trackEvent(eventQueue[i]);
|
113
|
+
}
|
25
114
|
}(window));
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ahoy_events
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
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-05-
|
11
|
+
date: 2014-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ahoy_matey
|
@@ -60,6 +60,7 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
|
+
- CHANGELOG.md
|
63
64
|
- Gemfile
|
64
65
|
- LICENSE.txt
|
65
66
|
- README.md
|