action_tracker 0.1.5 → 0.1.6

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: 8aba9bf43e4bc33735088adada70be4d37d3bb05
4
- data.tar.gz: 27af7b65fb28357068a2994dac4cabcb9d39a54b
3
+ metadata.gz: 8badb2e5f2389267b210b0c39238a476d3bcc754
4
+ data.tar.gz: 1f5575e4548d2c491ed68698644d416a384641f0
5
5
  SHA512:
6
- metadata.gz: 7067ac421d031d43c55e6d48e96568b7414b2f1bd9b52b717cc6b6dacaee0c3083d5b57949bad6b179a77cae11970d7233bd425f70e4257b6318b8c55bc90f9a
7
- data.tar.gz: 90f53c2b25899bdbff4c1ff7361f95ec157638054b651edc55508bd02c12e92032e87c75724d6884023e10cbeaf2c9e1c89517e18378a4424ccde20c5a2da122
6
+ metadata.gz: b48a9b3f855b4aa8fdb0028e197522a095bdca57fddffb75b3403563b96c082650f6d4841d79d4a02b48a03c36adec9cd926f43dc8402c37eb83ef7156dcbbaa
7
+ data.tar.gz: d75a083ba5ed9d1d33d112560b265ce34ddb918bc01ec9ef4e8b18572d8c29911b73c8ca3ff51b246055878abc76693820b8f695b8c1f65218727a0fa33cb22f
data/Rakefile CHANGED
@@ -4,3 +4,5 @@ require "rspec/core/rake_task"
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
6
  task :default => :spec
7
+ require 'jasmine'
8
+ load 'jasmine/tasks/jasmine.rake'
@@ -28,4 +28,5 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'guard', '~> 2.13'
29
29
  spec.add_development_dependency 'byebug', '~> 5.0'
30
30
  spec.add_development_dependency 'guard-rspec', '~> 4.6'
31
+ spec.add_development_dependency 'jasmine', '~> 2.4'
31
32
  end
@@ -1,37 +1,56 @@
1
1
 
