js-data-rethinkdb
Advanced tools
Comparing version
@@ -0,1 +1,7 @@ | ||
##### 3.0.0-alpha.8 - 06 March 2016 | ||
###### Other | ||
- Extracted common adapter functionality into js-data-adapter | ||
- Extracted common js-data repo utility scripts into js-data-repo-tools | ||
##### 3.0.0-alpha.7 - 03 March 2016 | ||
@@ -2,0 +8,0 @@ |
@@ -18,6 +18,5 @@ { | ||
"copyright": "js-data-rethinkdb Copyright © 2014-2016 js-data-rethinkdb project authors", | ||
"outputSourceFiles": true, | ||
"syntaxTheme": "dark", | ||
"linenums": true, | ||
"footer": "<div style=\"text-align:center\">Back to <a href=\"http://js-data.io\">js-data.io</a></div>", | ||
"footer": "<div style=\"text-align:center\">Back to <a href=\"http://api.js-data.io\">api.js-data.io</a></div>", | ||
"analytics": { | ||
@@ -24,0 +23,0 @@ "ua": "UA-55528236-2", |
@@ -6,2 +6,4 @@ 'use strict'; | ||
var jsData = require('js-data'); | ||
var Adapter = require('js-data-adapter'); | ||
var Adapter__default = _interopDefault(Adapter); | ||
var rethinkdbdash = _interopDefault(require('rethinkdbdash')); | ||
@@ -12,7 +14,2 @@ var underscore = _interopDefault(require('mout/string/underscore')); | ||
var babelHelpers = {}; | ||
babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { | ||
return typeof obj; | ||
} : function (obj) { | ||
return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; | ||
}; | ||
@@ -37,2 +34,3 @@ babelHelpers.defineProperty = function (obj, key, value) { | ||
var addHiddenPropsToTarget = jsData.utils.addHiddenPropsToTarget; | ||
var classCallCheck = jsData.utils.classCallCheck; | ||
var extend = jsData.utils.extend; | ||
@@ -47,2 +45,3 @@ var fillIn = jsData.utils.fillIn; | ||
var isUndefined = jsData.utils.isUndefined; | ||
var omit = jsData.utils.omit; | ||
var plainCopy = jsData.utils.plainCopy; | ||
@@ -52,39 +51,4 @@ var resolve = jsData.utils.resolve; | ||
var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; | ||
var noop = function noop() { | ||
var self = this; | ||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
var opts = args[args.length - 1]; | ||
self.dbg.apply(self, [opts.op].concat(args)); | ||
return resolve(); | ||
}; | ||
var noop2 = function noop2() { | ||
var self = this; | ||
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
args[_key2] = arguments[_key2]; | ||
} | ||
var opts = args[args.length - 2]; | ||
self.dbg.apply(self, [opts.op].concat(args)); | ||
return resolve(); | ||
}; | ||
var withoutRelations = function withoutRelations(mapper, props) { | ||
var relationFields = mapper.relationFields || []; | ||
// Remove relations | ||
var _props = {}; | ||
forOwn(props, function (value, key) { | ||
if (relationFields.indexOf(key) === -1) { | ||
_props[key] = value; | ||
} | ||
}); | ||
return _props; | ||
return omit(props, mapper.relationFields || []); | ||
}; | ||
@@ -268,2 +232,3 @@ | ||
* @class RethinkDBAdapter | ||
* @extends Adapter | ||
* @param {Object} [opts] Configuration opts. | ||
@@ -284,5 +249,6 @@ * @param {string} [opts.authKey=""] RethinkDB authorization key. | ||
var self = this; | ||
classCallCheck(self, RethinkDBAdapter); | ||
opts || (opts = {}); | ||
fillIn(opts, DEFAULTS); | ||
fillIn(self, opts); | ||
Adapter__default.call(this, opts); | ||
@@ -351,2 +317,17 @@ /** | ||
// Setup prototype inheritance from Adapter | ||
RethinkDBAdapter.prototype = Object.create(Adapter__default.prototype, { | ||
constructor: { | ||
value: RethinkDBAdapter, | ||
enumerable: false, | ||
writable: true, | ||
configurable: true | ||
} | ||
}); | ||
Object.defineProperty(RethinkDBAdapter, '__super__', { | ||
configurable: true, | ||
value: Adapter__default | ||
}); | ||
/** | ||
@@ -358,6 +339,6 @@ * Alternative to ES6 class syntax for extending `RethinkDBAdapter`. | ||
* @param {Object} [instanceProps] Properties that will be added to the | ||
* prototype of the subclass. | ||
* prototype of the RethinkDBAdapter. | ||
* @param {Object} [classProps] Properties that will be added as static | ||
* properties to the subclass itself. | ||
* @return {Object} Subclass of `RethinkDBAdapter`. | ||
* properties to the RethinkDBAdapter itself. | ||
* @return {Object} RethinkDBAdapter of `RethinkDBAdapter`. | ||
*/ | ||
@@ -375,122 +356,2 @@ RethinkDBAdapter.extend = extend; | ||
}, | ||
/** | ||
* @name RethinkDBAdapter#afterCreate | ||
* @method | ||
*/ | ||
afterCreate: noop2, | ||
/** | ||
* @name RethinkDBAdapter#afterCreateMany | ||
* @method | ||
*/ | ||
afterCreateMany: noop2, | ||
/** | ||
* @name RethinkDBAdapter#afterDestroy | ||
* @method | ||
*/ | ||
afterDestroy: noop2, | ||
/** | ||
* @name RethinkDBAdapter#afterDestroyAll | ||
* @method | ||
*/ | ||
afterDestroyAll: noop2, | ||
/** | ||
* @name RethinkDBAdapter#afterFind | ||
* @method | ||
*/ | ||
afterFind: noop2, | ||
/** | ||
* @name RethinkDBAdapter#afterFindAll | ||
* @method | ||
*/ | ||
afterFindAll: noop2, | ||
/** | ||
* @name RethinkDBAdapter#afterUpdate | ||
* @method | ||
*/ | ||
afterUpdate: noop2, | ||
/** | ||
* @name RethinkDBAdapter#afterUpdateAll | ||
* @method | ||
*/ | ||
afterUpdateAll: noop2, | ||
/** | ||
* @name RethinkDBAdapter#afterUpdateMany | ||
* @method | ||
*/ | ||
afterUpdateMany: noop2, | ||
/** | ||
* @name RethinkDBAdapter#beforeCreate | ||
* @method | ||
*/ | ||
beforeCreate: noop, | ||
/** | ||
* @name RethinkDBAdapter#beforeCreateMany | ||
* @method | ||
*/ | ||
beforeCreateMany: noop, | ||
/** | ||
* @name RethinkDBAdapter#beforeDestroy | ||
* @method | ||
*/ | ||
beforeDestroy: noop, | ||
/** | ||
* @name RethinkDBAdapter#beforeDestroyAll | ||
* @method | ||
*/ | ||
beforeDestroyAll: noop, | ||
/** | ||
* @name RethinkDBAdapter#beforeFind | ||
* @method | ||
*/ | ||
beforeFind: noop, | ||
/** | ||
* @name RethinkDBAdapter#beforeFindAll | ||
* @method | ||
*/ | ||
beforeFindAll: noop, | ||
/** | ||
* @name RethinkDBAdapter#beforeUpdate | ||
* @method | ||
*/ | ||
beforeUpdate: noop, | ||
/** | ||
* @name RethinkDBAdapter#beforeUpdateAll | ||
* @method | ||
*/ | ||
beforeUpdateAll: noop, | ||
/** | ||
* @name RethinkDBAdapter#beforeUpdateMany | ||
* @method | ||
*/ | ||
beforeUpdateMany: noop, | ||
/** | ||
* @name RethinkDBAdapter#dbg | ||
* @method | ||
*/ | ||
dbg: function dbg() { | ||
for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { | ||
args[_key3] = arguments[_key3]; | ||
} | ||
this.log.apply(this, ['debug'].concat(args)); | ||
}, | ||
selectDb: function selectDb(opts) { | ||
@@ -535,3 +396,3 @@ return this.r.db(isUndefined(opts.db) ? this.db : opts.db); | ||
forOwn(query, function (config, keyword) { | ||
if (reserved.indexOf(keyword) === -1) { | ||
if (Adapter.reserved.indexOf(keyword) === -1) { | ||
if (isObject(config)) { | ||
@@ -554,3 +415,3 @@ query.where[keyword] = config; | ||
rql = rql.filter(function (row) { | ||
var subQuery = undefined; | ||
var subQuery = void 0; | ||
// Apply filter for each field | ||
@@ -635,3 +496,3 @@ forOwn(query.where, function (criteria, field) { | ||
var self = this; | ||
var op = undefined; | ||
var op = void 0; | ||
props || (props = {}); | ||
@@ -652,17 +513,15 @@ opts || (opts = {}); | ||
self._handleErrors(cursor); | ||
var record = undefined; | ||
var record = void 0; | ||
if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) { | ||
record = cursor.changes[0].new_val; | ||
} | ||
var result = {}; | ||
fillIn(result, cursor); | ||
result.data = record; | ||
result.created = record ? 1 : 0; | ||
result = self.getOpt('raw', opts) ? result : result.data; | ||
var response = new Adapter.Response(record, cursor, 'create'); | ||
response.created = record ? 1 : 0; | ||
response = self.respond(response, opts); | ||
// afterCreate lifecycle hook | ||
op = opts.op = 'afterCreate'; | ||
return resolve(self[op](mapper, props, opts, result)).then(function (_result) { | ||
return resolve(self[op](mapper, props, opts, response)).then(function (_response) { | ||
// Allow for re-assignment from lifecycle hook | ||
return isUndefined(_result) ? result : _result; | ||
return isUndefined(_response) ? response : _response; | ||
}); | ||
@@ -689,3 +548,3 @@ }); | ||
var self = this; | ||
var op = undefined; | ||
var op = void 0; | ||
props || (props = {}); | ||
@@ -715,5 +574,3 @@ opts || (opts = {}); | ||
} | ||
var result = {}; | ||
fillIn(result, cursor); | ||
result.data = records; | ||
var result = new Adapter.Response(records, cursor, 'createMany'); | ||
result.created = records.length; | ||
@@ -748,3 +605,3 @@ result = self.getOpt('raw', opts) ? result : result.data; | ||
var self = this; | ||
var op = undefined; | ||
var op = void 0; | ||
opts || (opts = {}); | ||
@@ -761,4 +618,3 @@ | ||
}).then(function (cursor) { | ||
var result = {}; | ||
fillIn(result, cursor); | ||
var result = new Adapter.Response(undefined, cursor, 'destroy'); | ||
result = self.getOpt('raw', opts) ? result : undefined; | ||
@@ -800,3 +656,3 @@ | ||
var self = this; | ||
var op = undefined; | ||
var op = void 0; | ||
query || (query = {}); | ||
@@ -814,4 +670,3 @@ opts || (opts = {}); | ||
}).then(function (cursor) { | ||
var result = {}; | ||
fillIn(result, cursor); | ||
var result = new Adapter.Response(undefined, cursor, 'destroyAll'); | ||
result = self.getOpt('raw', opts) ? result : undefined; | ||
@@ -830,143 +685,2 @@ | ||
/** | ||
* Return the foreignKey from the given record for the provided relationship. | ||
* | ||
* There may be reasons why you may want to override this method, like when | ||
* the id of the parent doesn't exactly match up to the key on the child. | ||
* | ||
* @name RethinkDBAdapter#makeHasManyForeignKey | ||
* @method | ||
* @return {*} | ||
*/ | ||
makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { | ||
return def.getForeignKey(record); | ||
}, | ||
/** | ||
* Load a hasMany relationship. | ||
* | ||
* @name RethinkDBAdapter#loadHasMany | ||
* @method | ||
* @return {Promise} | ||
*/ | ||
loadHasMany: function loadHasMany(mapper, def, records, __opts) { | ||
var self = this; | ||
var singular = false; | ||
if (isObject(records) && !isArray(records)) { | ||
singular = true; | ||
records = [records]; | ||
} | ||
var IDs = records.map(function (record) { | ||
return self.makeHasManyForeignKey(mapper, def, record); | ||
}); | ||
var query = {}; | ||
var criteria = query[def.foreignKey] = {}; | ||
if (singular) { | ||
// more efficient query when we only have one record | ||
criteria['=='] = IDs[0]; | ||
} else { | ||
criteria['in'] = IDs.filter(function (id) { | ||
return id; | ||
}); | ||
} | ||
return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { | ||
records.forEach(function (record) { | ||
var attached = []; | ||
// avoid unneccesary iteration when we only have one record | ||
if (singular) { | ||
attached = relatedItems; | ||
} else { | ||
relatedItems.forEach(function (relatedItem) { | ||
if (get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { | ||
attached.push(relatedItem); | ||
} | ||
}); | ||
} | ||
def.setLocalField(record, attached); | ||
}); | ||
}); | ||
}, | ||
/** | ||
* Load a hasOne relationship. | ||
* | ||
* @name RethinkDBAdapter#loadHasOne | ||
* @method | ||
* @return {Promise} | ||
*/ | ||
loadHasOne: function loadHasOne(mapper, def, records, __opts) { | ||
if (isObject(records) && !isArray(records)) { | ||
records = [records]; | ||
} | ||
return this.loadHasMany(mapper, def, records, __opts).then(function () { | ||
records.forEach(function (record) { | ||
var relatedData = def.getLocalField(record); | ||
if (isArray(relatedData) && relatedData.length) { | ||
def.setLocalField(record, relatedData[0]); | ||
} | ||
}); | ||
}); | ||
}, | ||
/** | ||
* Return the foreignKey from the given record for the provided relationship. | ||
* | ||
* @name RethinkDBAdapter#makeBelongsToForeignKey | ||
* @method | ||
* @return {*} | ||
*/ | ||
makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { | ||
return def.getForeignKey(record); | ||
}, | ||
/** | ||
* Load a belongsTo relationship. | ||
* | ||
* @name RethinkDBAdapter#loadBelongsTo | ||
* @method | ||
* @return {Promise} | ||
*/ | ||
loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { | ||
var self = this; | ||
var relationDef = def.getRelation(); | ||
if (isObject(records) && !isArray(records)) { | ||
var _ret = function () { | ||
var record = records; | ||
return { | ||
v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { | ||
def.setLocalField(record, relatedItem); | ||
}) | ||
}; | ||
}(); | ||
if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; | ||
} else { | ||
var keys = records.map(function (record) { | ||
return self.makeBelongsToForeignKey(mapper, def, record); | ||
}).filter(function (key) { | ||
return key; | ||
}); | ||
return self.findAll(relationDef, { | ||
where: babelHelpers.defineProperty({}, relationDef.idAttribute, { | ||
'in': keys | ||
}) | ||
}, __opts).then(function (relatedItems) { | ||
records.forEach(function (record) { | ||
relatedItems.forEach(function (relatedItem) { | ||
if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { | ||
def.setLocalField(record, relatedItem); | ||
} | ||
}); | ||
}); | ||
}); | ||
} | ||
}, | ||
/** | ||
* Retrieve the record with the given primary key. | ||
@@ -987,4 +701,4 @@ * | ||
var self = this; | ||
var record = undefined, | ||
op = undefined; | ||
var record = void 0, | ||
op = void 0; | ||
opts || (opts = {}); | ||
@@ -1027,3 +741,3 @@ opts.with || (opts.with = []); | ||
var relatedMapper = def.getRelation(); | ||
var task = undefined; | ||
var task = void 0; | ||
@@ -1068,6 +782,4 @@ if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { | ||
}).then(function () { | ||
var result = { | ||
data: record, | ||
found: record ? 1 : 0 | ||
}; | ||
var result = new Adapter.Response(record, {}, 'find'); | ||
result.found = record ? 1 : 0; | ||
result = self.getOpt('raw', opts) ? result : result.data; | ||
@@ -1113,3 +825,3 @@ | ||
var records = []; | ||
var op = undefined; | ||
var op = void 0; | ||
var relationList = mapper.relationList || []; | ||
@@ -1146,3 +858,3 @@ var tasks = [self.waitForTable(mapper, opts)]; | ||
var idAttribute = mapper.idAttribute; | ||
var task = undefined; | ||
var task = void 0; | ||
if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { | ||
@@ -1214,6 +926,4 @@ if (def.type === 'hasMany') { | ||
records || (records = []); | ||
var result = { | ||
data: records, | ||
found: records.length | ||
}; | ||
var result = new Adapter.Response(records, {}, 'findAll'); | ||
result.found = records.length; | ||
result = self.getOpt('raw', opts) ? result : result.data; | ||
@@ -1252,49 +962,2 @@ | ||
/** | ||
* Resolve the value of the specified option based on the given options and | ||
* this adapter's settings. | ||
* | ||
* @name RethinkDBAdapter#getOpt | ||
* @method | ||
* @param {string} opt The name of the option. | ||
* @param {Object} [opts] Configuration options. | ||
* @return {*} The value of the specified option. | ||
*/ | ||
getOpt: function getOpt(opt, opts) { | ||
opts || (opts = {}); | ||
return isUndefined(opts[opt]) ? plainCopy(this[opt]) : plainCopy(opts[opt]); | ||
}, | ||
/** | ||
* Logging utility method. | ||
* | ||
* @name RethinkDBAdapter#log | ||
* @method | ||
*/ | ||
log: function log(level) { | ||
for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { | ||
args[_key4 - 1] = arguments[_key4]; | ||
} | ||
if (level && !args.length) { | ||
args.push(level); | ||
level = 'debug'; | ||
} | ||
if (level === 'debug' && !this.debug) { | ||
return; | ||
} | ||
var prefix = level.toUpperCase() + ': (RethinkDBAdapter)'; | ||
if (console[level]) { | ||
var _console; | ||
(_console = console)[level].apply(_console, [prefix].concat(args)); | ||
} else { | ||
var _console2; | ||
(_console2 = console).log.apply(_console2, [prefix].concat(args)); | ||
} | ||
}, | ||
/** | ||
* Apply the given update to the record with the specified primary key. | ||
@@ -1318,3 +981,3 @@ * | ||
opts || (opts = {}); | ||
var op = undefined; | ||
var op = void 0; | ||
@@ -1332,3 +995,3 @@ return self.waitForTable(mapper, opts).then(function () { | ||
}).then(function (cursor) { | ||
var record = undefined; | ||
var record = void 0; | ||
self._handleErrors(cursor); | ||
@@ -1340,5 +1003,3 @@ if (cursor && cursor.changes && cursor.changes.length && cursor.changes[0].new_val) { | ||
} | ||
var result = {}; | ||
fillIn(result, cursor); | ||
result.data = record; | ||
var result = new Adapter.Response(record, cursor, 'update'); | ||
result.updated = 1; | ||
@@ -1385,3 +1046,3 @@ result = self.getOpt('raw', opts) ? result : result.data; | ||
opts || (opts = {}); | ||
var op = undefined; | ||
var op = void 0; | ||
@@ -1406,5 +1067,3 @@ return self.waitForTable(mapper, opts).then(function () { | ||
} | ||
var result = {}; | ||
fillIn(result, cursor); | ||
result.data = records; | ||
var result = new Adapter.Response(records, cursor, 'update'); | ||
result.updated = records.length; | ||
@@ -1441,3 +1100,3 @@ result = self.getOpt('raw', opts) ? result : result.data; | ||
opts || (opts = {}); | ||
var op = undefined; | ||
var op = void 0; | ||
var idAttribute = mapper.idAttribute; | ||
@@ -1464,3 +1123,3 @@ | ||
}).then(function (cursor) { | ||
var updatedRecords = undefined; | ||
var updatedRecords = void 0; | ||
self._handleErrors(cursor); | ||
@@ -1472,5 +1131,3 @@ if (cursor && cursor.changes && cursor.changes.length) { | ||
} | ||
var result = {}; | ||
fillIn(result, cursor); | ||
result.data = updatedRecords || []; | ||
var result = new Adapter.Response(updatedRecords || [], cursor, 'update'); | ||
result.updated = result.data.length; | ||
@@ -1477,0 +1134,0 @@ result = self.getOpt('raw', opts) ? result : result.data; |
{ | ||
"name": "js-data-rethinkdb", | ||
"description": "RethinkDB adapter for js-data.", | ||
"version": "3.0.0-alpha.7", | ||
"version": "3.0.0-alpha.8", | ||
"homepage": "https://github.com/js-data/js-data-rethinkdb", | ||
@@ -36,5 +36,6 @@ "repository": { | ||
"scripts": { | ||
"doc": "jsdoc -c conf.json src && node scripts/cleanup.js", | ||
"lint": "repo-tools lint src/index.js mocha.start.js test/**/*.js scripts/**.js", | ||
"bundle": "rollup -c rollup.config.js -f cjs -o dist/js-data-rethinkdb.js -m dist/js-data-rethinkdb.js.map src/index.js", | ||
"lint": "standard src/index.js mocha.start.js test/**/*.js scripts/**.js", | ||
"doc": "jsdoc -c conf.json src node_modules/js-data-adapter/src && node scripts/cleanup.js", | ||
"watch": "watch \"npm run bundle\" src/", | ||
"build": "npm run lint && npm run bundle", | ||
@@ -44,15 +45,16 @@ "mocha": "mocha -t 30000 -R dot -r source-map-support/register mocha.start.js", | ||
"test": "npm run build && npm run cover", | ||
"release": "npm test && npm run doc && node scripts/authors.js", | ||
"repo-tools": "repo-tools updates && repo-tools changelog && repo-tools authors", | ||
"release": "npm test && npm run doc && npm run repo-tools", | ||
"ci": "npm run test && cat coverage/lcov.info | coveralls || true && cat ./coverage/lcov.info | codacy-coverage || true" | ||
}, | ||
"dependencies": { | ||
"mout": "0.11.1" | ||
"js-data-adapter": "0.1.0", | ||
"mout": "0.12.0" | ||
}, | ||
"peerDependencies": { | ||
"js-data": "^3.0.0-alpha.15", | ||
"js-data": "^3.0.0-alpha.16", | ||
"rethinkdbdash": ">=1.15.0" | ||
}, | ||
"devDependencies": { | ||
"babel-core": "6.6.4", | ||
"babel-eslint": "5.0.0", | ||
"babel-core": "6.6.5", | ||
"babel-polyfill": "6.6.1", | ||
@@ -66,2 +68,3 @@ "babel-preset-es2015-rollup": "1.1.1", | ||
"js-data-adapter-tests": "^2.0.0-alpha.13", | ||
"js-data-repo-tools": "0.2.0", | ||
"jsdoc": "3.4.0", | ||
@@ -73,4 +76,4 @@ "mocha": "2.4.5", | ||
"source-map-support": "0.4.0", | ||
"standard": "6.0.7" | ||
"watch": "0.17.1" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
120087
-13.04%4
33.33%20
-4.76%1143
-20.68%+ Added
+ Added
+ Added
- Removed
Updated