abstract-mapper
Abstract Object Mapper
Utility class to generate a mapper function from the array of
handler functions. The array of handler functions is passed
as a first argument ot the AbstractMapper
constructor. The first
handler function in the array being a context initializer.
The result of context initializer is passed as thisarg
to every
subsequent handler function. Each handler function receives the
same arguments. The result of the last handler function is the value
that the mapper function will return.
The array of handler functions that is passed to AbstractMapper
constructor, can also contain nested arrays. In this case, a nested mapper
will be constructed from this array. This nested mapper will be called with
the same thisarg
, as the rest of the handler functions.
This module was created with CoffeeScript in mind.
Install
npm install --save abstract-mapper
Browser
Usage
mapper = ... # Init ... # Nested mapper ... ... ... # Result
Examples
Object -> Object, Swap keys and values
mapper = -> thisvalue= key for keyvalue of $ -> this
Explode Object recursively
mapper = -> if this instanceof Array then this else nested = for keyvalue of $ if typeof value is 'object' nestedpush value else result = resultkey= value @push result for data in nested mappercall thisdata -> this
JSON -> DOM
mapper = if typeof $ is 'string' then textMapper $ else nodeMapper $ textMapper = documentcreateTextNode $ nodeMapper = documentcreateElement $element or 'div' @className = $class if $class @setAttribute 'style'$style if $style @appendChild mapper child for child in $children or -> this
DOM -> JSON
mapper = if $nodeType is 3 then textMapper $ else nodeMapper $ textMapper = $data nodeMapper = -> @element = $nodeNametoLowerCase @class = $className if $className @style = style if style = $getAttribute? 'style' @children = if $childNodeslength @childrenpush mapper child for child in $childNodes -> this
Build
git clone https://github.com/nhz-io/abstract-mapper.git
cd abstract-mapper
npm install
gulp
Benchmark
JSPERF
LICENSE
MIT
VERSION
0.1.5
- More README, More meaningful variable names
0.1.4
- Removed junk rudiment (AbstractMapper.Context)
0.1.3
- Fixed
RangeError: Maximum call stack size exceeded
on nested mappers
0.1.2
- Added empty
Context
class underAbstractMapper.Context
0.1.1
- Fixed .npmignore to exclude only browser dist files
0.1.0
- API is totally different from v0.0.10 (Abusing CoffeeScript sugar)
- Added build system (GULP)
- Added travis-ci