2
2
  var ActionTracker = function () {
3
3
 
4
+ 'use strict';
5
+
4
6
  var storage,
7
+ timeSeed,
8
+ options = {},
5
9
  callbacks = {};
6
10
 
7
11
  function constructor() {
8
12
  storage = new Storage();
13
+ timeSeed = new TimeSeed();
9
14
  }
10
15
 
11
16
  function setCallbacks(callbacksObj) {
12
17
  callbacks = callbacksObj;
13
18
  }
14
19
 
15
- function start(list) {
20
+ function start(list, cfgOptions) {
21
+ if(typeof cfgOptions !== 'undefined') {
22
+ options = cfgOptions;
23
+ }
16
24
  storage.queue(list);
17
25
  }
18
26
 
19
27
  function process() {
28
+ var tracker;
20
29
  while(typeof storage.getFirst() !== 'undefined') {
21
- var tracker = new Tracker(storage.dequeue());
30
+ tracker = new Tracker(storage.dequeue(), trackerOptions());
22
31
  tracker.send();
23
32
  }
24
33
  }
25
34
 
35
+ function trackerOptions() {
36
+ var trackerParams = {};
37
+ trackerParams.timestamp = (typeof options.timestamp !== 'undefined') ? options.timestamp : false;
38
+ if(trackerParams.timestamp) {
39
+ trackerParams.seed = timeSeed;
40
+ }
41
+ return trackerParams;
42
+ }
43
+
26
44
  function Storage() {
27
45
 
28
46
  this.storage = [];
29
47
 
30
48
  this.constructor = function() {
31
- if(sessionStorage.getItem('action_tracker_storage'))
49
+ if(sessionStorage.getItem('action_tracker_storage')) {
32
50
  this.getStorage();
33
- else
51
+ } else {
34
52
  this.setStorage();
53
+ }
35
54
  };
36
55
 
37
56
  this.getStorage = function() {
@@ -45,8 +64,10 @@ var ActionTracker = function () {
45
64
  this.queue = function(list) {
46
65
  if(list != null) {
47
66
  this.getStorage();
48
- for (var i = 0; i < list.length; i++)
67
+ var i;
68
+ for (i = 0; i < list.length; i += 1) {
49
69
  this.storage.push(list[i]);
70
+ }
50
71
  this.setStorage();
51
72
  }
52
73
  };
@@ -65,42 +86,74 @@ var ActionTracker = function () {
65
86
  };
66
87
 
67
88
  this.constructor();
68
- };
89
+ }
69
90
 
70
- function Tracker(tracker_data) {
91
+ function Tracker(trackerData, cfgOptions) {
71
92
 
72
93
  this.userFlag = false;
73
- this.dataFlag = false;
74
94
  this.user = null;
75
- this.data = null;
95
+ this.options = null;
96
+
97
+ var data = null;
98
+ var dataFlag = false;
99
+ var logoutFlag = false;
100
+
101
+ if(typeof cfgOptions !== 'undefined') {
102
+ this.options = cfgOptions;
103
+ }
76
104
 
77
- if(typeof tracker_data !== 'undefined') {
78
- if(typeof tracker_data.identify !== 'undefined') {
105
+ if(typeof trackerData !== 'undefined') {
106
+ if(typeof trackerData.identify !== 'undefined') {
79
107
  this.userFlag = true;
80
- this.user = new User(tracker_data.identify);
108
+ this.user = new User(trackerData.identify);
109
+ }
110
+ if(typeof trackerData.track !== 'undefined') {
111
+ dataFlag = true;
112
+ data = trackerData.track;
113
+ if(this.options.timestamp) {
114
+ data.created_at = this.options.seed.getTimeSeed();
115
+ }
81
116
  }
82
- if(typeof tracker_data.track !== 'undefined') {
83
- this.dataFlag = true;
84
- this.data = tracker_data.track;
117
+ if(trackerData.logout) {
118
+ logoutFlag = true;
85
119
  }
86
120
  }
87
121
 
88
122
  this.send = function() {
89
- if(this.userFlag) callbacks.identify(this.user.getData());
90
- if(this.dataFlag) callbacks.track(this.data);
123
+ if(this.userFlag) {
124
+ callbacks.identify(this.user.getData());
125
+ }
126
+ if(dataFlag) {
127
+ callbacks.track(data, function() {
128
+ if(logoutFlag) {
129
+ callbacks.logout();
130
+ }
131
+ });
132
+ }
91
133
  };
92
- };
134
+ }
93
135
 
94
- function User(user_data) {
95
- this.data = user_data;
136
+ function User(userData) {
137
+ this.data = userData;
96
138
  this.data.id = callbacks.generateID(this.data.email);
97
139
 
98
140
  this.getData = function() {
99
141
  return this.data;
100
142
  };
101
- };
143
+ }
144
+
145
+ function TimeSeed() {
146
+ this.seed_date = new Date();
102
147
 
103
- var public = {
148
+ this.getTimeSeed = function() {
149
+ this.seed_date.setSeconds(this.seed_date.getSeconds() + 1);
150
+ return this.seed_date;
151
+ };
152
+ }
153
+
154
+ constructor();
155
+
156
+ return {
104
157
  Tracker: Tracker,
105
158
  User: User,
106
159
  Storage: Storage,
@@ -109,7 +162,4 @@ var ActionTracker = function () {
109
162
  callbacks: setCallbacks
110
163
  };
111
164
 
112
- constructor();
113
-
114
- return public;
115
165
  }();
@@ -1,3 +1,3 @@
1
1
  module ActionTracker
2
- VERSION = '0.1.5'.freeze
2
+ VERSION = '0.1.6'.freeze
3
3
  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.5
4
+ version: 0.1.6
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-04 00:00:00.000000000 Z
12
+ date: 2016-05-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -137,6 +137,20 @@ dependencies:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
139
  version: '4.6'
140
+ - !ruby/object:Gem::Dependency
141
+ name: jasmine
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '2.4'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '2.4'
140
154
  description: Easy way to track actions in your application without adding unnecessary
141
155
  code to your controllers.
142
156
  email:
@@ -189,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
203
  version: '0'
190
204
  requirements: []
191
205
  rubyforge_project:
192
- rubygems_version: 2.4.5
206
+ rubygems_version: 2.4.8
193
207
  signing_key:
194
208
  specification_version: 4
195
209
  summary: Easy way to track actions in your application.