https://github.com/stringparser/manifold
Map regular expressions via strings to objects
https://github.com/stringparser/manifold
Last synced: 2 months ago
JSON representation
Map regular expressions via strings to objects
- Host: GitHub
- URL: https://github.com/stringparser/manifold
- Owner: stringparser
- License: other
- Created: 2014-12-03T00:30:53.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2015-12-03T19:19:06.000Z (about 10 years ago)
- Last Synced: 2025-10-17T07:14:35.358Z (3 months ago)
- Language: JavaScript
- Homepage:
- Size: 131 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## manifold [![NPM version][badge-version]][x-npm]
[documentation](#documentation) -
[examples](#examples) -
[install](#install) -
[todo](#todo) -
[not a real horse](#why)
[![build][badge-build]][x-travis]
## sample
```js
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
````js
var Manifold = require('manifold');
````
that takes no arguments
```js
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 string
- `props` type function or plainObject
- when is a function it will be assigned to the `props.handle`
- when is a plainObject its properties is cloned and assigned to the node props
_returns_ this
The path is taken as a regular expression using the [parth](http://github.com/stringparser/parth) module, which uses the usual conventions on for path to regexp parsing. So you know... interesting things can happen.
_samples_
```js
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 string
- `options`, optional, type object with all extra information
- `mod`, 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_
```js
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 here
- `manifold.store`: key value store with all of the nodes stored
## why
I Need it for the [runtime](https://github.com/stringparser/runtime) module ;)
The project name is an homage to the concept of [manifold](http://en.wikipedia.org/wiki/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](https://npmjs.org)
npm install manifold --save
### examples
Run the [`example.js`](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)
```
### license
[
](http://opensource.org/licenses/MIT)
[x-npm]: https://npmjs.org/package/manifold
[x-travis]: https://travis-ci.org/stringparser/manifold/builds
[badge-build]: http://img.shields.io/travis/stringparser/manifold/master.svg?style=flat-square
[badge-version]: http://img.shields.io/npm/v/manifold.svg?style=flat-square