reshine
Version:
Let's take the sunshine path with RethinkDB
222 lines (190 loc) • 5.56 kB
JavaScript
import r from 'rethinkdb';
import mapObj from 'map-obj';
var exists = (function (dbName) {
return function (connection) {
return r.dbList().run(connection).then(function (list) {
if (list.indexOf(dbName) >= 0) {
return Promise.resolve(true);
}
return Promise.resolve(false);
});
};
});
var create = (function (dbName) {
return function (connection) {
return exists(dbName)(connection).then(function (doesExist) {
if (!doesExist) {
return r.dbCreate(dbName).run(connection);
}
return Promise.resolve();
});
};
});
var drop = (function (dbName) {
return function (connection) {
return exists(dbName)(connection).then(function (doesExist) {
if (doesExist) {
return r.dbDrop(dbName).run(connection);
}
return Promise.resolve();
});
};
});
var exists$1 = (function (tableName) {
return function (dbName) {
return function (connection) {
return r.db(dbName).tableList().run(connection).then(function (list) {
if (list.indexOf(tableName) >= 0) {
return Promise.resolve(true);
}
return Promise.resolve(false);
});
};
};
});
var create$1 = (function (tableName) {
return function (dbName) {
return function (connection) {
return exists$1(tableName)(dbName)(connection).then(function (doesExist) {
if (!doesExist) {
return r.db(dbName).tableCreate(tableName).run(connection);
}
return Promise.resolve();
});
};
};
});
var drop$1 = (function (tableName) {
return function (dbName) {
return function (connection) {
return exists$1(tableName)(dbName)(connection).then(function (doesExist) {
if (doesExist) {
return r.db(dbName).tableDrop(tableName).run(connection);
}
return Promise.resolve();
});
};
};
});
var filter = function (toFilter) {
return function (tableName) {
return function (dbName) {
return function (connection) {
return r.db(dbName).table(tableName).filter(toFilter).run(connection);
};
};
};
};
filter.toArray = function (toFilter) {
return function (tableName) {
return function (dbName) {
return function (connection) {
return filter(toFilter)(tableName)(dbName)(connection).then(function (filtered) {
return filtered.toArray();
});
};
};
};
};
var find = (function (id) {
return function (tableName) {
return function (dbName) {
return function (connection) {
return r.db(dbName).table(tableName).get(id).run(connection);
};
};
};
});
var insert = (function (content) {
return function (tableName) {
return function (dbName) {
return function (connection) {
return r.db(dbName).table(tableName).insert(content).run(connection);
};
};
};
});
var merge = (function (id, content) {
return function (tableName) {
return function (dbName) {
return function (connection) {
return r.db(dbName).table(tableName).get(id).merge(content).run(connection);
};
};
};
});
var remove = (function (id) {
return function (tableName) {
return function (dbName) {
return function (connection) {
return r.db(dbName).table(tableName).get(id).delete().run(connection);
};
};
};
});
var update = (function (id, content) {
return function (tableName) {
return function (dbName) {
return function (connection) {
return r.db(dbName).table(tableName).get(id).update(content).run(connection);
};
};
};
});
var replace = (function (id, content) {
return function (tableName) {
return function (dbName) {
return function (connection) {
return r.db(dbName).table(tableName).get(id).replace(content).run(connection);
};
};
};
});
var doc = { filter: filter, find: find, insert: insert, merge: merge, remove: remove, update: update, replace: replace };
var select$1 = function (tableName) {
return function (dbName) {
return function (connection) {
var docMethods = mapObj(doc, function (key, value) {
return [key, function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return value.apply(doc, args)(tableName)(dbName)(connection);
}];
});
return create$1(tableName)(dbName)(connection).then(function (result) {
docMethods.result = result;
// TODO: Handle `filter.toArray` in a more generic fashion
docMethods.filter.toArray = function (toFilter) {
return doc.filter.toArray.call(doc, toFilter)(tableName)(dbName)(connection);
};
return docMethods;
});
};
};
};
select$1.create = create$1;
select$1.drop = drop$1;
select$1.exists = exists$1;
var select = function (dbName) {
return function (connection) {
return create(dbName)(connection).then(function (result) {
return {
result: result,
table: function (tableName) {
return select$1(tableName)(dbName)(connection);
}
};
});
};
};
select.create = create;
select.drop = drop;
select.exists = exists;
var connect = function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return r.connect.apply(r, args);
};
export { select as database, select$1 as table, doc, connect };