abstract-mapper
v0.1.5
Published
Abstract Object Mapper
Downloads
11
Maintainers
Readme
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 = new AbstractMapper [
(args...) -> ... # Init
(args...) -> ...
[ # Nested mapper
(args...) -> ...
(args...) -> ...
]
(args...) -> ... # Result
]
Examples
Object -> Object, Swap keys and values
mapper = new AbstractMapper [
-> {}
($) -> this[value] = key for key, value of $
-> this
]
Explode Object recursively
mapper = new AbstractMapper [
-> if this instanceof Array then this else []
($) ->
nested = []
for key, value of $
if typeof value is 'object'
nested.push value
else
result = {}
result[key] = value
@push result
for data in nested
mapper.call this, data
-> this
]
JSON -> DOM
mapper = new AbstractMapper [
($) -> if typeof $ is 'string' then textMapper $ else nodeMapper $
]
textMapper = new AbstractMapper [ ($) -> document.createTextNode $ ]
nodeMapper = new AbstractMapper [
($) -> document.createElement $.element or 'div'
($) -> @className = $.class if $.class
($) -> @setAttribute 'style', $.style if $.style
($) -> @appendChild mapper child for child in $.children or []
-> this
]
DOM -> JSON
mapper = new AbstractMapper [
($) -> if $.nodeType is 3 then textMapper $ else nodeMapper $
]
textMapper = new AbstractMapper [ ($) -> $.data ]
nodeMapper = new AbstractMapper [
-> {}
($) -> @element = $.nodeName.toLowerCase()
($) -> @class = $.className if $.className
($) -> @style = style if style = $.getAttribute? 'style'
($) -> @children = [] if $.childNodes.length
($) -> @children.push 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