    \  / _. |  _  ._ _|_ o ._   _
     \/ (_| | (/_ | | |_ | | | (/_

JavaScript's Sister, and protector — providing you with type checking, functional iterators, and common utility helpers; utilizing native JavaScript methods (when available) for optimal speed.

Browser usage:

``` html
<script src="valentine.js"></script>
<script>
  v.forEach(['a', 'b', 'c'], function (letter) {

  })
</script>
```

Node users, install it:

    $ npm install valentine

Use it:

``` js
var v = require('valentine');

// showcase object style
v(['a', 'b', 'c']).map(function (letter) {
  return letter.toUpperCase();
}).join(' '); // => 'A B C'
```

API
---

<h3>iterators</h3>

  * v.each(ar || obj, callback[, scope])
  * v.map(ar || obj, callback[, scope])
  * v.every(ar, callback[, scope])
  * v.some(ar, callback[, scope])
  * v.filter(ar, callback[, scope])
  * v.reject(ar, callback[, scope])
  * v.indexOf(ar, item[, start])
  * v.lastIndexOf(ar, item[, start])
  * v.reduce(ar, callback, memo[, scope])
  * v.reduceRight(ar, callback, memo[, scope])

<h3>utility</h3>

  * v.extend(obj[, obj2[, obj3[...]]])
  * v.merge(ar1, ar2)
  * v.pluck(ar, key)
  * v.toArray(sparse)
  * v.size(ar)
  * v.find(ar, key)
  * v.compact(ar)
  * v.flatten(ar)
  * v.uniq(ar)
  * v.first(ar)
  * v.last(ar)
  * v.keys(obj)
  * v.values(obj)
  * v.trim(str)
  * v.bind(scope, fn)

<h3>type checking</h3>

  * v.is.fun(o)
  * v.is.str(o)
  * v.is.ele(o)
  * v.is.arr(o)
  * v.is.arrLike(o)
  * v.is.num(o)
  * v.is.bool(o)
  * v.is.args(o)
  * v.is.emp(o)
  * v.is.dat(o)
  * v.is.nan(o)
  * v.is.nil(o)
  * v.is.und(o)
  * v.is.obj(o)

Object Style
------

``` js
v(['a', 'b', 'c']).map(function (letter) {
  return letter.toUpperCase();
}); // => ['A', 'B', 'C'];
```

Chains
------

``` js
v(['a', 'b', [['c']], 0, false,,,null,['a', 'b', 'c']])
  .chain().flatten().compact().uniq().map(function (letter) {
    return letter.toUpperCase();
  }).value(); // => ['A', 'B', 'C'];
```

Ender Support
-------------
Don't have [Ender](http://ender.no.de)? Install it, and don't ever look back.

    $ [sudo] npm install ender -g

Then build valentine into your package

    $ ender build valentine

Have an existing Ender package? Include it:

    $ ender add valentine

Write code like a boss

``` js
$.v(['a', ['virus'], 'b', 'c']).reject(function (el, i) {
  return $.is.arr(el[i]);
});

// top level methods in bridge
$.each
  map
  merge
  extend
  toArray
  keys
  values
  trim
  bind
```

*Happy iterating*!
