Browse Source

Prevent queue polling until events are added

Update tests to ensure process handled properly
Version bump to v1.2.1, update READMEs and CHANGELOG
master
dustinlarimer 7 years ago
parent
commit
37ef79b622
  1. 7
      CHANGELOG.md
  2. 2
      README.md
  3. 7
      dist/keen-tracking.js
  4. 10
      dist/keen-tracking.min.js
  5. 4
      docs/installation.md
  6. 9
      gulpfile.js
  7. 6
      lib/defer-events.js
  8. 2
      lib/utils/queue.js
  9. 3
      package.json
  10. 17
      test/unit/modules/defer-events-spec.js
  11. 11
      test/unit/modules/utils/queue-spec.js

7
CHANGELOG.md

@ -6,6 +6,13 @@
**BREAKING:**
**CHANGE:**
-->
<a name="1.2.1"></a>
# 1.2.1 Fix queue polling
**FIXED:**
* Fixed a queue polling issue (#84) to prevent queue from polling until events are added to the queue, allowing scripts to close properly when queues are _not_ used
<a name="1.2.0"></a>
# 1.2.0 Fix queue exiting

2
README.md

@ -12,7 +12,7 @@ $ npm install keen-tracking --save
Or load it from our CDN:
```html
<script src="https://d26b395fwzu5fz.cloudfront.net/keen-tracking-1.2.0.min.js"></script>
<script src="https://d26b395fwzu5fz.cloudfront.net/keen-tracking-1.2.1.min.js"></script>
```
[Read about more installation options here](./docs/installation.md)

7
dist/keen-tracking.js

@ -133,6 +133,9 @@ function deferEvent(eventCollection, eventBody){
this.queue.events[eventCollection] = this.queue.events[eventCollection] || [];
this.queue.events[eventCollection].push(eventBody);
this.queue.capacity++;
if (!this.queue.timer) {
this.queue.start();
}
this.emit('deferEvent', eventCollection, eventBody);
return this;
}
@ -146,6 +149,9 @@ function deferEvents(eventsHash){
self.queue.events[eventCollection] = self.queue.events[eventCollection] || [];
self.queue.events[eventCollection] = self.queue.events[eventCollection].concat(eventList);
self.queue.capacity = self.queue.capacity + eventList.length;
if (!self.queue.timer) {
self.queue.start();
}
});
self.emit('deferEvents', eventsHash);
return self;
@ -955,7 +961,6 @@ function queue() {
};
this.interval = 0;
this.timer = null;
this.start();
return this;
}
Emitter(queue.prototype);

10
dist/keen-tracking.min.js

File diff suppressed because one or more lines are too long

4
docs/installation.md

