action_tracker 0.1.5 → 0.1.6

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