Add rest middleware

This commit is contained in:
Ritchie 2013-05-24 07:59:59 -07:00
parent 787a6bcf43
commit 22a5db7b53
7 changed files with 1204 additions and 0 deletions

53
lib/middleware/rest.js Normal file
View File

@ -0,0 +1,53 @@
/**
* Module dependencies.
*/
var asteroid = require('../asteroid');
var RemoteObjects = require('sl-remoting')
/**
* Export the middleware.
*/
module.exports = rest;
/**
* Build a temp app for mounting resources.
*/
function rest() {
return function (req, res, next) {
var app = req.app;
var remotes = app.remotes();
// get models
var models = app.models();
// export the models as remote objects
remotes.exports = models;
Object.keys(models).forEach(function (name) {
var Model = models[name];
Model.sharedCtor = function (id, fn) {
// TODO this should be agnostic of behavior
Model.find(id, fn);
}
Model.sharedCtor.accepts = {arg: 'id', type: 'any'};
});
var handler = remotes.handler('rest');
if(req.url === '/routes') {
res.send(handler.adapter.allRoutes());
} else if(req.url === '/models') {
return res.send(remotes.toJSON());
} else {
handler(req, res, next);
}
}
}

4
node_modules/inflection/.npmignore generated vendored Normal file
View File

@ -0,0 +1,4 @@
support
test
examples
*.sock

65
node_modules/inflection/History.md generated vendored Normal file
View File

@ -0,0 +1,65 @@
# History
## 1.2.5 / 2013-01-09
- [refactoring] Allow all caps strings to be returned from underscore
## 1.2.4 / 2013-01-06
- [bug fix] window obj does not have `call` method
## 1.2.3 / 2012-08-02
- [bug fix] Singularize `status` produces `statu`
- [update packages] should->v1.1.0
## 1.2.2 / 2012-07-23
- [update packages] node.flow->v1.1.3 & should->v1.0.0
## 1.2.1 / 2012-06-22
- [bug fix] Singularize `address` produces `addres`
## 1.2.0 / 2012-04-10
- [new feature] Browser support
- [update packages] node.flow->v1.1.1
## 1.1.1 / 2012-02-13
- [update packages] node.flow->v1.1.0
## 1.1.0 / 2012-02-13
- [update packages] node.flow->v1.0.0
- [refactoring] Read version number from package.json
## 1.0.0 / 2012-02-08
- Remove make file
- Add pluralize rules
- Add pluralize tests
- [refactoring] Use object.jey instead of for in
## 0.0.1 / 2012-01-16
- Initial release

413
node_modules/inflection/Readme.md generated vendored Normal file
View File

