action_tracker 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://travis-ci.org/appprova/action_tracker.svg?branch=develop)](https://travis-ci.org/appprova/action_tracker)
|
3
|
+
[ ![Codeship Status for appprova/action_tracker](https://codeship.com/projects/a038f7b0-f2ce-0133-3399-42c612817579/status?branch=master)](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.
|