Skip to content

Commit 0d86062

Browse files
committed
chore(release): v2.0.0
1 parent 3349855 commit 0d86062

File tree

10 files changed

+121
-192
lines changed

10 files changed

+121
-192
lines changed

CHANGELOG.md

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,18 @@
1-
<a name="2.0.0-beta2"></a>
2-
### 2.0.0-beta2 (2014-01-27)
1+
<a name="2.0.0"></a>
2+
### 2.0.0 (2014-01-27)
33

4-
#### Features
5-
6-
* **promiseTracker:**
7-
* remove events system ([d3770aac](http://github.com/ajoslin/angular-promise-tracker/commit/d3770aacbd1d1233dcf3f894982004939e64bf91))
8-
* add register() and deregister() methods ([cab3c620](http://github.com/ajoslin/angular-promise-tracker/commit/cab3c62013ed3dcb9a0b47d9d1d5ae17d2fe6ab4))
9-
10-
11-
#### Breaking Changes
12-
13-
* The events system has been removed. That means that `promiseTracker.on()`
14-
and `promiseTracker.off()` no longer exist. In essence, events were a poor way of doing
15-
'hooks' on promises that we wanted to do. See [this
16-
issue](https://github.com/ajoslin/angular-promise-tracker/issues/37) for
17-
more information.
18-
19-
[Open an
20-
issue of your own](https://github.com/ajoslin/angular-promise-tracker/issues) if you
21-
were using events and need help migrating to use another method.
4+
**The API has completely changed in 2.0. See the README for details. Synopsis of changes:**
225

23-
Check [the
24-
README](https://github.com/ajoslin/angular-promise-tracker/tree/master/README.md)
25-
for details on the current API for promiseTracker.
26-
([d3770aac](http://github.com/ajoslin/angular-promise-tracker/commit/d3770aacbd1d1233dcf3f894982004939e64bf91))
6+
* String ID system for trackers removed, now use instances created with `var myTrack = new promiseTracker([options]);`.
7+
* http interceptor functionality is now optional; use it by including `promise-tracker-http-interceptor.js`
8+
* maxDuration option is removed (there are better ways to do this in every case)
279

28-
* A promiseTracker instance can no longer be created with the
29-
`promiseTracker` function, it is a getter only now. Use
30-
`promiseTracker.register()`.
10+
If you are using 1.x in your app and you would like to upgrade, here is the migration guide:
3111

32-
To migrate your code, change the following:
33-
34-
```js
35-
var newTracker = promiseTracker('newTracker', options);
36-
//..later
37-
var tracker = promiseTracker('newTracker');
38-
```
39-
40-
To:
41-
42-
```js
43-
var newTracker = promiseTracker.register('newTracker', options);
44-
//..later
45-
var tracker = promiseTracker('newTracker');
46-
```
12+
* Find your string ids where you are getting promiseTracker with `promiseTracker('id')`, and create a reference instead with `promiseTracker()`. If you want a global tracker, store it on rootScope or in a service (check README).
13+
* (note: The actual instances of the promiseTrackers will have the same API).
4714

48-
Check the [project
49-
README](http://github.com/ajoslin/angular-promise-tracker/tree/master/README.md)
50-
for more details about this change.
51-
([cab3c620](http://github.com/ajoslin/angular-promise-tracker/commit/cab3c62013ed3dcb9a0b47d9d1d5ae17d2fe6ab4))
15+
Upgrading is *not* required, or even recommended, for existing apps.
5216

5317

5418
<a name="v1.5.1"></a>

Gruntfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ module.exports = function (grunt) {
4646
},
4747
files: {
4848
'<%= dist %>/promise-tracker.js': ['src/promise-tracker.js'],
49-
'<%= dist %>/promise-tracker-http-intercetpor.js': ['src/http-interceptor.js']
49+
'<%= dist %>/promise-tracker-http-interceptor.js': ['src/http-interceptor.js']
5050
}
5151
}
5252
},

README.md

Lines changed: 42 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
angular-promise-tracker
22
=======================
33

4+
> **Version**: 2.0
5+
6+
(note to users using version 1.x: upgrading has *many* breaking changes, see [the CHANGELOG](https://github.com/ajoslin/angular-promise-tracker/tree/master/CHANGELOG.md).)
7+
48
[![Build Status](https://travis-ci.org/ajoslin/angular-promise-tracker.png)](https://travis-ci.org/ajoslin/angular-promise-tracker)
59

610
Small, feature filled library used to easily add spinners or general promise/request tracking to your angular app.
@@ -24,79 +28,68 @@ $ bower install angular-promise-tracker
2428
<div class="my-super-awesome-loading-box" ng-show="loadingTracker.active()">
2529
Loading...
2630
</div>
27-
<button ng-click="fetchSomething()">Fetch Something</button>
2831
<button ng-click="delaySomething()">Delay Something</button>
32+
<button ng-click="fetchSomething()">Fetch Something</button>
2933

3034
<script src="angular.js"></script>
31-
<script src="angular-promise-tracker.js"></script>
35+
<script src="promise-tracker.js"></script>
36+
37+
<!-- optional for $http sugar -->
38+
<script src="promise-tracker-http-intercetpor.js"></script>
3239
</body>
3340
```
3441
```js
3542
angular.module('myApp', ['ajoslin.promise-tracker'])
3643
.controller('MainCtrl', function($scope, $http, $timeout, promiseTracker) {
37-
//Create / get our tracker with unique ID
38-
$scope.loadingTracker = promiseTracker.register('loadingTracker');
44+
//Create a new tracker
45+
$scope.loadingTracker = promiseTracker();
46+
47+
//use `addPromise` to add any old promise to our tracker
48+
$scope.delaySomething = function() {
49+
var promise = $timeout(function() {
50+
alert('Delayed something!');
51+
}, 1000);
52+
$scope.loadingTracker.addPromise(promise);
53+
};
3954

4055
//use `tracker:` shortcut in $http config to link our http promise to a tracker
56+
//This shortcut is included in promise-tracker-http-interceptor.js
4157
$scope.fetchSomething = function(id) {
4258
return $http.get('/something', {
4359
tracker: 'loadingTracker'
4460
}).then(function(response) {
4561
alert('Fetched something! ' + response.data);
4662
});
4763
};
48-
49-
//use `addPromise` to add any old promise to our tracker
50-
$scope.delaySomething = function() {
51-
var promise = $timeout(function() {
52-
alert('Delayed something!');
53-
}, 1000);
54-
$scope.loadingTracker.addPromise(promise);
55-
};
5664
});
5765
```
5866

5967
## API Documentation
6068

6169
### Service `promiseTracker`
6270

63-
* **`tracker` promiseTracker.register(trackerId[, options])**
71+
* **`tracker` promiseTracker([options])**
6472

65-
Registers a new promiseTracker with the given identifier.
73+
Creates and returns a new promiseTracker.
6674

6775
Options can be given as an object, with the following allowed values:
6876

6977
- `activationDelay` `{Number}` - Number of milliseconds that an added promise needs to be pending before this tracker is active.
7078
* Usage example: You have some http calls that sometimes return too quickly for a loading spinner to look good. You only want to show the tracker if a promise is pending for over 500ms. You put `{activationDelay: 500}` in options.
7179
- `minDuration` `{Number}` - Minimum number of milliseconds that a tracker will stay active.
7280
* Usage example: You want a loading spinner to always show up for at least 750ms. You put `{minDuration: 750}` in options.
73-
- `maxDuration` `{Number}` - Maximum number of milliseconds that a tracker will stay active.
74-
* Usage example: Your http request takes over ten seconds to come back. You don't want to display a loading spinner that long; only for two seconds. You put `{maxDuration: 2000}` in options.
75-
76-
* **`void` promiseTracker.deregister(trackerId)**
7781

78-
Deregisters a tracker `register`ed with the given identifier.
79-
80-
* **`tracker` promiseTracker(trackerId)**
81-
82-
Returns a tracker with `register`ed with the given id.
83-
84-
### **`$http` Sugar**
85-
86-
* **Any $http call's `config` parameter can have a `tracker` field. Examples:**
82+
Often you want a global promiseTracker (eg to show a loading screen); one easy way is to put the tracker on your $rootScope:
8783

8884
```js
89-
//Add $http promise to tracker with id 'myTracker'
90-
$http('/banana', { tracker: 'myTracker' })
91-
```
92-
```js
93-
//Add $http promise to both 'tracker1' and 'tracker2'
94-
$http.post('/elephant', {some: 'data'}, { tracker: ['tracker1', 'tracker2'] })
85+
app.run(function($rootScope, promiseTracker) {
86+
$rootScope.loadingTracker = promiseTracker();
87+
});
9588
```
9689

9790
### Instantiated promiseTracker
9891

99-
`var tracker = promiseTracker('myId');`
92+
Example: `var myTracker = promiseTracker({ activationDelay: 500, minDuration: 750 });`
10093

10194
* **`boolean` tracker.active()**
10295

@@ -126,7 +119,6 @@ angular.module('myApp', ['ajoslin.promise-tracker'])
126119
```js
127120
var deferred = myTracker.createPromise()
128121
console.log(myTracker.active()) // => true
129-
//later...
130122
deferred.resolve();
131123
console.log(myTracker.active()) // => false
132124
}
@@ -136,6 +128,21 @@ angular.module('myApp', ['ajoslin.promise-tracker'])
136128

137129
Causes a tracker to immediately become inactive and stop tracking all current promises.
138130

131+
### **`$http` Sugar**
132+
133+
**Requires promise-tracker-http-interceptor.js**
134+
135+
* **Any $http call's `config` parameter can have a `tracker` field. Examples:**
136+
137+
```js
138+
//Add $http promise to tracker with id 'myTracker'
139+
$http('/banana', { tracker: myPromiseTrackerInstance })
140+
```
141+
```js
142+
//Add $http promise to both 'tracker1' and 'tracker2'
143+
$http.post('/elephant', {some: 'data'}, { tracker: [myFirstTracker, mySecondTracker] })
144+
```
145+
139146
## Development
140147

141148
* Install karma & grunt with `npm install -g karma grunt-cli` to build & test

bower.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"author": "Andy Joslin",
33
"name": "promise-tracker",
44
"description": "Easily add spinners or general request tracking to your angular app.",
5-
"version": "2.0.0-beta3",
5+
"version": "2.0.0",
66
"homepage": "http://github.com/ajoslin/angular-promise-tracker",
77
"repository": {
88
"type": "git",
@@ -23,8 +23,7 @@
2323
],
2424
"files": [
2525
"promise-tracker.js",
26-
"promise-tracker.min.js",
27-
"README.md"
26+
"promise-tracker-http-interceptor.js"
2827
],
2928
"devDependencies": {
3029
"angular": "1.2.6",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "angular-promise-tracker",
3-
"version": "2.0.0-beta4",
3+
"version": "2.0.0",
44
"author": {
55
"name": "Andy Joslin"
66
},
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* promise-tracker - v2.0.0-beta3 - 2014-02-13
3+
* http://github.com/ajoslin/angular-promise-tracker
4+
* Created by Andy Joslin; Licensed under Public Domain
5+
*/
6+
7+
(function() {
8+
9+
angular.module('ajoslin.promise-tracker')
10+
.config(['$httpProvider', function($httpProvider) {
11+
$httpProvider.interceptors.push(['$q', 'promiseTracker', function($q, promiseTracker) {
12+
return {
13+
request: function(config) {
14+
if (config.tracker) {
15+
if (!angular.isArray(config.tracker)) {
16+
config.tracker = [config.tracker];
17+
}
18+
config.$promiseTrackerDeferred = config.$promiseTrackerDeferred || [];
19+
20+
angular.forEach(config.tracker, function(tracker) {
21+
var deferred = tracker.createPromise();
22+
config.$promiseTrackerDeferred.push(deferred);
23+
});
24+
}
25+
return $q.when(config);
26+
},
27+
response: function(response) {
28+
if (response.config && response.config.$promiseTrackerDeferred) {
29+
angular.forEach(response.config.$promiseTrackerDeferred, function(deferred) {
30+
deferred.resolve(response);
31+
});
32+
}
33+
return $q.when(response);
34+
},
35+
responseError: function(response) {
36+
if (response.config && response.config.$promiseTrackerDeferred) {
37+
angular.forEach(response.config.$promiseTrackerDeferred, function(deferred) {
38+
deferred.reject(response);
39+
});
40+
}
41+
return $q.reject(response);
42+
}
43+
};
44+
}]);
45+
}]);
46+
47+
}());

0 commit comments

Comments
 (0)