Skip to content
This repository has been archived by the owner on Mar 15, 2018. It is now read-only.

Commit

Permalink
Update urls.js to match fireplace/commonplace
Browse files Browse the repository at this point in the history
  • Loading branch information
diox committed Mar 17, 2014
1 parent 0562892 commit 7565545
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 14 deletions.
32 changes: 25 additions & 7 deletions src/media/js/urls.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ define('urls',
['format', 'routes_api', 'routes_api_args', 'settings', 'user', 'utils'],
function(format, api_endpoints, api_args, settings, user) {

var group_pattern = /\(.+\)/;
var group_pattern = /\([^\)]+\)/;
var optional_pattern = /(\(.*\)|\[.*\]|.)\?/g;
var reverse = function(view_name, args) {
args = args || [];
Expand Down Expand Up @@ -43,16 +43,29 @@ define('urls',
if (user.logged_in()) {
args._user = user.get_token();
}
var blacklist = settings.api_param_blacklist || [];
for (var key in args) {
if (!args[key] || blacklist.indexOf(key) !== -1) {
delete args[key];
}
}
_removeBlacklistedParams(args);
return require('utils').urlparams(out, args);
};
}

function _anonymousArgs(func) {
return function() {
var out = func.apply(this, arguments);
var args = api_args();
_removeBlacklistedParams(args);
return require('utils').urlparams(out, args);
};
}

function _removeBlacklistedParams(args) {
var blacklist = settings.api_param_blacklist || [];
for (var key in args) {
if (!args[key] || blacklist.indexOf(key) !== -1) {
delete args[key];
}
}
}

function api(endpoint, args, params) {
if (!(endpoint in api_endpoints)) {
console.error('Invalid API endpoint: ' + endpoint);
Expand Down Expand Up @@ -86,7 +99,12 @@ define('urls',
url: _userArgs(api),
params: _userArgs(apiParams),
sign: _userArgs(function(url) {return url;}),
unsign: _anonymousArgs(function(url) {return url;}),
unsigned: {
url: _anonymousArgs(api),
params: _anonymousArgs(apiParams)
},
base: {
url: api,
params: apiParams
}
Expand Down
2 changes: 1 addition & 1 deletion src/media/js/views/collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ define('views/collection',
// Rewrite the cache to remove the collection.
collection_model.del(collection.id);
cache.bust(urls.api.url('collection', [collection.id]));
var list_endpoint = urls.api.unsigned.url('collections');
var list_endpoint = urls.api.base.url('collections');
cache.attemptRewrite(
function(key) {
return utils.baseurl(key) == list_endpoint;
Expand Down
2 changes: 1 addition & 1 deletion src/media/js/views/new_collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ define('views/new_collection',
data.description[navigator.l10n.language] = orig_data.description;

collection_model.cast(data);
var list_endpoint = urls.api.unsigned.url('collections');
var list_endpoint = urls.api.base.url('collections');
cache.attemptRewrite(
function(key) {
if (utils.baseurl(key) !== list_endpoint) return false;
Expand Down
32 changes: 27 additions & 5 deletions src/tests/urls.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ test('reverse too many args', function(done, fail) {
}, fail);
});

test('reverse multiple args', function(done, fail) {
mock_routes([
{pattern: '^/apps/([0-9]+)/reviews/([0-9]+)$', view_name: 'two_args'},
], function() {
var reversed = urls.reverse('two_args', [10, 20]);
eq_('/apps/10/reviews/20', reversed);
done();
}, fail);
});

test('api url', function(done, fail) {
mock(
'urls',
Expand All @@ -86,13 +96,25 @@ test('api url signage', function(done, fail) {
capabilities: {firefoxOS: true, widescreen: function() { return false; }, touch: 'foo'},
routes_api: {'homepage': '/foo/homepage'},
routes_api_args: function() {return function() {return function() {return {foo: 'bar'};};};}, // Functions get pre-evaluated.
settings: {api_url: 'api:'}
settings: {api_url: 'api:'},
user: {
logged_in: function() { return true; },
get_setting: function(x) {},
get_token: function() { return 'mytoken';}
}
}, function(urls) {
var homepage_url = urls.api.unsigned.url('homepage');
var homepage_url, homepage_base_url = urls.api.base.url('homepage');

homepage_url = homepage_base_url;
eq_(homepage_url, 'api:/foo/homepage');
eq_(urls.api.sign(homepage_url), urls.api.url('homepage'));
disincludes(homepage_url, 'foo=bar');
contains(urls.api.sign(homepage_url), 'foo=bar');

homepage_url = urls.api.url('homepage');
eq_(homepage_url, urls.api.sign(homepage_base_url));
contains(homepage_url, '_user=mytoken');

homepage_url = urls.api.unsigned.url('homepage');
eq_(homepage_url, urls.api.unsign(homepage_base_url));
disincludes(homepage_url, '_user=mytoken');
done();
},
fail
Expand Down

0 comments on commit 7565545

Please sign in to comment.