provide test cases for config (and fix null case); refs #24
This commit is contained in:
parent
dfeddcb4e4
commit
03c61624d0
|
@ -26,14 +26,10 @@ function require(path, parent, orig) {
|
|||
// perform real require()
|
||||
// by invoking the module's
|
||||
// registered function
|
||||
if (!module._resolving && !module.exports) {
|
||||
var mod = {};
|
||||
mod.exports = {};
|
||||
mod.client = mod.component = true;
|
||||
module._resolving = true;
|
||||
module.call(this, mod.exports, require.relative(resolved), mod);
|
||||
delete module._resolving;
|
||||
module.exports = mod.exports;
|
||||
if (!module.exports) {
|
||||
module.exports = {};
|
||||
module.client = module.component = true;
|
||||
module.call(this, module.exports, require.relative(resolved), module);
|
||||
}
|
||||
|
||||
return module.exports;
|
||||
|
@ -205,7 +201,7 @@ module.exports = require('./dist/lodash.compat.js');
|
|||
require.register("lodash-lodash/dist/lodash.compat.js", function(exports, require, module){
|
||||
/**
|
||||
* @license
|
||||
* Lo-Dash 2.2.0 (Custom Build) <http://lodash.com/>
|
||||
* Lo-Dash 2.2.1 (Custom Build) <http://lodash.com/>
|
||||
* Build: `lodash -o ./dist/lodash.compat.js`
|
||||
* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
|
||||
* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
|
||||
|
@ -792,8 +788,8 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* Creates a `lodash` object which wraps the given value to enable method
|
||||
* chaining.
|
||||
* Creates a `lodash` object which wraps the given value to enable intuitive
|
||||
* method chaining.
|
||||
*
|
||||
* In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
|
||||
* `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
|
||||
|
@ -827,6 +823,8 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
* The wrapper functions `first` and `last` return wrapped values when `n` is
|
||||
* provided, otherwise they return unwrapped values.
|
||||
*
|
||||
* Explicit chaining can be enabled by using the `_.chain` method.
|
||||
*
|
||||
* @name _
|
||||
* @constructor
|
||||
* @category Chaining
|
||||
|
@ -6104,9 +6102,12 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
|
||||
push.apply(args, arguments);
|
||||
var result = func.apply(object, args);
|
||||
return (value && typeof value == 'object' && value === result)
|
||||
? this
|
||||
: new ctor(result);
|
||||
if (value && typeof value == 'object' && value === result) {
|
||||
return this;
|
||||
}
|
||||
result = new ctor(result);
|
||||
result.__chain__ = this.__chain__;
|
||||
return result;
|
||||
};
|
||||
}
|
||||
});
|
||||
|
@ -6336,7 +6337,7 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
// and Laura Doktorova's doT.js
|
||||
// https://github.com/olado/doT
|
||||
var settings = lodash.templateSettings;
|
||||
text || (text = '');
|
||||
text = String(text || '');
|
||||
|
||||
// avoid missing dependencies when `iteratorTemplate` is not defined
|
||||
options = defaults({}, options, settings);
|
||||
|
@ -6508,7 +6509,8 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* Creates a `lodash` object that wraps the given value.
|
||||
* Creates a `lodash` object that wraps the given value with explicit
|
||||
* method chaining enabled.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
|
@ -6524,9 +6526,10 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
* ];
|
||||
*
|
||||
* var youngest = _.chain(stooges)
|
||||
* .sortBy(function(stooge) { return stooge.age; })
|
||||
* .sortBy('age')
|
||||
* .map(function(stooge) { return stooge.name + ' is ' + stooge.age; })
|
||||
* .first();
|
||||
* .first()
|
||||
* .value();
|
||||
* // => 'moe is 40'
|
||||
*/
|
||||
function chain(value) {
|
||||
|
@ -6563,7 +6566,7 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
}
|
||||
|
||||
/**
|
||||
* Enables method chaining on the wrapper object.
|
||||
* Enables explicit method chaining on the wrapper object.
|
||||
*
|
||||
* @name chain
|
||||
* @memberOf _
|
||||
|
@ -6571,11 +6574,21 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
* @returns {*} Returns the wrapper object.
|
||||
* @example
|
||||
*
|
||||
* var sum = _([1, 2, 3])
|
||||
* .chain()
|
||||
* .reduce(function(sum, num) { return sum + num; })
|
||||
* .value()
|
||||
* // => 6`
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* ];
|
||||
*
|
||||
* // without explicit chaining
|
||||
* _(stooges).first();
|
||||
* // => { 'name': 'moe', 'age': 40 }
|
||||
*
|
||||
* // with explicit chaining
|
||||
* _(stooges).chain()
|
||||
* .first()
|
||||
* .pick('age')
|
||||
* .value()
|
||||
* // => { 'age': 40 }
|
||||
*/
|
||||
function wrapperChain() {
|
||||
this.__chain__ = true;
|
||||
|
@ -6809,7 +6822,7 @@ require.register("lodash-lodash/dist/lodash.compat.js", function(exports, requir
|
|||
* @memberOf _
|
||||
* @type string
|
||||
*/
|
||||
lodash.VERSION = '2.2.0';
|
||||
lodash.VERSION = '2.2.1';
|
||||
|
||||
// add "Chaining" functions to the wrapper
|
||||
lodash.prototype.chain = wrapperChain;
|
||||
|
@ -28108,6 +28121,9 @@ validators = {
|
|||
};
|
||||
|
||||
module.exports = function(cb) {
|
||||
if (typeof window === 'undefined') {
|
||||
config = null;
|
||||
}
|
||||
if (config) {
|
||||
return cb(null, config);
|
||||
}
|
||||
|
@ -28115,16 +28131,9 @@ module.exports = function(cb) {
|
|||
if (!wait) {
|
||||
wait = true;
|
||||
return request.config(function(err, result) {
|
||||
var field, k, v, validator;
|
||||
if (err || !_.isObject(result)) {
|
||||
config = {};
|
||||
}
|
||||
for (k in defaults) {
|
||||
v = defaults[k];
|
||||
if (config[k] == null) {
|
||||
config[k] = v;
|
||||
}
|
||||
}
|
||||
var field, validator, _results;
|
||||
wait = false;
|
||||
config = _.defaults(result || {}, defaults);
|
||||
if (config.size_label) {
|
||||
config.size_label = new RegExp(config.size_label);
|
||||
} else {
|
||||
|
@ -28138,9 +28147,11 @@ module.exports = function(cb) {
|
|||
}
|
||||
}
|
||||
}
|
||||
return _.each(queue, function(cb) {
|
||||
return cb(null, config);
|
||||
});
|
||||
_results = [];
|
||||
while (queue.length) {
|
||||
_results.push(queue.pop()(null, config));
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
|
@ -33,6 +33,8 @@ validators =
|
|||
|
||||
# Get (& cache) configuration from the server.
|
||||
module.exports = (cb) ->
|
||||
# Skip cache in node.
|
||||
config = null if typeof window is 'undefined'
|
||||
# Have config?
|
||||
return cb null, config if config
|
||||
# Enqueue.
|
||||
|
@ -43,9 +45,12 @@ module.exports = (cb) ->
|
|||
wait = yes
|
||||
# Make the request.
|
||||
request.config (err, result) ->
|
||||
# The wait is over.
|
||||
wait = no
|
||||
|
||||
# We do not strictly require config files.
|
||||
config = _.defaults result, defaults
|
||||
|
||||
config = _.defaults result or {}, defaults
|
||||
|
||||
# RegExpify the size label?
|
||||
if config.size_label
|
||||
config.size_label = new RegExp config.size_label
|
||||
|
@ -58,5 +63,4 @@ module.exports = (cb) ->
|
|||
return cb "Config field `#{field}` misconfigured"
|
||||
|
||||
# Call back for each enqueued.
|
||||
_.each queue, (cb) ->
|
||||
cb null, config
|
||||
( queue.pop() null, config while queue.length )
|
|
@ -0,0 +1,81 @@
|
|||
#!/usr/bin/env coffee
|
||||
proxy = do require('proxyquire').noCallThru
|
||||
assert = require 'assert'
|
||||
path = require 'path'
|
||||
|
||||
req = {}
|
||||
|
||||
config = proxy path.resolve(__dirname, '../src/modules/config.coffee'),
|
||||
'./request': req
|
||||
|
||||
{ size_label } = require path.resolve __dirname, '../src/modules/regex.coffee'
|
||||
|
||||
module.exports =
|
||||
|
||||
'config - is null': (done) ->
|
||||
req.config = (cb) ->
|
||||
cb null, null
|
||||
|
||||
config (err, cfg) ->
|
||||
assert.ifError err
|
||||
assert.deepEqual cfg,
|
||||
'host': 'api.github.com'
|
||||
'protocol': 'https'
|
||||
'size_label': new RegExp size_label
|
||||
do done
|
||||
|
||||
'config - is empty': (done) ->
|
||||
req.config = (cb) ->
|
||||
cb null, {}
|
||||
|
||||
config (err, cfg) ->
|
||||
assert.ifError err
|
||||
assert.deepEqual cfg,
|
||||
'host': 'api.github.com'
|
||||
'protocol': 'https'
|
||||
'size_label': new RegExp size_label
|
||||
do done
|
||||
|
||||
'config - custom size label': (done) ->
|
||||
size = '/^taille (\d+)$/'
|
||||
|
||||
req.config = (cb) ->
|
||||
cb null, { 'size_label': size }
|
||||
|
||||
config (err, cfg) ->
|
||||
assert.ifError err
|
||||
assert.deepEqual cfg,
|
||||
'host': 'api.github.com'
|
||||
'protocol': 'https'
|
||||
'size_label': new RegExp size
|
||||
do done
|
||||
|
||||
'config - custom valid protocol': (done) ->
|
||||
req.config = (cb) ->
|
||||
cb null, { 'protocol': 'http' }
|
||||
|
||||
config (err, cfg) ->
|
||||
assert.ifError err
|
||||
assert.deepEqual cfg,
|
||||
'host': 'api.github.com'
|
||||
'protocol': 'http'
|
||||
'size_label': new RegExp size_label
|
||||
do done
|
||||
|
||||
'config - custom invalid protocol': (done) ->
|
||||
req.config = (cb) ->
|
||||
cb null, { 'protocol': 'nntp' }
|
||||
|
||||
config (err, cfg) ->
|
||||
assert.equal err, 'Config field `protocol` misconfigured'
|
||||
assert.equal cfg, null
|
||||
do done
|
||||
|
||||
'config - custom invalid off days': (done) ->
|
||||
req.config = (cb) ->
|
||||
cb null, { 'off_days': [ 0 ] }
|
||||
|
||||
config (err, cfg) ->
|
||||
assert.equal err, 'Config field `off_days` misconfigured'
|
||||
assert.equal cfg, null
|
||||
do done
|
Loading…
Reference in New Issue