From e37c84c8b7b813b10d6f31fa33a35bdc4a3814f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Mon, 9 May 2016 23:08:15 -0300 Subject: [PATCH 01/14] Storage specs. --- .../action_tracker_storage_spec.js | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 spec/javascripts/action_tracker_storage_spec.js diff --git a/spec/javascripts/action_tracker_storage_spec.js b/spec/javascripts/action_tracker_storage_spec.js new file mode 100644 index 0000000..519307d --- /dev/null +++ b/spec/javascripts/action_tracker_storage_spec.js @@ -0,0 +1,52 @@ + +var ActionTracker = ActionTracker || {}; + +describe('Action Tracker Storage', function() { + + var storage; + + beforeEach(function() { + storage = new ActionTracker.Storage(); + }); + + it('initializes empty', function() { + expect(typeof storage.getFirst()).toEqual('undefined'); + expect(storage.storage).toEqual([]); + }); + + it('add item to storage', function() { + storage.queue(['foo']); + storage.queue(['bar']); + expect(storage.storage).toEqual(['foo', 'bar']); + }); + + it('get item from storage', function() { + storage.queue(['foo']); + storage.queue(['bar']); + + expect(storage.getFirst()).toEqual('foo'); + expect(storage.dequeue()).toEqual('foo'); + expect(storage.getFirst()).toEqual('bar'); + expect(storage.dequeue()).toEqual('bar'); + + expect(storage.storage).toEqual([]); + }); + + it('shares same index in session storage', function() { + storage.queue(['foo']); + storage.queue(['bar']); + + var newStorage = new ActionTracker.Storage(); + + expect(newStorage.getFirst()).toEqual('foo'); + expect(newStorage.dequeue()).toEqual('foo'); + expect(newStorage.getFirst()).toEqual('bar'); + expect(newStorage.dequeue()).toEqual('bar'); + + storage.getStorage(); + + expect(storage.storage).toEqual([]); + expect(newStorage.storage).toEqual([]); + }); + +}); From 4bd7a141b154d2fc655191d5c6c29ca007155f7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 10 May 2016 08:16:01 -0300 Subject: [PATCH 02/14] Rake task for jasmine and rspec specs. --- Rakefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Rakefile b/Rakefile index c8e19eb..cce7eff 100644 --- a/Rakefile +++ b/Rakefile @@ -6,3 +6,11 @@ RSpec::Core::RakeTask.new(:spec) task :default => :spec require 'jasmine' load 'jasmine/tasks/jasmine.rake' + +task :travis do + ["rspec spec", "rake jasmine:ci", "rake cucumber"].each do |cmd| + puts "Starting to run #{cmd}..." + system("export DISPLAY=:99.0 && bundle exec #{cmd}") + raise "#{cmd} failed!" unless $?.exitstatus == 0 + end +end From 5835e37ecf806e89e4b0fdfbaccb94dc502879dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 10 May 2016 08:42:02 -0300 Subject: [PATCH 03/14] Running rake from .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9d4e902..9f83b60 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,3 +2,4 @@ language: ruby rvm: - 2.2.3 before_install: gem install bundler -v 1.11.2 +script: rake travis From c324612e78d97a179a7f27e120d894253148999c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Mon, 23 May 2016 11:34:39 -0300 Subject: [PATCH 04/14] Adding guard-jasmine. --- Guardfile | 6 ++++++ action_tracker.gemspec | 2 ++ 2 files changed, 8 insertions(+) diff --git a/Guardfile b/Guardfile index deea540..873a921 100644 --- a/Guardfile +++ b/Guardfile @@ -24,6 +24,12 @@ # * zeus: 'zeus rspec' (requires the server to be started separately) # * 'just' rspec: 'rspec' +guard 'jasmine' do + watch(%r{spec/javascripts/spec\.(js\.coffee|js|coffee)$}) { "spec/javascripts" } + watch(%r{spec/javascripts/.+_spec\.(js\.coffee|js|coffee)$}) + watch(%r{app/assets/javascripts/(.+?)\.(js\.coffee|js|coffee)$}) { |m| "spec/javascripts/#{m[1]}_spec.#{m[2]}" } +end + guard :rspec, cmd: "bundle exec rspec" do require "guard/rspec/dsl" dsl = Guard::RSpec::Dsl.new(self) diff --git a/action_tracker.gemspec b/action_tracker.gemspec index cc3aafd..e1a6509 100644 --- a/action_tracker.gemspec +++ b/action_tracker.gemspec @@ -28,5 +28,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'guard', '~> 2.13' spec.add_development_dependency 'byebug', '~> 5.0' spec.add_development_dependency 'guard-rspec', '~> 4.6' + spec.add_development_dependency 'guard-jasmine', '~> 2.0.6' + spec.add_development_dependency 'jasmine', '~> 2.4' end From af7fee34c0da6a0ca591d0c89f0eef31838a3ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Mon, 23 May 2016 11:35:18 -0300 Subject: [PATCH 05/14] Cleaning storage before running tests. --- app/assets/javascripts/action_tracker.js | 5 +++++ spec/javascripts/action_tracker_storage_spec.js | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/action_tracker.js b/app/assets/javascripts/action_tracker.js index ff1ff7b..60999f1 100644 --- a/app/assets/javascripts/action_tracker.js +++ b/app/assets/javascripts/action_tracker.js @@ -85,6 +85,11 @@ var ActionTracker = function () { return this.storage[0]; }; + this.clear = function() { + this.storage = []; + this.setStorage(); + } + this.constructor(); } diff --git a/spec/javascripts/action_tracker_storage_spec.js b/spec/javascripts/action_tracker_storage_spec.js index 519307d..3ff35e2 100644 --- a/spec/javascripts/action_tracker_storage_spec.js +++ b/spec/javascripts/action_tracker_storage_spec.js @@ -7,6 +7,7 @@ describe('Action Tracker Storage', function() { beforeEach(function() { storage = new ActionTracker.Storage(); + storage.clear(); }); it('initializes empty', function() { @@ -28,7 +29,7 @@ describe('Action Tracker Storage', function() { expect(storage.dequeue()).toEqual('foo'); expect(storage.getFirst()).toEqual('bar'); expect(storage.dequeue()).toEqual('bar'); - + expect(storage.storage).toEqual([]); }); @@ -42,7 +43,7 @@ describe('Action Tracker Storage', function() { expect(newStorage.dequeue()).toEqual('foo'); expect(newStorage.getFirst()).toEqual('bar'); expect(newStorage.dequeue()).toEqual('bar'); - + storage.getStorage(); expect(storage.storage).toEqual([]); From bf6b3af58eefec3089e954703195454373bcde88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Mon, 23 May 2016 18:26:33 -0300 Subject: [PATCH 06/14] Removing nonsense cucumber execution. --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index cce7eff..e23a1c9 100644 --- a/Rakefile +++ b/Rakefile @@ -8,7 +8,7 @@ require 'jasmine' load 'jasmine/tasks/jasmine.rake' task :travis do - ["rspec spec", "rake jasmine:ci", "rake cucumber"].each do |cmd| + ["rspec spec", "rake jasmine:ci"].each do |cmd| puts "Starting to run #{cmd}..." system("export DISPLAY=:99.0 && bundle exec #{cmd}") raise "#{cmd} failed!" unless $?.exitstatus == 0 From de5c3e0b71159401ae587299bd97b913249aa3e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 24 May 2016 00:13:37 -0300 Subject: [PATCH 07/14] Modularizing ActionTracker.js --- app/assets/javascripts/Storage.js | 69 ++++++++ app/assets/javascripts/TimeSeed.js | 17 ++ app/assets/javascripts/Tracker.js | 52 ++++++ app/assets/javascripts/User.js | 18 +++ app/assets/javascripts/action_tracker.js | 150 ++---------------- .../action_tracker_storage_spec.js | 13 +- 6 files changed, 178 insertions(+), 141 deletions(-) create mode 100644 app/assets/javascripts/Storage.js create mode 100644 app/assets/javascripts/TimeSeed.js create mode 100644 app/assets/javascripts/Tracker.js create mode 100644 app/assets/javascripts/User.js diff --git a/app/assets/javascripts/Storage.js b/app/assets/javascripts/Storage.js new file mode 100644 index 0000000..38a062c --- /dev/null +++ b/app/assets/javascripts/Storage.js @@ -0,0 +1,69 @@ +var ActionTracker = (function(self) { + + self.Storage = function() { + var storage = []; + + function constructor() { + if(sessionStorage.getItem('action_tracker_storage')) { + getStorage(); + } else { + setStorage(); + } + } + + function getStorage() { + storage = JSON.parse(sessionStorage.getItem('action_tracker_storage')); + } + + function setStorage() { + sessionStorage.setItem('action_tracker_storage', JSON.stringify(storage)); + } + + function queue(list) { + if(list != null) { + getStorage(); + var i; + for (i = 0; i < list.length; i += 1) { + storage.push(list[i]); + } + setStorage(); + } + } + + function dequeue() { + getStorage(); + var first = storage[0]; + storage.splice(0, 1); + setStorage(); + return first; + } + + function getFirst() { + getStorage(); + return storage[0]; + } + + function clear() { + storage = []; + setStorage(); + } + + function getLocalStorage() { + return storage; + } + + constructor(); + + return { + queue: queue, + dequeue: dequeue, + getStorage: getLocalStorage, + getFirst: getFirst, + refreshStorage: getStorage, + clear: clear, + } + }; + + return self; + +}(ActionTracker || {})); diff --git a/app/assets/javascripts/TimeSeed.js b/app/assets/javascripts/TimeSeed.js new file mode 100644 index 0000000..06f13d2 --- /dev/null +++ b/app/assets/javascripts/TimeSeed.js @@ -0,0 +1,17 @@ +var ActionTracker = (function(self) { + self.TimeSeed = function() { + var seed_date = new Date(); + + function getTimeSeed() { + this.seed_date.setSeconds(seed_date.getSeconds() + 1); + return seed_date; + }; + + return { + getTimeSeed: getTimeSeed + } + }; + + return self; + +}(ActionTracker || {})); diff --git a/app/assets/javascripts/Tracker.js b/app/assets/javascripts/Tracker.js new file mode 100644 index 0000000..0ab5342 --- /dev/null +++ b/app/assets/javascripts/Tracker.js @@ -0,0 +1,52 @@ +var ActionTracker = (function(self) { + + self.Tracker = function() { + var userFlag = false, + user = null, + options = null, + data = null, + dataFlag = false, + logoutFlag = false; + + if(typeof cfgOptions !== 'undefined') { + this.options = cfgOptions; + } + + if(typeof trackerData !== 'undefined') { + if(typeof trackerData.identify !== 'undefined') { + this.userFlag = true; + this.user = new User(trackerData.identify); + } + if(typeof trackerData.track !== 'undefined') { + dataFlag = true; + data = trackerData.track; + if(this.options.timestamp) { + data.created_at = this.options.seed.getTimeSeed(); + } + } + if(trackerData.logout) { + logoutFlag = true; + } + } + + function send() { + if(this.userFlag) { + callbacks.identify(this.user.getData()); + } + if(dataFlag) { + callbacks.track(data, function() { + if(logoutFlag) { + callbacks.logout(); + } + }); + } + } + + return { + send: send + } + }; + + return self; + +}(ActionTracker || {})); diff --git a/app/assets/javascripts/User.js b/app/assets/javascripts/User.js new file mode 100644 index 0000000..2bf2d7f --- /dev/null +++ b/app/assets/javascripts/User.js @@ -0,0 +1,18 @@ +var ActionTracker = (function(self) { + + self.User = function(userData, callbacks) { + var data = userData; + data.id = callbacks.generateID(this.data.email); + + function getData() { + return this.data; + } + + return { + getData: getData + } + }; + + return self; + +}(ActionTracker || {})); diff --git a/app/assets/javascripts/action_tracker.js b/app/assets/javascripts/action_tracker.js index 60999f1..0f0dd37 100644 --- a/app/assets/javascripts/action_tracker.js +++ b/app/assets/javascripts/action_tracker.js @@ -1,30 +1,27 @@ +//= require Storage +//= require TimeSeed +//= require User +//= require Tracker -var ActionTracker = function () { - - 'use strict'; +var ActionTracker = (function(self) { var storage, timeSeed, options = {}, callbacks = {}; - function constructor() { - storage = new Storage(); - timeSeed = new TimeSeed(); - } - - function setCallbacks(callbacksObj) { + self.callbacks = function(callbacksObj) { callbacks = callbacksObj; } - function start(list, cfgOptions) { + self.new = function(list, cfgOptions) { if(typeof cfgOptions !== 'undefined') { options = cfgOptions; } storage.queue(list); } - function process() { + self.push = function() { var tracker; while(typeof storage.getFirst() !== 'undefined') { tracker = new Tracker(storage.dequeue(), trackerOptions()); @@ -32,6 +29,11 @@ var ActionTracker = function () { } } + function constructor() { + storage = new self.Storage(); + timeSeed = new self.TimeSeed(); + } + function trackerOptions() { var trackerParams = {}; trackerParams.timestamp = (typeof options.timestamp !== 'undefined') ? options.timestamp : false; @@ -41,130 +43,8 @@ var ActionTracker = function () { return trackerParams; } - function Storage() { - - this.storage = []; - - this.constructor = function() { - if(sessionStorage.getItem('action_tracker_storage')) { - this.getStorage(); - } else { - this.setStorage(); - } - }; - - this.getStorage = function() { - this.storage = JSON.parse(sessionStorage.getItem('action_tracker_storage')); - }; - - this.setStorage = function() { - sessionStorage.setItem('action_tracker_storage', JSON.stringify(this.storage)); - }; - - this.queue = function(list) { - if(list != null) { - this.getStorage(); - var i; - for (i = 0; i < list.length; i += 1) { - this.storage.push(list[i]); - } - this.setStorage(); - } - }; - - this.dequeue = function() { - this.getStorage(); - var first = this.storage[0]; - this.storage.splice(0, 1); - this.setStorage(); - return first; - }; - - this.getFirst = function() { - this.getStorage(); - return this.storage[0]; - }; - - this.clear = function() { - this.storage = []; - this.setStorage(); - } - - this.constructor(); - } - - function Tracker(trackerData, cfgOptions) { - - this.userFlag = false; - this.user = null; - this.options = null; - - var data = null; - var dataFlag = false; - var logoutFlag = false; - - if(typeof cfgOptions !== 'undefined') { - this.options = cfgOptions; - } - - if(typeof trackerData !== 'undefined') { - if(typeof trackerData.identify !== 'undefined') { - this.userFlag = true; - this.user = new User(trackerData.identify); - } - if(typeof trackerData.track !== 'undefined') { - dataFlag = true; - data = trackerData.track; - if(this.options.timestamp) { - data.created_at = this.options.seed.getTimeSeed(); - } - } - if(trackerData.logout) { - logoutFlag = true; - } - } - - this.send = function() { - if(this.userFlag) { - callbacks.identify(this.user.getData()); - } - if(dataFlag) { - callbacks.track(data, function() { - if(logoutFlag) { - callbacks.logout(); - } - }); - } - }; - } - - function User(userData) { - this.data = userData; - this.data.id = callbacks.generateID(this.data.email); - - this.getData = function() { - return this.data; - }; - } - - function TimeSeed() { - this.seed_date = new Date(); - - this.getTimeSeed = function() { - this.seed_date.setSeconds(this.seed_date.getSeconds() + 1); - return this.seed_date; - }; - } - constructor(); - return { - Tracker: Tracker, - User: User, - Storage: Storage, - new: start, - push: process, - callbacks: setCallbacks - }; + return self; -}(); +}(ActionTracker || {})); diff --git a/spec/javascripts/action_tracker_storage_spec.js b/spec/javascripts/action_tracker_storage_spec.js index 3ff35e2..551bf4b 100644 --- a/spec/javascripts/action_tracker_storage_spec.js +++ b/spec/javascripts/action_tracker_storage_spec.js @@ -6,19 +6,20 @@ describe('Action Tracker Storage', function() { var storage; beforeEach(function() { + var store = {}; storage = new ActionTracker.Storage(); storage.clear(); }); it('initializes empty', function() { expect(typeof storage.getFirst()).toEqual('undefined'); - expect(storage.storage).toEqual([]); + expect(storage.getStorage()).toEqual([]); }); it('add item to storage', function() { storage.queue(['foo']); storage.queue(['bar']); - expect(storage.storage).toEqual(['foo', 'bar']); + expect(storage.getStorage()).toEqual(['foo', 'bar']); }); it('get item from storage', function() { @@ -30,7 +31,7 @@ describe('Action Tracker Storage', function() { expect(storage.getFirst()).toEqual('bar'); expect(storage.dequeue()).toEqual('bar'); - expect(storage.storage).toEqual([]); + expect(storage.getStorage()).toEqual([]); }); it('shares same index in session storage', function() { @@ -44,10 +45,10 @@ describe('Action Tracker Storage', function() { expect(newStorage.getFirst()).toEqual('bar'); expect(newStorage.dequeue()).toEqual('bar'); - storage.getStorage(); + storage.refreshStorage(); - expect(storage.storage).toEqual([]); - expect(newStorage.storage).toEqual([]); + expect(storage.getStorage()).toEqual([]); + expect(newStorage.getStorage()).toEqual([]); }); }); From 918ec3e99c075f2329bbdb21e9e813e740fcf04d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 24 May 2016 07:54:19 -0300 Subject: [PATCH 08/14] Fixing errors. --- app/assets/javascripts/TimeSeed.js | 2 +- app/assets/javascripts/Tracker.js | 18 +++++++++--------- app/assets/javascripts/User.js | 6 +++--- app/assets/javascripts/action_tracker.js | 8 ++++---- .../javascripts/action_tracker_storage_spec.js | 1 - 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/app/assets/javascripts/TimeSeed.js b/app/assets/javascripts/TimeSeed.js index 06f13d2..6d4ef66 100644 --- a/app/assets/javascripts/TimeSeed.js +++ b/app/assets/javascripts/TimeSeed.js @@ -3,7 +3,7 @@ var ActionTracker = (function(self) { var seed_date = new Date(); function getTimeSeed() { - this.seed_date.setSeconds(seed_date.getSeconds() + 1); + seed_date.setSeconds(seed_date.getSeconds() + 1); return seed_date; }; diff --git a/app/assets/javascripts/Tracker.js b/app/assets/javascripts/Tracker.js index 0ab5342..36e7ca9 100644 --- a/app/assets/javascripts/Tracker.js +++ b/app/assets/javascripts/Tracker.js @@ -1,6 +1,6 @@ var ActionTracker = (function(self) { - - self.Tracker = function() { + + self.Tracker = function(trackerData, cfgOptions, callbacks) { var userFlag = false, user = null, options = null, @@ -9,19 +9,19 @@ var ActionTracker = (function(self) { logoutFlag = false; if(typeof cfgOptions !== 'undefined') { - this.options = cfgOptions; + options = cfgOptions; } if(typeof trackerData !== 'undefined') { if(typeof trackerData.identify !== 'undefined') { - this.userFlag = true; - this.user = new User(trackerData.identify); + userFlag = true; + user = new self.User(trackerData.identify); } if(typeof trackerData.track !== 'undefined') { dataFlag = true; data = trackerData.track; - if(this.options.timestamp) { - data.created_at = this.options.seed.getTimeSeed(); + if(options.timestamp) { + data.created_at = options.seed.getTimeSeed(); } } if(trackerData.logout) { @@ -30,8 +30,8 @@ var ActionTracker = (function(self) { } function send() { - if(this.userFlag) { - callbacks.identify(this.user.getData()); + if(userFlag) { + callbacks.identify(user.getData()); } if(dataFlag) { callbacks.track(data, function() { diff --git a/app/assets/javascripts/User.js b/app/assets/javascripts/User.js index 2bf2d7f..0a42b22 100644 --- a/app/assets/javascripts/User.js +++ b/app/assets/javascripts/User.js @@ -1,11 +1,11 @@ var ActionTracker = (function(self) { self.User = function(userData, callbacks) { - var data = userData; - data.id = callbacks.generateID(this.data.email); + var data = userData; + data.id = callbacks.generateID(data.email); function getData() { - return this.data; + return data; } return { diff --git a/app/assets/javascripts/action_tracker.js b/app/assets/javascripts/action_tracker.js index 0f0dd37..1141bf8 100644 --- a/app/assets/javascripts/action_tracker.js +++ b/app/assets/javascripts/action_tracker.js @@ -12,22 +12,22 @@ var ActionTracker = (function(self) { self.callbacks = function(callbacksObj) { callbacks = callbacksObj; - } + }; self.new = function(list, cfgOptions) { if(typeof cfgOptions !== 'undefined') { options = cfgOptions; } storage.queue(list); - } + }; self.push = function() { var tracker; while(typeof storage.getFirst() !== 'undefined') { - tracker = new Tracker(storage.dequeue(), trackerOptions()); + tracker = new self.Tracker(storage.dequeue(), trackerOptions(), callbacks); tracker.send(); } - } + }; function constructor() { storage = new self.Storage(); diff --git a/spec/javascripts/action_tracker_storage_spec.js b/spec/javascripts/action_tracker_storage_spec.js index 551bf4b..ed50ef6 100644 --- a/spec/javascripts/action_tracker_storage_spec.js +++ b/spec/javascripts/action_tracker_storage_spec.js @@ -6,7 +6,6 @@ describe('Action Tracker Storage', function() { var storage; beforeEach(function() { - var store = {}; storage = new ActionTracker.Storage(); storage.clear(); }); From 609585ed9c6380480af881d14088be7201e44696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 24 May 2016 07:58:25 -0300 Subject: [PATCH 09/14] Fixing linter issues. --- app/assets/javascripts/Storage.js | 6 +++--- app/assets/javascripts/TimeSeed.js | 10 +++++----- app/assets/javascripts/Tracker.js | 2 +- app/assets/javascripts/User.js | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/Storage.js b/app/assets/javascripts/Storage.js index 38a062c..01c0d98 100644 --- a/app/assets/javascripts/Storage.js +++ b/app/assets/javascripts/Storage.js @@ -1,5 +1,5 @@ var ActionTracker = (function(self) { - + self.Storage = function() { var storage = []; @@ -20,7 +20,7 @@ var ActionTracker = (function(self) { } function queue(list) { - if(list != null) { + if(list !== null) { getStorage(); var i; for (i = 0; i < list.length; i += 1) { @@ -61,7 +61,7 @@ var ActionTracker = (function(self) { getFirst: getFirst, refreshStorage: getStorage, clear: clear, - } + }; }; return self; diff --git a/app/assets/javascripts/TimeSeed.js b/app/assets/javascripts/TimeSeed.js index 6d4ef66..a4777e5 100644 --- a/app/assets/javascripts/TimeSeed.js +++ b/app/assets/javascripts/TimeSeed.js @@ -1,15 +1,15 @@ var ActionTracker = (function(self) { self.TimeSeed = function() { - var seed_date = new Date(); + var seedDate = new Date(); function getTimeSeed() { - seed_date.setSeconds(seed_date.getSeconds() + 1); - return seed_date; - }; + seedDate.setSeconds(seedDate.getSeconds() + 1); + return seedDate; + } return { getTimeSeed: getTimeSeed - } + }; }; return self; diff --git a/app/assets/javascripts/Tracker.js b/app/assets/javascripts/Tracker.js index 36e7ca9..1af9054 100644 --- a/app/assets/javascripts/Tracker.js +++ b/app/assets/javascripts/Tracker.js @@ -44,7 +44,7 @@ var ActionTracker = (function(self) { return { send: send - } + }; }; return self; diff --git a/app/assets/javascripts/User.js b/app/assets/javascripts/User.js index 0a42b22..76c9f31 100644 --- a/app/assets/javascripts/User.js +++ b/app/assets/javascripts/User.js @@ -10,7 +10,7 @@ var ActionTracker = (function(self) { return { getData: getData - } + }; }; return self; From bdfca5edf68136b2e60ad0f4aebacc3ef7bf5f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 24 May 2016 08:40:40 -0300 Subject: [PATCH 10/14] Fixing user callbacks. --- app/assets/javascripts/Tracker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/Tracker.js b/app/assets/javascripts/Tracker.js index 1af9054..bc2fed2 100644 --- a/app/assets/javascripts/Tracker.js +++ b/app/assets/javascripts/Tracker.js @@ -15,7 +15,7 @@ var ActionTracker = (function(self) { if(typeof trackerData !== 'undefined') { if(typeof trackerData.identify !== 'undefined') { userFlag = true; - user = new self.User(trackerData.identify); + user = new self.User(trackerData.identify, callbacks); } if(typeof trackerData.track !== 'undefined') { dataFlag = true; From bf3bf6ba4486a40741b80a186791cfec303d3db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 24 May 2016 08:54:01 -0300 Subject: [PATCH 11/14] Time seed spec. --- .../action_tracker_time_seed_spec.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 spec/javascripts/action_tracker_time_seed_spec.js diff --git a/spec/javascripts/action_tracker_time_seed_spec.js b/spec/javascripts/action_tracker_time_seed_spec.js new file mode 100644 index 0000000..e00e911 --- /dev/null +++ b/spec/javascripts/action_tracker_time_seed_spec.js @@ -0,0 +1,18 @@ + +var ActionTracker = ActionTracker || {}; + +describe('Action Tracker Time Seed', function() { + + beforeEach(function() { + timeSeed = new ActionTracker.TimeSeed(); + }); + + it('increase time by 1 sec every time it gets called', function(){ + var second = timeSeed.getTimeSeed().getSeconds(); + expect(timeSeed.getTimeSeed().getSeconds() - second).toEqual(1); + expect(timeSeed.getTimeSeed().getSeconds() - second).toEqual(2); + expect(timeSeed.getTimeSeed().getSeconds() - second).toEqual(3); + expect(timeSeed.getTimeSeed().getSeconds() - second).toEqual(4); + }); + +}); From 15a66730092e7c29758e4559f7acc5b5a5fd4d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 24 May 2016 09:19:28 -0300 Subject: [PATCH 12/14] Pending specs for User and Tracker. --- app/assets/javascripts/User.js | 4 ++-- spec/javascripts/action_tracker_tracker_spec.js | 17 +++++++++++++++++ spec/javascripts/action_tracker_user_spec.js | 14 ++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 spec/javascripts/action_tracker_tracker_spec.js create mode 100644 spec/javascripts/action_tracker_user_spec.js diff --git a/app/assets/javascripts/User.js b/app/assets/javascripts/User.js index 76c9f31..e632be5 100644 --- a/app/assets/javascripts/User.js +++ b/app/assets/javascripts/User.js @@ -1,8 +1,8 @@ var ActionTracker = (function(self) { self.User = function(userData, callbacks) { - var data = userData; - data.id = callbacks.generateID(data.email); + var data = userData; + data.id = callbacks.generateID(data.email); function getData() { return data; diff --git a/spec/javascripts/action_tracker_tracker_spec.js b/spec/javascripts/action_tracker_tracker_spec.js new file mode 100644 index 0000000..a08c56a --- /dev/null +++ b/spec/javascripts/action_tracker_tracker_spec.js @@ -0,0 +1,17 @@ + +var ActionTracker = ActionTracker || {}; + +describe('Action Tracker Tracker', function() { + + beforeEach(function() { + storage = new ActionTracker.Tracker(); + }); + + xit('sets tracker data properly', function(){}); + xit('sets options data properly', function(){}); + xit('sets callbacks properly', function(){}); + xit('identifies user', function(){}); + xit('logout user', function(){}); + xit('tracks action', function(){}); + +}); diff --git a/spec/javascripts/action_tracker_user_spec.js b/spec/javascripts/action_tracker_user_spec.js new file mode 100644 index 0000000..a074969 --- /dev/null +++ b/spec/javascripts/action_tracker_user_spec.js @@ -0,0 +1,14 @@ + +var ActionTracker = ActionTracker || {}; + +describe('Action Tracker User', function() { + + beforeEach(function() { + storage = new ActionTracker.User(); + }); + + xit('sets user data properly', function(){}); + xit('sets callbacks properly', function(){}); + xit('generates user ID properly', function(){}); + +}); From 16dbf3673e040aff6477ed531fe1fd9214159d85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 24 May 2016 09:53:25 -0300 Subject: [PATCH 13/14] User specs. --- app/assets/javascripts/User.js | 13 +++++-- spec/javascripts/action_tracker_user_spec.js | 41 +++++++++++++++++--- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/User.js b/app/assets/javascripts/User.js index e632be5..25827cc 100644 --- a/app/assets/javascripts/User.js +++ b/app/assets/javascripts/User.js @@ -1,15 +1,22 @@ var ActionTracker = (function(self) { - self.User = function(userData, callbacks) { - var data = userData; + self.User = function(userData, userCallbacks) { + var data = userData, + callbacks = userCallbacks; + data.id = callbacks.generateID(data.email); function getData() { return data; } + function getCallbacks() { + return callbacks; + } + return { - getData: getData + getData: getData, + getCallbacks: getCallbacks }; }; diff --git a/spec/javascripts/action_tracker_user_spec.js b/spec/javascripts/action_tracker_user_spec.js index a074969..056d817 100644 --- a/spec/javascripts/action_tracker_user_spec.js +++ b/spec/javascripts/action_tracker_user_spec.js @@ -3,12 +3,43 @@ var ActionTracker = ActionTracker || {}; describe('Action Tracker User', function() { - beforeEach(function() { - storage = new ActionTracker.User(); + var user; + + beforeEach(function(){ + user = new ActionTracker.User({ + name: 'John Doe', + email: 'john@doe.net' + }, + { + generateID: function(email) { + return email + 'here_we_go' + } + } + ); }); - xit('sets user data properly', function(){}); - xit('sets callbacks properly', function(){}); - xit('generates user ID properly', function(){}); + it('set callbacks properly', function(){ + expect(typeof user.getCallbacks().generateID).toEqual('function'); + }); + it('sets user data properly', function(){ + expect(user.getData()).toEqual( + jasmine.objectContaining( + { + name: 'John Doe', + email: 'john@doe.net' + } + ) + ); + }); + + it('generates user ID properly', function(){ + expect(user.getData()).toEqual( + jasmine.objectContaining( + { + id: 'john@doe.nethere_we_go' + } + ) + ); + }); }); From b118e80c90b6783dfc630ce1aa422b8285b6f000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Taiar?= Date: Tue, 24 May 2016 10:02:08 -0300 Subject: [PATCH 14/14] Fixing spec. --- spec/javascripts/action_tracker_time_seed_spec.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/javascripts/action_tracker_time_seed_spec.js b/spec/javascripts/action_tracker_time_seed_spec.js index e00e911..03e890c 100644 --- a/spec/javascripts/action_tracker_time_seed_spec.js +++ b/spec/javascripts/action_tracker_time_seed_spec.js @@ -3,6 +3,8 @@ var ActionTracker = ActionTracker || {}; describe('Action Tracker Time Seed', function() { + var timeSeed; + beforeEach(function() { timeSeed = new ActionTracker.TimeSeed(); });