manifold
v3.2.0
Published
Map regular expressions via strings to objects
Downloads
31
Maintainers
Readme
manifold
documentation - examples - install - todo - not a real horse
sample
var Manifold = require('manifold');
var app = new Manifold();
app.set('get /user/:page(\\d+)', {
parent: 'get /user',
handle: function getUserPage(){};
});
app.set('get /user', {
picture: function getPicture(){
// fetch that thing
},
render: function markup(){
// you know, some markup
}
});
app.get('get /user/10'); // =>
{
notFound: false,
path: 'get /user/10',
url: '/user/10',
match: 'get /user/10',
params: { _: [ 'page' ], page: '10' },
handle: [Function: getUserPage],
picture: [Function: getPicture],
render: [Function: markup]
}
documentation
The module.exports
a constructor
var Manifold = require('manifold');
that takes no arguments
var manifold = new Manifold();
In all the following node
refers to the object
mapping path to object.
manifold.set([path, props])
set a path to regex mapping for an object
arguments
path
type stringprops
type function or plainObjectwhen is a function it will be assigned to the
props.handle
when is a plainObject, all option properties are passed first to a
parser
if there is one and if not, that property is cloned and assigned to the node props
returns this
The path is taken as a regular expression using the parth module, which uses the usual conventions on for path to regexp parsing. So you know... interesting things can happen.
samples
manifold.set('get /user/:page(\\d+)', function getUserPage(){
// do stuff
});
manifold.get('get /user/10');
// =>
{
notFound: false,
path: 'get /user/10',
url: '/user/10',
match: 'get /user/10',
params: { _: [ 'page' ], page: '10' },
handle: [Function: getUserPage]
}
manifold.get([path, options, mod])
get an object matching the given path, clone it if necessary
arguments
path
, optional, type stringoptions
, optional, type object with all extra informationmod
, type object. If is a:- plainObject with property ref, the node found will not be cloned
- regular expression, are the props to skip while cloning
returns the object (cloned/by reference) node
found
In addition, if the node has a parent it will inherit its properties while cloning.
sample
manifold.set('get /user/:page', {
parent: 'get /user',
handle: function getUserPage(){};
});
manifold.set('get /user', {
picture: function getPicture(){
// fetch that thing
},
render: function markup(){
// you know, some markup
}
});
manifold.get('get /user/10'); // =>
{
notFound: false,
path: 'get /user/10',
url: '/user/10',
match: 'get /user/10',
params: { _: [ 'page' ], page: '10' },
handle: [Function: getUserPage],
picture: [Function: getPicture],
render: [Function: markup]
}
instance properties
manifold.regex
: regexes are stored heremanifold.store
: key value store with all of the nodes stored
why
I Need it for the runtime module ;)
The project name is an homage to the concept of manifold. Beautiful creature of Math and Physics thought. BUT, this can't be considered the real thing. That is: this is not a manifold. I'd wish!
install
With npm
npm install manifold --save
examples
Run the example.js
file.
test
$ npm test
➜ manifold (master) ✓ npm test
manifold
sample
✓ data creation should not fail
✓ sample data should be random
parse
✓ add test data
✓ should parse properties when one sets them
✓ should support objects for setting parsers
rootNode
✓ add test data
✓ should have properties ({ref: true})
✓ should have properties ({ref: true})
✓ should not have properties ({ref: true})
✓ should have properties ({ref: true})
parent
✓ add test data
✓ should have children added after parent is set
✓ should have the same parent by reference
✓ property should not be enumerable after overwrite
children
✓ add test data
✓ should support single object as input
✓ should support array as input
✓ should have parent added after children were set
✓ should not be enumerable after overwrite
✓ should inherit from parent when
20 passing (35ms)