action_tracker 0.1.3 → 0.1.4
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/README.md +1 -0
- data/app/assets/javascripts/action_tracker.js +115 -0
- data/lib/action_tracker/concerns/tracker.rb +9 -1
- data/lib/action_tracker/matchers.rb +1 -0
- data/lib/action_tracker/matchers/have_action_tracker_matcher.rb +17 -0
- data/lib/action_tracker/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 638907fb87e39ca2a30f4b47e2943ddafd38c404
|
4
|
+
data.tar.gz: 4ae63d3897e1f6af7c32de1f50723e4d95e9d228
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1ca2681d020e4c0188f1204335a8925de6fed957a45f3724a558f8e5a78c43eff7d6b71a1a6a153f37d008fb62185606a9f16175a28b06bcab0355f2dfb46de
|
7
|
+
data.tar.gz: 4725862c5725de5bd8930c010e73cd47ba9ee6bc6c4b183d7fa61b3a7062228709cdc9c20a49fe8ee89a4bab9a1eff5e351669fbb9a79d915b175e3325e6804d
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
<a href="https://codeclimate.com/github/appprova/action_tracker"><img src="https://codeclimate.com/github/appprova/action_tracker/badges/gpa.svg" /></a>
|
2
2
|
[](https://travis-ci.org/appprova/action_tracker)
|
3
|
+
[ ](https://codeship.com/projects/149594)
|
3
4
|
|
4
5
|
# Action Tracker
|
5
6
|
|
@@ -0,0 +1,115 @@
|
|
1
|
+
|
2
|
+
var ActionTracker = function () {
|
3
|
+
|
4
|
+
var storage,
|
5
|
+
callbacks = {};
|
6
|
+
|
7
|
+
function constructor() {
|
8
|
+
storage = new Storage();
|
9
|
+
}
|
10
|
+
|
11
|
+
function setCallbacks(callbacksObj) {
|
12
|
+
callbacks = callbacksObj;
|
13
|
+
}
|
14
|
+
|
15
|
+
function start(list) {
|
16
|
+
storage.queue(list);
|
17
|
+
}
|
18
|
+
|
19
|
+
function process() {
|
20
|
+
while(typeof storage.getFirst() !== 'undefined') {
|
21
|
+
var tracker = new Tracker(storage.dequeue());
|
22
|
+
tracker.send();
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
function Storage() {
|
27
|
+
|
28
|
+
this.storage = [];
|
29
|
+
|
30
|
+
this.constructor = function() {
|
31
|
+
if(sessionStorage.getItem('action_tracker_storage'))
|
32
|
+
this.getStorage();
|
33
|
+
else
|
34
|
+
this.setStorage();
|
35
|
+
};
|
36
|
+
|
37
|
+
this.getStorage = function() {
|
38
|
+
this.storage = JSON.parse(sessionStorage.getItem('action_tracker_storage'));
|
39
|
+
};
|
40
|
+
|
41
|
+
this.setStorage = function() {
|
42
|
+
sessionStorage.setItem('action_tracker_storage', JSON.stringify(this.storage));
|
43
|
+
};
|
44
|
+
|
45
|
+
this.queue = function(list) {
|
46
|
+
if(list != null) {
|
47
|
+
this.getStorage();
|
48
|
+
for (var i = 0; i < list.length; i++)
|
49
|
+
this.storage.push(list[i]);
|
50
|
+
this.setStorage();
|
51
|
+
}
|
52
|
+
};
|
53
|
+
|
54
|
+
this.dequeue = function() {
|
55
|
+
this.getStorage();
|
56
|
+
var first = this.storage[0];
|
57
|
+
this.storage.splice(0, 1);
|
58
|
+
this.setStorage();
|
59
|
+
return first;
|
60
|
+
};
|
61
|
+
|
62
|
+
this.getFirst = function() {
|
63
|
+
this.getStorage();
|
64
|
+
return this.storage[0];
|
65
|
+
};
|
66
|
+
|
67
|
+
this.constructor();
|
68
|
+
};
|
69
|
+
|
70
|
+
function Tracker(tracker_data) {
|
71
|
+
|
72
|
+
this.userFlag = false;
|
73
|
+
this.dataFlag = false;
|
74
|
+
this.user = null;
|
75
|
+
this.data = null;
|
76
|
+
|
77
|
+
if(typeof tracker_data !== 'undefined') {
|
78
|
+
if(typeof tracker_data.identify !== 'undefined') {
|
79
|
+
this.userFlag = true;
|
80
|
+
this.user = new User(tracker_data.identify);
|
81
|
+
}
|
82
|
+
if(typeof tracker_data.track !== 'undefined') {
|
83
|
+
this.dataFlag = true;
|
84
|
+
this.data = tracker_data.track;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
this.send = function() {
|
89
|
+
if(this.userFlag) callbacks.identify(this.user.getData());
|
90
|
+
if(this.dataFlag) callbacks.track(this.data);
|
91
|
+
};
|
92
|
+
};
|
93
|
+
|
94
|
+
function User(user_data) {
|
95
|
+
this.data = user_data;
|
96
|
+
this.data.id = callbacks.generateID(this.data.email);
|
97
|
+
|
98
|
+
this.getData = function() {
|
99
|
+
return this.data;
|
100
|
+
};
|
101
|
+
};
|
102
|
+
|
103
|
+
var public = {
|
104
|
+
Tracker: Tracker,
|
105
|
+
User: User,
|
106
|
+
Storage: Storage,
|
107
|
+
new: start,
|
108
|
+
push: process,
|
109
|
+
callbacks: setCallbacks
|
110
|
+
};
|
111
|
+
|
112
|
+
constructor();
|
113
|
+
|
114
|
+
return public;
|
115
|
+
}();
|
@@ -13,7 +13,7 @@ module ActionTracker
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def render(*args)
|
16
|
-
|
16
|
+
conditional_track_event
|
17
17
|
session[:action_tracked] = true
|
18
18
|
super
|
19
19
|
end
|
@@ -34,6 +34,14 @@ module ActionTracker
|
|
34
34
|
session[:action_tracker] << tracker_params unless tracker_params.blank?
|
35
35
|
end
|
36
36
|
|
37
|
+
def digest
|
38
|
+
return unless session[:action_tracker].present?
|
39
|
+
session[:action_tracked] = true
|
40
|
+
output = session[:action_tracker].flatten
|
41
|
+
session[:action_tracker] = nil
|
42
|
+
output
|
43
|
+
end
|
44
|
+
|
37
45
|
def tracker_klass
|
38
46
|
@tracker_klass ||= "#{namespace}#{controller_name.camelize}Tracker"
|
39
47
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'action_tracker/matchers/have_action_tracker_matcher'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
RSpec::Matchers.define :have_action_tracker do
|
2
|
+
match do |actual|
|
3
|
+
actual.respond_to? 'track_event'
|
4
|
+
end
|
5
|
+
|
6
|
+
description do
|
7
|
+
"responds to #track_event."
|
8
|
+
end
|
9
|
+
|
10
|
+
failure_message do |actual|
|
11
|
+
"expected that #{actual} responded to #track_event, but it didn't."
|
12
|
+
end
|
13
|
+
|
14
|
+
failure_message_when_negated do |actual|
|
15
|
+
"expected that #{actual} would not respond to #track_event, but it did."
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_tracker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- André Taiar
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-05-
|
12
|
+
date: 2016-05-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- README.md
|
157
157
|
- Rakefile
|
158
158
|
- action_tracker.gemspec
|
159
|
+
- app/assets/javascripts/action_tracker.js
|
159
160
|
- bin/console
|
160
161
|
- bin/setup
|
161
162
|
- lib/action_tracker.rb
|
@@ -164,6 +165,8 @@ files:
|
|
164
165
|
- lib/action_tracker/configuration.rb
|
165
166
|
- lib/action_tracker/engine.rb
|
166
167
|
- lib/action_tracker/helpers/render.rb
|
168
|
+
- lib/action_tracker/matchers.rb
|
169
|
+
- lib/action_tracker/matchers/have_action_tracker_matcher.rb
|
167
170
|
- lib/action_tracker/version.rb
|
168
171
|
homepage: http://coders.appprova.com.br/
|
169
172
|
licenses:
|
@@ -185,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
188
|
version: '0'
|
186
189
|
requirements: []
|
187
190
|
rubyforge_project:
|
188
|
-
rubygems_version: 2.4.
|
191
|
+
rubygems_version: 2.4.8
|
189
192
|
signing_key:
|
190
193
|
specification_version: 4
|
191
194
|
summary: Easy way to track actions in your application.
|