lodash-inflection
Version:
ActiveSupport::Inflector, for lodash!
219 lines (141 loc) • 6.3 kB
Markdown
## lodash-inflection
> [![NPM version][npm-badge]][npm]
> [![Build Status][travis-badge]][travis-ci]
> [![Coverage Status][coveralls-badge]][coveralls]
This is a fork of [Jeremy Ruppel underscore.inflection](https://github.com/jeremyruppel/underscore.inflection) for lodash.
**Another javascript inflector?!**
I'll be the first to say it; this isn't the first port of [ActiveSupport::Inflector][activesupport] to js. Not by a long shot. But I'll definitely take [lodash][lodash] mixins over extending String.prototype or other clunky implementations any day.
Also, this one has tests!
Usage with CommonJS
-------------------
```
npm install lodash
npm install lodash-inflection
```
```js
var _ = require("lodash");
_.mixin(require("lodash-inflection"));
```
Inflections
-----------
The methods listed below are the ones you'll be using 99% of the time.
### pluralize
**Signature:** `_.pluralize(word)`
`pluralize` pluralizes the string passed to it.
// functional style
_.pluralize('word'); // => 'words'
// object-oriented style
_('word').pluralize(); // => 'words'
It also can accept a number as the second parameter. If a number is provided, it will pluralize the word to match the number.
_('word').pluralize(0); // => 'words'
_('word').pluralize(1); // => 'word'
_('word').pluralize(1.5); // => 'words'
Optionally, you can pass `true` as a third parameter. If found, this will include the count with the output.
_('word').pluralize(0, true); // => '0 words'
_('word').pluralize(1, true); // => '1 word'
### singularize
**Signature:** `_.singularize(word)`
`singularize` returns the singular version of the plural passed to it.
// functional style
_.singularize('words'); // => 'word'
// object-oriented style
_('words').singularize(); // => 'word'
### gsub
**Signature:** `_.gsub(word, rule, replacement)`
`gsub` is a method that is just slightly different than our standard `String#replace`. The main differences are that it matches globally every time, and if no substitution is made it returns `null`. It accepts a string for `word` and `replacement`, and `rule` can be either a string or a regex.
// functional style
_.gsub('word', /wo/, 'ne'); // => 'nerd'
// object-oriented style
_('word').gsub(/wo/, 'ne'); // => 'nerd'
### ordinalize
**Signature:** `_.ordinalize(number)`
`ordinalize` adds an ordinal suffix to `number`.
_.ordinalize(1); // => '1st'
_.ordinalize("5"); // => '5th'
_.ordinalize(11); // => '11th'
_.ordinalize(1033); // => '1033rd'
_.ordinalize(-15); // => '-15th'
### titleize
**Signature:** `_.titleize( words )`
`titleize` capitalizes the first letter of each word in the string `words`. It preserves the existing whitespace.
_.titleize('banana'); // => 'Banana'
_.titleize('banana potato fork'); // => 'Banana Potato Fork'
_.titleize('banana potato\tfork'); // => 'Banana Potato\tFork'
## Configuring the Inflector
Should you ever need to configure the Inflector beyond the defaults, use these methods to do so:
### plural
**Signature:** `_.plural(rule, replacement)`
`plural` creates a new pluralization rule for the inflector. `rule` can be either a string or a regex.
// functional style with explicit string
_.plural('axis', 'axes');
// object-oriented style with explicit string
_('axis').plural('axes');
// functional style with regex
_.plural(/(ax)is$/i, '$1es');
// object-oriented style with regex
_(/(ax)is$/i).plural('$1es');
### singular
**Signature:** `_.singular(rule, replacement)`
`singular` creates a new singularization rule for the inflector. `rule` can be either a string or a regex.
// functional style with explicit string
_.singular('data', 'datum');
// object-oriented style with explicit string
_('data').singular('datum');
// functional style with regex
_.singular(/(t)a$/i, '$1um');
// object-oriented style with regex
_(/(t)a$/i).singular('$1um');
### irregular
**Signature:** `_.irregular(singular, plural)`
`irregular` is a shortcut method to create both a pluralization and singularization rule for the word at the same time. You must supply both the singular form and the plural form as explicit strings.
// functional style
_.irregular('haxor', 'hax0rs!');
// object-oriented style
_('haxor').irregular('hax0rs!');
### uncountable
**Signature:** `_.uncountable(word)`
`uncountable` creates a new uncountable rule for `word`. Uncountable words do not get pluralized or singularized.
// functional style
_.uncountable('equipment');
// object-oriented style
_('equipment').uncountable();
### resetInflections
**Signature:** `_.resetInflections()`
`resetInflections` resets the inflector's rules to their initial state, clearing out any custom rules that have been added.
## Thanks to...
The [Rails][rails] team for [ActiveSupport][activesupport]
The [lodash][lodash] team for [lodash][lodash]
These other Inflector implementations:
- [active-support-for-javascript](http://code.google.com/p/active-support-for-javascript/)
- [inflection-js](http://code.google.com/p/inflection-js/)
- [Javascript Rails-like inflector](http://snippets.dzone.com/posts/show/3205)
Though no code was taken directly from them, they deserve plenty of props for doing it before me. If lodash isn't your thing, check them out!
## Contributors
```
65 Jeremy Ruppel
15 Daniel Perez
7 Landon Schropp
2 Johnathon Sanders
2 Seggy Umboh
1 Dayton Nolan
1 Joseph Spens
1 Kris Neuharth
1 Monica Olinescu
1 Sam Dornan
1 Shane Riley
1 bramski
1 maratfakhreev
1 trevor
```
## License
[MIT License][LICENSE]
[npm]: http://badge.fury.io/js/lodash-inflection
[npm-badge]: https://badge.fury.io/js/lodash-inflection.svg
[travis-ci]: https://travis-ci.org/tuvistavie/lodash-inflection
[travis-badge]: https://travis-ci.org/tuvistavie/lodash-inflection.svg?branch=master
[coveralls]: https://coveralls.io/r/tuvistavie/lodash-inflection?branch=master
[coveralls-badge]: https://img.shields.io/coveralls/tuvistavie/lodash-inflection.svg
[rails]: https://github.com/rails/rails
[activesupport]: https://github.com/rails/rails/tree/master/activesupport
[lodash]: http://lodash.com
[LICENSE]: https://github.com/tuvistavie/lodash-inflection/blob/master/LICENSE