@ -9,7 +9,7 @@ $ npm install keen-tracking --save
Or load it from our CDN:
```html
<script src="https://d26b395fwzu5fz.cloudfront.net/keen-tracking-1.2.0.min.js"></script>
<script src="https://d26b395fwzu5fz.cloudfront.net/keen-tracking-1.2.1.min.js"></script>
```
Prefer asynchronous loading? Copy/paste this snippet of JavaScript above the `</head>` tag of your page to load the tracking library asynchronously. This technique sneaks the library into your page without significantly impacting page load speed.
@ -19,7 +19,7 @@ Prefer asynchronous loading? Copy/paste this snippet of JavaScript above the `</
// Loads the library asynchronously from any URI
!function(name,path,ctx){
var latest,prev=name!=='Keen'&&window.Keen?window.Keen:false;ctx[name]=ctx[name]||{ready:function(fn){var h=document.getElementsByTagName('head')[0],s=document.createElement('script'),w=window,loaded;s.onload=s.onreadystatechange=function(){if((s.readyState&&!(/^c|loade/.test(s.readyState)))||loaded){return}s.onload=s.onreadystatechange=null;loaded=1;latest=w.Keen;if(prev){w.Keen=prev}else{try{delete w.Keen}catch(e){w.Keen=void 0}}ctx[name]=latest;ctx[name].ready(fn)};s.async=1;s.src=path;h.parentNode.insertBefore(s,h)}}
}('Keen','https://d26b395fwzu5fz.cloudfront.net/keen-tracking-1.2.0.min.js',this);
}('Keen','https://d26b395fwzu5fz.cloudfront.net/keen-tracking-1.2.1.min.js',this);
// Executes when the library is loaded and ready
Keen.ready(function(){

9
gulpfile.js

@ -4,7 +4,6 @@ var gulp = require('gulp'),
var aws = require('gulp-awspublish'),
browserify = require('browserify'),
buffer = require('vinyl-buffer'),
compress = require('gulp-yuicompressor')
connect = require('gulp-connect'),
del = require('del'),
karma = require('karma').server,
@ -17,6 +16,7 @@ var aws = require('gulp-awspublish'),
source = require('vinyl-source-stream'),
sourcemaps = require('gulp-sourcemaps'),
stripComments = require('gulp-strip-comments'),
uglify = require('gulp-uglify'),
util = require('gulp-util');
@ -52,17 +52,14 @@ gulp.task('build:browserify', function() {
gulp.task('build:minify', ['build:browserify'], function(){
return gulp.src(['./dist/' + pkg.name + '.js'])
.pipe(compress({ type: 'js' }))
.pipe(uglify())
.pipe(rename({ suffix: '.min' }))
.pipe(gulp.dest('./dist/'));
});
gulp.task('minify-loader', function(){
return gulp.src(['./lib/browser-async.js'])
.pipe(compress({
nomunge: 0,
type: 'js'
}))
.pipe(uglify())
.pipe(rename({ basename: 'keen-loader', suffix: '.min' }))
.pipe(gulp.dest('./dist/'));
});

6
lib/defer-events.js

@ -20,6 +20,9 @@ function deferEvent(eventCollection, eventBody){
this.queue.events[eventCollection] = this.queue.events[eventCollection] || [];
this.queue.events[eventCollection].push(eventBody);
this.queue.capacity++;
if (!this.queue.timer) {
this.queue.start();
}
this.emit('deferEvent', eventCollection, eventBody);
return this;
}
@ -36,6 +39,9 @@ function deferEvents(eventsHash){
self.queue.events[eventCollection] = self.queue.events[eventCollection] || [];
self.queue.events[eventCollection] = self.queue.events[eventCollection].concat(eventList);
self.queue.capacity = self.queue.capacity + eventList.length;
if (!self.queue.timer) {
self.queue.start();
}
});
self.emit('deferEvents', eventsHash);
return self;

2
lib/utils/queue.js

@ -15,8 +15,6 @@ function queue() {
};
this.interval = 0;
this.timer = null;
this.start();
return this;
}

3
package.json

@ -1,6 +1,6 @@
{
"name": "keen-tracking",
"version": "1.2.0",
"version": "1.2.1",
"description": "Data Collection SDK for Keen IO",
"main": "lib/server.js",
"browser": "lib/browser.js",
@ -42,6 +42,7 @@
"gulp-replace": "^0.5.3",
"gulp-sourcemaps": "^1.5.2",
"gulp-strip-comments": "^1.0.1",
"gulp-uglify": "^1.5.2",
"gulp-util": "^3.0.4",
"gulp-yuicompressor": "0.0.3",
"karma": "^0.12.32",

17
test/unit/modules/defer-events-spec.js

@ -95,7 +95,24 @@ describe('.deferEvent(s) methods', function() {
this.client.recordDeferredEvents();
});
it('should not have an internal queue timer until an event is added to the queue', function(){
assert.isNull(this.client.queue.timer);
this.client.deferEvent('single-deferred-event', { prop: true });
assert.ok(this.client.queue.timer);
});
it('should not have an internal queue timer until multiple events are added to the queue', function(){
assert.isNull(this.client.queue.timer);
this.client.deferEvents({
'deferred event': [{ test: 'data' }, { test: 'none' }],
'another event': [{ test: 'data' }]
});
assert.ok(this.client.queue.timer);
});
it('should clear internal queue timer when .queueInterval() is set to 0', function(){
assert.isNull(this.client.queue.timer);
this.client.deferEvent('single-deferred-event', { prop: true });
assert.ok(this.client.queue.timer);
this.client.queueInterval(0);
assert.isNull(this.client.queue.timer);

11
test/unit/modules/utils/queue-spec.js

@ -28,8 +28,8 @@ describe('Keen.utils.queue', function() {
assert.equal(this.queue.config.interval, 15);
});
it('should have internal timer property', function() {
assert.ok(this.queue.timer);
it('should have internal timer property that is null', function() {
assert.isNull(this.queue.timer);
});
it('should have prototype methods', function() {
@ -44,9 +44,9 @@ describe('Keen.utils.queue', function() {
describe('methods', function(){
it('should set a new timer when .start() is called', function() {
assert.ok(this.queue.timer);
this.queue.pause();
assert.isNull(this.queue.timer);
// this.queue.pause();
// assert.isNull(this.queue.timer);
this.queue.start();
assert.ok(this.queue.timer);
this.queue.pause();
@ -72,12 +72,15 @@ describe('Keen.utils.queue', function() {
});
it('should clear timer when .pause() is called', function() {
assert.isNull(this.queue.timer);
this.queue.start();
assert.ok(this.queue.timer);
this.queue.pause();
assert.isNull(this.queue.timer);
});
it('should clear timer when config.interval is set to 0', function() {
this.queue.start();
assert.ok(this.queue.timer);
this.queue.config.interval = 0;
this.queue.check();

Loading…
Cancel
Save