Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nhz-io/abstract-mapper
(OBSOLETE)Abstract Object Mapper
https://github.com/nhz-io/abstract-mapper
Last synced: 3 days ago
JSON representation
(OBSOLETE)Abstract Object Mapper
- Host: GitHub
- URL: https://github.com/nhz-io/abstract-mapper
- Owner: nhz-io
- License: mit
- Created: 2016-01-28T17:54:17.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-01-28T16:22:19.000Z (almost 9 years ago)
- Last Synced: 2024-05-02T02:18:46.593Z (8 months ago)
- Language: CoffeeScript
- Homepage:
- Size: 24.4 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# abstract-mapper
## Abstract Object Mapper [![Build Status][travis-image]][travis-url]
[![NPM][npm-image]][npm-url]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][coffeescript-url] in mind.
## Install
```
npm install --save abstract-mapper
```## Browser
* [abstract-mapper.js](abstract-mapper.js)
* [abstract-mapper.min.js](abstract-mapper.min.js)## Usage
```coffeescript
mapper = new AbstractMapper [
(args...) -> ... # Init
(args...) -> ...
[ # Nested mapper
(args...) -> ...
(args...) -> ...
]
(args...) -> ... # Result
]
```## Examples
### Object -> Object, Swap keys and values
```coffeescript
mapper = new AbstractMapper [
-> {}
($) -> this[value] = key for key, value of $
-> this
]
```### Explode Object recursively
```coffeescript
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 resultfor data in nested
mapper.call this, data-> this
]
```### JSON -> DOM
```coffeescript
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
```coffeescript
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](http://jsperf.com/abstract-mapper/6)LICENSE
-------
#### [MIT](LICENSE)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 under `AbstractMapper.Context`#### 0.1.1
* Fixed [.npmignore](.npmignore) to exclude only browser dist files#### 0.1.0
* API is totally different from v0.0.10 (Abusing [CoffeeScript][coffeescript-url] sugar)
* Added build system ([GULP][gulp-url])
* Added travis-ci[coffeescript-url]: https://github.com/jashkenas/coffeescript
[gulp-url]: https://github.com/gulpjs/gulp[travis-image]: https://travis-ci.org/NHZio/abstract-mapper.svg
[travis-url]: https://travis-ci.org/NHZio/abstract-mapper[npm-image]: https://nodei.co/npm/abstract-mapper.png
[npm-url]: https://nodei.co/npm/abstract-mapper