ahoy_events 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|