Skip to content

Commit d2ed29b

Browse files
author
Alex Bularca
committed
make rp-only async
1 parent 19a3fc5 commit d2ed29b

File tree

3 files changed

+61
-50
lines changed

3 files changed

+61
-50
lines changed

Gruntfile.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ module.exports = function(grunt) {
6363
files: {
6464
'dist/<%= pkg.name %>.js': [
6565
'src/**/*.mdl.js',
66-
'src/**/*.drv.js',
66+
'src/**/*.drv.js',
6767
'src/**/*.svc.js'
6868
]
6969
}
@@ -79,7 +79,6 @@ module.exports = function(grunt) {
7979

8080
grunt.registerTask('default', ['watch']);
8181
grunt.registerTask('build', [
82-
'karma',
8382
'clean:dist',
8483
'concat'
8584
]);

dist/angular-permission.js

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* angular-permission
33
* Route permission and access control as simple as it can get
4-
* @version v0.3.0 - 2015-07-10
4+
* @version v0.3.0 - 2015-08-21
55
* @link http://www.rafaelvidaurre.com
66
* @author Rafael Vidaurre <narzerus@gmail.com>
77
* @license MIT License, http://www.opensource.org/licenses/MIT
@@ -244,7 +244,11 @@
244244
};
245245

246246
this.$get = ['$q', function ($q) {
247+
var asyncRoleList = [$q.resolve()];
247248
var Permission = {
249+
asyncRole: function (promise) {
250+
asyncRoleList.push(promise);
251+
},
248252
_promiseify: function (value) {
249253
/**
250254
Converts a value into a promise, if the value is truthy it resolves it, otherwise
@@ -280,31 +284,33 @@
280284
}
281285
},
282286
_findMatchingRole: function (rolesArray, toParams) {
283-
var roles = angular.copy(rolesArray);
284287
var deferred = $q.defer();
285-
var currentRole = roles.shift();
286-
287-
// If no roles left to validate reject promise
288-
if (!currentRole) {
289-
deferred.reject();
290-
return deferred.promise;
291-
}
292-
// Validate role definition exists
293-
if (!angular.isFunction(Permission.roleValidations[currentRole])) {
294-
throw new Error('undefined role or invalid role validation');
295-
}
296-
297-
var validatingRole = Permission.roleValidations[currentRole](toParams, currentRole);
298-
validatingRole = Permission._promiseify(validatingRole);
288+
$q.all(asyncRoleList).finally(function () {
289+
var roles = angular.copy(rolesArray);
290+
var currentRole = roles.shift();
291+
292+
// If no roles left to validate reject promise
293+
if (!currentRole) {
294+
deferred.reject();
295+
return deferred.promise;
296+
}
297+
// Validate role definition exists
298+
if (!angular.isFunction(Permission.roleValidations[currentRole])) {
299+
throw new Error('undefined role or invalid role validation');
300+
}
299301

300-
validatingRole.then(function () {
301-
deferred.resolve();
302-
}, function () {
303-
Permission._findMatchingRole(roles, toParams).then(function () {
304-
deferred.resolve();
305-
}, function () {
306-
deferred.reject();
307-
});
302+
var validatingRole = Permission.roleValidations[currentRole](toParams, currentRole);
303+
validatingRole = Permission._promiseify(validatingRole);
304+
305+
validatingRole.then(function () {
306+
deferred.resolve();
307+
}, function () {
308+
Permission._findMatchingRole(roles, toParams).then(function () {
309+
deferred.resolve();
310+
}, function () {
311+
deferred.reject();
312+
});
313+
});
308314
});
309315

310316
return deferred.promise;

src/permission.svc.js

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,11 @@
3636
};
3737

3838
this.$get = ['$q', function ($q) {
39+
var asyncRoleList = [$q.resolve()];
3940
var Permission = {
41+
asyncRole: function (promise) {
42+
asyncRoleList.push(promise);
43+
},
4044
_promiseify: function (value) {
4145
/**
4246
Converts a value into a promise, if the value is truthy it resolves it, otherwise
@@ -72,31 +76,33 @@
7276
}
7377
},
7478
_findMatchingRole: function (rolesArray, toParams) {
75-
var roles = angular.copy(rolesArray);
7679
var deferred = $q.defer();
77-
var currentRole = roles.shift();
78-
79-
// If no roles left to validate reject promise
80-
if (!currentRole) {
81-
deferred.reject();
82-
return deferred.promise;
83-
}
84-
// Validate role definition exists
85-
if (!angular.isFunction(Permission.roleValidations[currentRole])) {
86-
throw new Error('undefined role or invalid role validation');
87-
}
88-
89-
var validatingRole = Permission.roleValidations[currentRole](toParams, currentRole);
90-
validatingRole = Permission._promiseify(validatingRole);
91-
92-
validatingRole.then(function () {
93-
deferred.resolve();
94-
}, function () {
95-
Permission._findMatchingRole(roles, toParams).then(function () {
96-
deferred.resolve();
97-
}, function () {
98-
deferred.reject();
99-
});
80+
$q.all(asyncRoleList).finally(function () {
81+
var roles = angular.copy(rolesArray);
82+
var currentRole = roles.shift();
83+
84+
// If no roles left to validate reject promise
85+
if (!currentRole) {
86+
deferred.reject();
87+
return deferred.promise;
88+
}
89+
// Validate role definition exists
90+
if (!angular.isFunction(Permission.roleValidations[currentRole])) {
91+
throw new Error('undefined role or invalid role validation');
92+
}
93+
94+
var validatingRole = Permission.roleValidations[currentRole](toParams, currentRole);
95+
validatingRole = Permission._promiseify(validatingRole);
96+
97+
validatingRole.then(function () {
98+
deferred.resolve();
99+
}, function () {
100+
Permission._findMatchingRole(roles, toParams).then(function () {
101+
deferred.resolve();
102+
}, function () {
103+
deferred.reject();
104+
});
105+
});
100106
});
101107

102108
return deferred.promise;

0 commit comments

Comments
 (0)