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 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