1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- var Class = require('./Class');
- var safeSet = require('./safeSet');
- var safeGet = require('./safeGet');
- var map = require('./map');
- var filter = require('./filter');
- var isFn = require('./isFn');
- var safeDel = require('./safeDel');
- var toArr = require('./toArr');
- var each = require('./each');
- exports = Class({
- className: 'JsonTransformer',
- initialize: function(data) {
- this._data = data || {};
- },
- set: function(key, val) {
- if (arguments.length === 1) {
- this._data = key;
- return this;
- }
- safeSet(this._data, key, val);
- return this;
- },
- get: function(key) {
- if (key == null) return this._data;
- return safeGet(this._data, key);
- },
- map: function(from, to, fn) {
- if (isFn(from)) return this.set(map(this._data, from, this));
- if (isFn(to)) {
- fn = to;
- to = from;
- }
- return this.set(to, map(this.get(from), fn, this));
- },
- filter: function(from, to, fn) {
- if (isFn(from)) return this.set(filter(this._data, from, this));
- if (isFn(to)) {
- fn = to;
- to = from;
- }
- return this.set(to, filter(this.get(from), fn, this));
- },
- remove: function(keys) {
- keys = toArr(keys);
- var data = this._data;
- each(keys, function(key) {
- safeDel(data, key);
- });
- return this;
- },
- compute: function(from, to, fn) {
- if (isFn(from)) return this.set(from.call(this, this._data));
- if (isFn(to)) return this.set(from, to.call(this, this.get(from)));
- from = map(
- toArr(from),
- function(key) {
- return safeGet(this._data, key);
- },
- this
- );
- return this.set(to, fn.apply(this, from));
- },
- toString: function() {
- return JSON.stringify(this._data);
- }
- });
- module.exports = exports;
|