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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 624b3a10b7a0ec8f941e0218bf2ccf5c15b406fb
4
- data.tar.gz: d95a3036411a9175742275ed066eac7026e936e9
3
+ metadata.gz: 7bb576fde4349935bb02f99ac5499240ac9f313c
4
+ data.tar.gz: e247bef1ae291d918d91a3c1ccee8a24bce382ee
5
5
  SHA512:
6
- metadata.gz: 10d94a157012825266783ba7a3e12da348dc0049edb6773014f2e1a6fdd8ca0b42e0185323e842bae78e7a7177530f07920af0ac952d9ac8083a41136b9b63c5
7
- data.tar.gz: 50f2ebb1422c12902ea6d69b41d9068f483889771ae52a1a0fc3369b02dcb28e102953dbaf2b6e53f19905717c620e9b5e7788ec4901e28900b3bd0ba06ad06a
6
+ metadata.gz: ee83bfdf2cef88ab0318ec03a182f3297427c956fb50722562697d2019f9f55cbd54d7906504ef53a8f892b8f809c65bc026280779316dab0122729b26c5ffeb
7
+ data.tar.gz: d94ecaa8c17294b78aad164494c2e1fffd6db44f2d9a811c6225ba40957f50517c4f65c7bf1db5c246ac5f61c39adeb7a96823e33c60ba372f8918a05e71b16b
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## 0.1.0
2
+
3
+ - Added `trackAll` method
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 [master]
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
- ## TODO
139
+ ## History
122
140
 
123
- - Ability to track JavaScript events automatically (button clicks, etc)
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
- ahoy.track params[:name], params[:properties]
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
 
@@ -1,3 +1,3 @@
1
1
  module AhoyEvents
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -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
- ahoy.track = function (name, properties) {
9
- ahoy.ready( function () {
10
- var data = {name: name, properties: properties};
11
- ahoy.log(data);
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 (typeof(JSON) !== "undefined") {
34
+ if (canStringify) {
15
35
  $.ajax({
16
36
  type: "POST",
17
37
  url: "/ahoy/events",
18
- data: JSON.stringify(data),
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.2
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-02 00:00:00.000000000 Z
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