Skip to content

Commit

Permalink
Move Func in its own file
Browse files Browse the repository at this point in the history
  • Loading branch information
Marsup committed Oct 7, 2017
1 parent 27e340b commit 15810d6
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 70 deletions.
17 changes: 9 additions & 8 deletions lib/index.js
Expand Up @@ -18,6 +18,7 @@ const internals = {
boolean: require('./types/boolean'),
binary: require('./types/binary'),
date: require('./types/date'),
func: require('./types/func'),
number: require('./types/number'),
object: require('./types/object'),
string: require('./types/string')
Expand Down Expand Up @@ -87,7 +88,7 @@ internals.root = function () {

Hoek.assert(arguments.length === 0, 'Joi.func() does not allow arguments.');

return internals.applyDefaults.call(this, internals.object._func());
return internals.applyDefaults.call(this, internals.func);
};

root.number = function () {
Expand Down Expand Up @@ -404,23 +405,23 @@ internals.root = function () {
root.extensionSchema = internals.object.keys({
base: internals.object.type(Any, 'Joi object'),
name: internals.string.required(),
coerce: internals.object._func().arity(3),
pre: internals.object._func().arity(3),
coerce: internals.func.arity(3),
pre: internals.func.arity(3),
language: internals.object,
describe: internals.object._func().arity(1),
describe: internals.func.arity(1),
rules: internals.array.items(internals.object.keys({
name: internals.string.required(),
setup: internals.object._func().arity(1),
validate: internals.object._func().arity(4),
setup: internals.func.arity(1),
validate: internals.func.arity(4),
params: [
internals.object.pattern(/.*/, internals.object.type(Any, 'Joi object')),
internals.object.type(internals.object.constructor, 'Joi object')
],
description: [internals.string, internals.object._func().arity(1)]
description: [internals.string, internals.func.arity(1)]
}).or('setup', 'validate'))
}).strict();

root.extensionsSchema = internals.array.items([internals.object, internals.object._func().arity(1)]).strict();
root.extensionsSchema = internals.array.items([internals.object, internals.func.arity(1)]).strict();

root.version = require('../package.json').version;

Expand Down
79 changes: 79 additions & 0 deletions lib/types/func/index.js
@@ -0,0 +1,79 @@
'use strict';

// Load modules

const Hoek = require('hoek');
const ObjectType = require('../object');
const Ref = require('../../ref');


// Declare internals

const internals = {};


internals.Func = class extends ObjectType.constructor {

constructor() {

super();
this._flags.func = true;
}

arity(n) {

Hoek.assert(Number.isSafeInteger(n) && n >= 0, 'n must be a positive integer');

return this._test('arity', n, function (value, state, options) {

if (value.length === n) {
return value;
}

return this.createError('function.arity', { n }, state, options);
});
}

minArity(n) {

Hoek.assert(Number.isSafeInteger(n) && n > 0, 'n must be a strict positive integer');

return this._test('minArity', n, function (value, state, options) {

if (value.length >= n) {
return value;
}

return this.createError('function.minArity', { n }, state, options);
});
}

maxArity(n) {

Hoek.assert(Number.isSafeInteger(n) && n >= 0, 'n must be a positive integer');

return this._test('maxArity', n, function (value, state, options) {

if (value.length <= n) {
return value;
}

return this.createError('function.maxArity', { n }, state, options);
});
}


ref() {

return this._test('ref', null, function (value, state, options) {

if (Ref.isRef(value)) {
return value;
}

return this.createError('function.ref', null, state, options);
});
}
};

module.exports = new internals.Func();
62 changes: 0 additions & 62 deletions lib/types/object/index.js
Expand Up @@ -7,7 +7,6 @@ const Topo = require('topo');
const Any = require('../any');
const Errors = require('../../errors');
const Cast = require('../../cast');
const Ref = require('../../ref');


// Declare internals
Expand Down Expand Up @@ -264,13 +263,6 @@ internals.Object = class extends Any {
return finish();
}

_func() {

const obj = this.clone();
obj._flags.func = true;
return obj;
}

keys(schema) {

Hoek.assert(schema === null || schema === undefined || typeof schema === 'object', 'Object schema must be a valid object');
Expand Down Expand Up @@ -352,48 +344,6 @@ internals.Object = class extends Any {
});
}

arity(n) {

Hoek.assert(Number.isSafeInteger(n) && n >= 0, 'n must be a positive integer');

return this._test('arity', n, function (value, state, options) {

if (value.length === n) {
return value;
}

return this.createError('function.arity', { n }, state, options);
});
}

minArity(n) {

Hoek.assert(Number.isSafeInteger(n) && n > 0, 'n must be a strict positive integer');

return this._test('minArity', n, function (value, state, options) {

if (value.length >= n) {
return value;
}

return this.createError('function.minArity', { n }, state, options);
});
}

maxArity(n) {

Hoek.assert(Number.isSafeInteger(n) && n >= 0, 'n must be a positive integer');

return this._test('maxArity', n, function (value, state, options) {

if (value.length <= n) {
return value;
}

return this.createError('function.maxArity', { n }, state, options);
});
}

min(limit) {

Hoek.assert(Number.isSafeInteger(limit) && limit >= 0, 'limit must be a positive integer');
Expand Down Expand Up @@ -685,18 +635,6 @@ internals.Object = class extends Any {
return this.createError('object.type', { type: typeData.name }, state, options);
});
}

ref() {

return this._test('ref', null, function (value, state, options) {

if (Ref.isRef(value)) {
return value;
}

return this.createError('function.ref', null, state, options);
});
}
};

internals.safeParse = function (value) {
Expand Down

0 comments on commit 15810d6

Please sign in to comment.