@ -0,0 +1,413 @@
# inflection
A port of inflection-js to node.js module
## Description
[inflection-js](http://code.google.com/p/inflection-js/) is a port of the functionality from Ruby on Rails' Active Support Inflection classes into Javascript. `inflection` is a port of `inflection-js` to node.js npm package. Instead of [extending JavaScript native](http://wonko.com/post/extending-javascript-natives) String object like `inflection-js` does, `inflection` separate the methods to a independent package to avoid unexpected behaviors.
## Requires
Checkout `package.json` for dependencies.
## Installation
Install inflection through npm
npm install inflection
## API
- inflection.indexOf( arr, item, fromIndex, compareFunc );
- inflection.pluralize( str, plural );
- inflection.singularize( str, singular );
- inflection.camelize( str, lowFirstLetter );
- inflection.underscore( str, allUpperCase );
- inflection.humanize( str, lowFirstLetter );
- inflection.capitalize( str );
- inflection.dasherize( str );
- inflection.titleize( str );
- inflection.demodulize( str );
- inflection.tableize( str );
- inflection.classify( str );
- inflection.foreign_key( str, dropIdUbar );
- inflection.ordinalize( str );
## Usage
> Require the module before using
var inflection = require( 'inflection' );
### inflection.indexOf( arr, item, fromIndex, compareFunc );
This lets us detect if an Array contains a given element.
#### Arguments
> arr
type: Array
desc: The subject array.
> item
type: Object
desc: Object to locate in the Array.
> fromIndex
type: Number
desc: Starts checking from this position in the Array.(optional)
> compareFunc
type: Function
desc: Function used to compare Array item vs passed item.(optional)
#### Example code
var inflection = require( 'inflection' );
inflection.indexOf([ 'hi','there' ], 'guys' ); // === -1
inflection.indexOf([ 'hi','there' ], 'hi' ); // === 0
### inflection.pluralize( str, plural );
This function adds pluralization support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
> plural
type: String
desc: Overrides normal output with said String.(optional)
#### Example code
var inflection = require( 'inflection' );
inflection.pluralize( 'person' ); // === 'people'
inflection.pluralize( 'octopus' ); // === "octopi"
inflection.pluralize( 'Hat' ); // === 'Hats'
inflection.pluralize( 'person', 'guys' ); // === 'guys'
### inflection.singularize( str, singular );
This function adds singularization support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
> singular
type: String
desc: Overrides normal output with said String.(optional)
#### Example code
var inflection = require( 'inflection' );
inflection.singularize( 'people' ); // === 'person'
inflection.singularize( 'octopi' ); // === "octopus"
inflection.singularize( 'Hats' ); // === 'Hat'
inflection.singularize( 'guys', 'person' ); // === 'person'
### inflection.camelize( str, lowFirstLetter );
This function adds camelization support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
> lowFirstLetter
type: Boolean
desc: Default is to capitalize the first letter of the results. Passing true will lowercase it. (optional)
#### Example code
var inflection = require( 'inflection' );
inflection.camelize( 'message_properties' ); // === 'MessageProperties'
inflection.camelize( 'message_properties', true ); // === 'messageProperties'
### inflection.underscore( str, allUpperCase );
This function adds underscore support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
> allUpperCase
type: Boolean
desc: Default is to lowercase and add underscore prefix
#### Example code
var inflection = require( 'inflection' );
inflection.underscore( 'MessageProperties' ); // === 'message_properties'
inflection.underscore( 'messageProperties' ); // === 'message_properties'
inflection.underscore( 'MP' ); // === 'm_p'
inflection.underscore( 'MP', true ); // === 'MP'
### inflection.humanize( str, lowFirstLetter );
This function adds humanize support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
> lowFirstLetter
type: Boolean
desc: Default is to capitalize the first letter of the results. Passing true will lowercase it. (optional)
#### Example code
var inflection = require( 'inflection' );
inflection.humanize( 'message_properties' ); // === 'Message properties'
inflection.humanize( 'message_properties', true ); // === 'message properties'
### inflection.capitalize( str );
This function adds capitalization support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
#### Example code
var inflection = require( 'inflection' );
inflection.capitalize( 'message_properties' ); // === 'Message_properties'
inflection.capitalize( 'message properties', true ); // === 'Message properties'
### inflection.dasherize( str );
This function adds dasherization support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
#### Example code
var inflection = require( 'inflection' );
inflection.dasherize( 'message_properties' ); // === 'message-properties'
inflection.dasherize( 'Message Properties' ); // === 'Message-Properties'
### inflection.titleize( str );
This function adds titleize support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
#### Example code
var inflection = require( 'inflection' );
inflection.titleize( 'message_properties' ); // === 'Message Properties'
inflection.titleize( 'message properties to keep' ); // === 'Message Properties to Keep'
### inflection.demodulize( str );
This function adds demodulize support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
#### Example code
var inflection = require( 'inflection' );
inflection.demodulize( 'Message::Bus::Properties' ); // === 'Properties'
### inflection.tableize( str );
This function adds tableize support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
#### Example code
var inflection = require( 'inflection' );
inflection.tableize( 'MessageBusProperty' ); // === 'message_bus_properties'
### inflection.classify( str );
This function adds classification support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
#### Example code
var inflection = require( 'inflection' );
inflection.classify( 'message_bus_properties' ); // === 'MessageBusProperty'
### inflection.foreign_key( str, dropIdUbar );
This function adds foreign key support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
> lowFirstLetter
type: Boolean
desc: Default is to seperate id with an underbar at the end of the class name, you can pass true to skip it.(optional)
#### Example code
var inflection = require( 'inflection' );
inflection.foreign_key( 'MessageBusProperty' ); // === 'message_bus_property_id'
inflection.foreign_key( 'MessageBusProperty', true ); // === 'message_bus_propertyid'
### inflection.ordinalize( str );
This function adds ordinalize support to every String object.
#### Arguments
> str
type: String
desc: The subject string.
#### Example code
var inflection = require( 'inflection' );
inflection.ordinalize( 'the 1 pitch' ); // === 'the 1st pitch'
## Credit
- Ryan Schuft <ryan.schuft@gmail.com>
- Lance Pollard <lancejpollard@gmail.com> (Browser support)
- brandondewitt
## License
(The MIT License)
Copyright (c) 2011 dreamerslab &lt;ben@dreamerslab.com&gt;
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

601
node_modules/inflection/lib/inflection.js generated vendored Normal file
View File

@ -0,0 +1,601 @@
/*!
* inflection
* Copyright(c) 2011 Ben Lin <ben@dreamerslab.com>
* MIT Licensed
*
* @fileoverview
* A port of inflection-js to node.js module.
*/
( function ( root ){
/**
* @description This is a list of nouns that use the same form for both singular and plural.
* This list should remain entirely in lower case to correctly match Strings.
* @private
*/
var uncountable_words = [
'equipment', 'information', 'rice', 'money', 'species',
'series', 'fish', 'sheep', 'moose', 'deer', 'news'
];
/**
* @description These rules translate from the singular form of a noun to its plural form.
* @private
*/
var plural_rules = [
// do not replace if its already a plural word
[ new RegExp( '(m)en$', 'gi' )],
[ new RegExp( '(pe)ople$', 'gi' )],
[ new RegExp( '(child)ren$', 'gi' )],
[ new RegExp( '([ti])a$', 'gi' )],
[ new RegExp( '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$','gi' )],
[ new RegExp( '(hive)s$', 'gi' )],
[ new RegExp( '(tive)s$', 'gi' )],
[ new RegExp( '(curve)s$', 'gi' )],
[ new RegExp( '([lr])ves$', 'gi' )],
[ new RegExp( '([^fo])ves$', 'gi' )],
[ new RegExp( '([^aeiouy]|qu)ies$', 'gi' )],
[ new RegExp( '(s)eries$', 'gi' )],
[ new RegExp( '(m)ovies$', 'gi' )],
[ new RegExp( '(x|ch|ss|sh)es$', 'gi' )],
[ new RegExp( '([m|l])ice$', 'gi' )],
[ new RegExp( '(bus)es$', 'gi' )],
[ new RegExp( '(o)es$', 'gi' )],
[ new RegExp( '(shoe)s$', 'gi' )],
[ new RegExp( '(cris|ax|test)es$', 'gi' )],
[ new RegExp( '(octop|vir)i$', 'gi' )],
[ new RegExp( '(alias|status)es$', 'gi' )],
[ new RegExp( '^(ox)en', 'gi' )],
[ new RegExp( '(vert|ind)ices$', 'gi' )],
[ new RegExp( '(matr)ices$', 'gi' )],
[ new RegExp( '(quiz)zes$', 'gi' )],
// original rule
[ new RegExp( '(m)an$', 'gi' ), '$1en' ],
[ new RegExp( '(pe)rson$', 'gi' ), '$1ople' ],
[ new RegExp( '(child)$', 'gi' ), '$1ren' ],
[ new RegExp( '^(ox)$', 'gi' ), '$1en' ],
[ new RegExp( '(ax|test)is$', 'gi' ), '$1es' ],
[ new RegExp( '(octop|vir)us$', 'gi' ), '$1i' ],
[ new RegExp( '(alias|status)$', 'gi' ), '$1es' ],
[ new RegExp( '(bu)s$', 'gi' ), '$1ses' ],
[ new RegExp( '(buffal|tomat|potat)o$', 'gi' ), '$1oes' ],
[ new RegExp( '([ti])um$', 'gi' ), '$1a' ],
[ new RegExp( 'sis$', 'gi' ), 'ses' ],
[ new RegExp( '(?:([^f])fe|([lr])f)$', 'gi' ), '$1$2ves' ],
[ new RegExp( '(hive)$', 'gi' ), '$1s' ],
[ new RegExp( '([^aeiouy]|qu)y$', 'gi' ), '$1ies' ],
[ new RegExp( '(x|ch|ss|sh)$', 'gi' ), '$1es' ],
[ new RegExp( '(matr|vert|ind)ix|ex$', 'gi' ), '$1ices' ],
[ new RegExp( '([m|l])ouse$', 'gi' ), '$1ice' ],
[ new RegExp( '(quiz)$', 'gi' ), '$1zes' ],
[ new RegExp( 's$', 'gi' ), 's' ],
[ new RegExp( '$', 'gi' ), 's' ]
];
/**
* @description These rules translate from the plural form of a noun to its singular form.
* @private
*/
var singular_rules = [
// do not replace if its already a singular word
[ new RegExp( '(m)an$', 'gi' )],
[ new RegExp( '(pe)rson$', 'gi' )],
[ new RegExp( '(child)$', 'gi' )],
[ new RegExp( '^(ox)$', 'gi' )],
[ new RegExp( '(ax|test)is$', 'gi' )],
[ new RegExp( '(octop|vir)us$', 'gi' )],
[ new RegExp( '(alias|status)$', 'gi' )],
[ new RegExp( '(bu)s$', 'gi' )],
[ new RegExp( '(buffal|tomat|potat)o$', 'gi' )],
[ new RegExp( '([ti])um$', 'gi' )],
[ new RegExp( 'sis$', 'gi' )],
[ new RegExp( '(?:([^f])fe|([lr])f)$', 'gi' )],
[ new RegExp( '(hive)$', 'gi' )],
[ new RegExp( '([^aeiouy]|qu)y$', 'gi' )],
[ new RegExp( '(x|ch|ss|sh)$', 'gi' )],
[ new RegExp( '(matr|vert|ind)ix|ex$', 'gi' )],
[ new RegExp( '([m|l])ouse$', 'gi' )],
[ new RegExp( '(quiz)$', 'gi' )],
// original rule
[ new RegExp( '(m)en$', 'gi' ), '$1an' ],
[ new RegExp( '(pe)ople$', 'gi' ), '$1rson' ],
[ new RegExp( '(child)ren$', 'gi' ), '$1' ],
[ new RegExp( '([ti])a$', 'gi' ), '$1um' ],
[ new RegExp( '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$','gi' ), '$1$2sis' ],
[ new RegExp( '(hive)s$', 'gi' ), '$1' ],
[ new RegExp( '(tive)s$', 'gi' ), '$1' ],
[ new RegExp( '(curve)s$', 'gi' ), '$1' ],
[ new RegExp( '([lr])ves$', 'gi' ), '$1f' ],
[ new RegExp( '([^fo])ves$', 'gi' ), '$1fe' ],
[ new RegExp( '([^aeiouy]|qu)ies$', 'gi' ), '$1y' ],
[ new RegExp( '(s)eries$', 'gi' ), '$1eries' ],
[ new RegExp( '(m)ovies$', 'gi' ), '$1ovie' ],
[ new RegExp( '(x|ch|ss|sh)es$', 'gi' ), '$1' ],
[ new RegExp( '([m|l])ice$', 'gi' ), '$1ouse' ],
[ new RegExp( '(bus)es$', 'gi' ), '$1' ],
[ new RegExp( '(o)es$', 'gi' ), '$1' ],
[ new RegExp( '(shoe)s$', 'gi' ), '$1' ],
[ new RegExp( '(cris|ax|test)es$', 'gi' ), '$1is' ],
[ new RegExp( '(octop|vir)i$', 'gi' ), '$1us' ],
[ new RegExp( '(alias|status)es$', 'gi' ), '$1' ],
[ new RegExp( '^(ox)en', 'gi' ), '$1' ],
[ new RegExp( '(vert|ind)ices$', 'gi' ), '$1ex' ],
[ new RegExp( '(matr)ices$', 'gi' ), '$1ix' ],
[ new RegExp( '(quiz)zes$', 'gi' ), '$1' ],
[ new RegExp( 'ss$', 'gi' ), 'ss' ],
[ new RegExp( 's$', 'gi' ), '' ]
];
/**
* @description This is a list of words that should not be capitalized for title case.
* @private
*/
var non_titlecased_words = [
'and', 'or', 'nor', 'a', 'an', 'the', 'so', 'but', 'to', 'of', 'at','by',
'from', 'into', 'on', 'onto', 'off', 'out', 'in', 'over', 'with', 'for'
];
/**
* @description These are regular expressions used for converting between String formats.
* @private
*/
var id_suffix = new RegExp( '(_ids|_id)$', 'g' );
var underbar = new RegExp( '_', 'g' );
var space_or_underbar = new RegExp( '[\ _]', 'g' );
var uppercase = new RegExp( '([A-Z])', 'g' );
var underbar_prefix = new RegExp( '^_' );
var inflector = {
/**
* A helper method that applies rules based replacement to a String.
* @private
* @function
* @param {String} str String to modify and return based on the passed rules.
* @param {Array: [RegExp, String]} rules Regexp to match paired with String to use for replacement
* @param {Array: [String]} skip Strings to skip if they match
* @param {String} override String to return as though this method succeeded (used to conform to APIs)
* @returns {String} Return passed String modified by passed rules.
* @example
*
* this._apply_rules( 'cows', singular_rules ); // === 'cow'
*/
_apply_rules : function( str, rules, skip, override ){
if( override ){
str = override;
}else{
var ignore = ( this.indexOf( skip, str.toLowerCase()) > -1 );
if( !ignore ){
var i = 0;
var j = rules.length;
for( ; i < j; i++ ){
if( str.match( rules[ i ][ 0 ])){
if( rules[ i ][ 1 ] !== undefined ){
str = str.replace( rules[ i ][ 0 ], rules[ i ][ 1 ]);
}
break;
}
}
}
}
return str;
},
/**
* This lets us detect if an Array contains a given element.
* @public
* @function
* @param {Array} arr The subject array.
* @param {Object} item Object to locate in the Array.
* @param {Number} fromIndex Starts checking from this position in the Array.(optional)
* @param {Function} compareFunc Function used to compare Array item vs passed item.(optional)
* @returns {Number} Return index position in the Array of the passed item.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.indexOf([ 'hi','there' ], 'guys' ); // === -1
* inflection.indexOf([ 'hi','there' ], 'hi' ); // === 0
*/
indexOf : function( arr, item, fromIndex, compareFunc ){
if( !fromIndex ){
fromIndex = -1;
}
var index = -1;
var i = fromIndex;
var j = arr.length;
for( ; i < j; i++ ){
if( arr[ i ] === item || compareFunc && compareFunc( arr[ i ], item )){
index = i;
break;
}
}
return index;
},
/**
* This function adds pluralization support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @param {String} plural Overrides normal output with said String.(optional)
* @returns {String} Singular English language nouns are returned in plural form.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.pluralize( 'person' ); // === 'people'
* inflection.pluralize( 'octopus' ); // === "octopi"
* inflection.pluralize( 'Hat' ); // === 'Hats'
* inflection.pluralize( 'person', 'guys' ); // === 'guys'
*/
pluralize : function ( str, plural ){
return this._apply_rules( str, plural_rules, uncountable_words, plural );
},
/**
* This function adds singularization support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @param {String} singular Overrides normal output with said String.(optional)
* @returns {String} Plural English language nouns are returned in singular form.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.singularize( 'people' ); // === 'person'
* inflection.singularize( 'octopi' ); // === "octopus"
* inflection.singularize( 'Hats' ); // === 'Hat'
* inflection.singularize( 'guys', 'person' ); // === 'person'
*/
singularize : function ( str, singular ){
return this._apply_rules( str, singular_rules, uncountable_words, singular );
},
/**
* This function adds camelization support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @param {Boolean} lowFirstLetter Default is to capitalize the first letter of the results.(optional)
* Passing true will lowercase it.
* @returns {String} Lower case underscored words will be returned in camel case.
* additionally '/' is translated to '::'
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.camelize( 'message_properties' ); // === 'MessageProperties'
* inflection.camelize( 'message_properties', true ); // === 'messageProperties'
*/
camelize : function ( str, lowFirstLetter ){
var str_path = str.toLowerCase().split( '/' );
var i = 0;
var j = str_path.length;
for( ; i < j; i++ ){
var str_arr = str_path[ i ].split( '_' );
var initX = (( lowFirstLetter && i + 1 === j ) ? ( 1 ) : ( 0 ));
var k = initX;
var l = str_arr.length;
for( ; k < l; k++ ){
str_arr[ k ] = str_arr[ k ].charAt( 0 ).toUpperCase() + str_arr[ k ].substring( 1 );
}
str_path[ i ] = str_arr.join( '' );
}
return str_path.join( '::' );
},
/**
* This function adds underscore support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @param {Boolean} allUpperCase Default is to lowercase and add underscore prefix.(optional)
* Passing true will return as entered.
* @returns {String} Camel cased words are returned as lower cased and underscored.
* additionally '::' is translated to '/'.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.underscore( 'MessageProperties' ); // === 'message_properties'
* inflection.underscore( 'messageProperties' ); // === 'message_properties'
* inflection.underscore( 'MP', true ); // === 'MP'
*/
underscore : function ( str, allUpperCase ){
if( allUpperCase && str === str.toUpperCase()) return str;
var str_path = str.split( '::' );
var i = 0;
var j = str_path.length;
for( ; i < j; i++ ){
str_path[ i ] = str_path[ i ].replace( uppercase, '_$1' );
str_path[ i ] = str_path[ i ].replace( underbar_prefix, '' );
}
return str_path.join( '/' ).toLowerCase();
},
/**
* This function adds humanize support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @param {Boolean} lowFirstLetter Default is to capitalize the first letter of the results.(optional)
* Passing true will lowercase it.
* @returns {String} Lower case underscored words will be returned in humanized form.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.humanize( 'message_properties' ); // === 'Message properties'
* inflection.humanize( 'message_properties', true ); // === 'message properties'
*/
humanize : function( str, lowFirstLetter ){
str = str.toLowerCase();
str = str.replace( id_suffix, '' );
str = str.replace( underbar, ' ' );
if( !lowFirstLetter ){
str = this.capitalize( str );
}
return str;
},
/**
* This function adds capitalization support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @returns {String} All characters will be lower case and the first will be upper.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.capitalize( 'message_properties' ); // === 'Message_properties'
* inflection.capitalize( 'message properties', true ); // === 'Message properties'
*/
capitalize : function ( str ){
str = str.toLowerCase();
return str.substring( 0, 1 ).toUpperCase() + str.substring( 1 );
},
/**
* This function adds dasherization support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @returns {String} Replaces all spaces or underbars with dashes.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.dasherize( 'message_properties' ); // === 'message-properties'
* inflection.dasherize( 'Message Properties' ); // === 'Message-Properties'
*/
dasherize : function ( str ){
return str.replace( space_or_underbar, '-' );
},
/**
* This function adds titleize support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @returns {String} Capitalizes words as you would for a book title.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.titleize( 'message_properties' ); // === 'Message Properties'
* inflection.titleize( 'message properties to keep' ); // === 'Message Properties to Keep'
*/
titleize : function ( str ){
str = str.toLowerCase().replace( underbar, ' ');
var str_arr = str.split(' ');
var i = 0;
var j = str_arr.length;
for( ; i < j; i++ ){
var d = str_arr[ i ].split( '-' );
var k = 0;
var l = d.length;
for( ; k < l; k++){
if( this.indexOf( non_titlecased_words, d[ k ].toLowerCase()) < 0 ){
d[ k ] = this.capitalize( d[ k ]);
}
}
str_arr[ i ] = d.join( '-' );
}
str = str_arr.join( ' ' );
str = str.substring( 0, 1 ).toUpperCase() + str.substring( 1 );
return str;
},
/**
* This function adds demodulize support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @returns {String} Removes module names leaving only class names.(Ruby style)
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.demodulize( 'Message::Bus::Properties' ); // === 'Properties'
*/
demodulize : function ( str ){
var str_arr = str.split( '::' );
return str_arr[ str_arr.length - 1 ];
},
/**
* This function adds tableize support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @returns {String} Return camel cased words into their underscored plural form.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.tableize( 'MessageBusProperty' ); // === 'message_bus_properties'
*/
tableize : function ( str ){
str = this.underscore( str );
str = this.pluralize( str );
return str;
},
/**
* This function adds classification support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @returns {String} Underscored plural nouns become the camel cased singular form.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.classify( 'message_bus_properties' ); // === 'MessageBusProperty'
*/
classify : function ( str ){
str = this.camelize( str );
str = this.singularize( str );
return str;
},
/**
* This function adds foreign key support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @param {Boolean} dropIdUbar Default is to seperate id with an underbar at the end of the class name,
you can pass true to skip it.(optional)
* @returns {String} Underscored plural nouns become the camel cased singular form.
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.foreign_key( 'MessageBusProperty' ); // === 'message_bus_property_id'
* inflection.foreign_key( 'MessageBusProperty', true ); // === 'message_bus_propertyid'
*/
foreign_key : function( str, dropIdUbar ){
str = this.demodulize( str );
str = this.underscore( str ) + (( dropIdUbar ) ? ( '' ) : ( '_' )) + 'id';
return str;
},
/**
* This function adds ordinalize support to every String object.
* @public
* @function
* @param {String} str The subject string.
* @returns {String} Return all found numbers their sequence like "22nd".
* @example
*
* var inflection = require( 'inflection' );
*
* inflection.ordinalize( 'the 1 pitch' ); // === 'the 1st pitch'
*/
ordinalize : function ( str ){
var str_arr = str.split(' ');
var i = 0;
var j = str_arr.length;
for( ; i < j; i++ ){
var k = parseInt( str_arr[ i ], 10 );
if( !isNaN( k )){
var ltd = str_arr[ i ].substring( str_arr[ i ].length - 2 );
var ld = str_arr[ i ].substring( str_arr[ i ].length - 1 );
var suf = 'th';
if( ltd != '11' && ltd != '12' && ltd != '13' ){
if( ld === '1' ){
suf = 'st';
}else if( ld === '2' ){
suf = 'nd';
}else if( ld === '3' ){
suf = 'rd';
}
}
str_arr[ i ] += suf;
}
}
return str_arr.join( ' ' );
}
};
if( typeof exports === 'undefined' ) return root.inflection = inflector;
/**
* @public
*/
inflector.version = JSON.parse(
require( 'fs' ).readFileSync( __dirname + '/../package.json', 'utf8' )
).version;
/**
* Exports module.
*/
module.exports = inflector;
})( this );

67
node_modules/inflection/package.json generated vendored Normal file

File diff suppressed because one or more lines are too long

1
node_modules/sl-remoting generated vendored Symbolic link
View File

@ -0,0 +1 @@
/usr/local/lib/node_modules/sl-remoting