Skip to content

Commit

Permalink
disconnect hook to automatically push change and
Browse files Browse the repository at this point in the history
disable tests until api stable
  • Loading branch information
pemrouz committed Jun 26, 2016
1 parent c2a1c4c commit 32e4e67
Show file tree
Hide file tree
Showing 3 changed files with 322 additions and 325 deletions.
128 changes: 64 additions & 64 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ var _header = require('utilise/header');

var _header2 = _interopRequireDefault(_header);

var _client = require('utilise/client');

var _client2 = _interopRequireDefault(_client);

var _keys = require('utilise/keys');

var _keys2 = _interopRequireDefault(_keys);

var _noop = require('utilise/noop');

var _noop2 = _interopRequireDefault(_noop);

var _key = require('utilise/key');

var _key2 = _interopRequireDefault(_key);
Expand All @@ -52,9 +52,6 @@ var _is2 = _interopRequireDefault(_is);
/* istanbul ignore next */
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

// -------------------------------------------
// Loads resources from the /resources folder
// -------------------------------------------
function mysql(ripple) {
log('creating');
var type = ripple.types['application/data'];
Expand All @@ -69,71 +66,74 @@ var init = function init(ripple) {
return function (config) {
var con = require('mysql').createPool(config);
escape = con.escape.bind(con);

return {
add: exec('add')(con),
update: exec('update')(con),
remove: exec('remove')(con)
update: crud(ripple, con)('update'),
remove: crud(ripple, con)('remove'),
add: crud(ripple, con)('add'),
load: load(ripple, con)
// change: change(ripple, con)
};
};
};

var exec = function exec(type) {
return function (con) {
return function (ripple) {
return function (res, index, value) {
var table = (0, _header2.default)('mysql.table')(res),
xto = (0, _key2.default)('headers.mysql.to')(res),
p = (0, _promise2.default)();

if (xto && !xto(res, { key: index, value: value, type: type })) return;
if (!index) return load(con)(ripple)(res);
if (!table) return;

var levels = index.split('.'),
record = levels.length === 1 ? (levels.shift(), value) : res.body[levels.shift()],
field = levels.shift();

if (field) record = (0, _key2.default)(['id', field])(record);
if (!_is2.default.obj(record) || levels.length || field && !_is2.default.in(res.headers.mysql.fields)(field)) return log('cannot generate SQL for', res.name, index);

var sql = sqls[type](table, (0, _key2.default)(res.headers.mysql.fields)(record));
log('SQL', sql.grey);
con.query(sql, function (e, rows) {
if (e) return err(type, table, 'failed', e);
log(type.green.bold, table, 'done', rows.insertId ? (0, _str2.default)(rows.insertId).grey : '');

rows.insertId ? p.resolve(value.id = rows.insertId) : p.resolve();
});
var crud = function crud(ripple, con) {
return function (type) {
return function (name, record) {
var res = ripple.resources[name],
table = (0, _header2.default)('mysql.table')(res),
fields = (0, _header2.default)('mysql.fields')(res),
p = (0, _promise2.default)(),
sql = void 0;

if (!table) return deb('no table', name);
if (!(sql = sqls[type](table, (0, _key2.default)(fields)(record)))) return deb('no sql', name);
log('SQL', sql.grey);

con.query(sql, function (e, rows) {
if (e) return err(type, table, 'failed', e);
log(type.green.bold, table, 'done', rows.insertId ? (0, _str2.default)(rows.insertId).grey : '');
p.resolve(rows.insertId || record.id);
});

return p;
};
return p;
};
};
};

var load = function load(con) {
return function (ripple) {
return function (res) {
var table = (0, _header2.default)('mysql.table')(res) || res.name,
p = (0, _promise2.default)();

if ((0, _key2.default)(loaded)(res)) return;
(0, _key2.default)(loaded, true)(res);

con.query('SHOW COLUMNS FROM ' + table, function (e, rows) {
if (e && e.code == 'ER_NO_SUCH_TABLE') return log('no table', table), (0, _key2.default)('headers.mysql.table', '')(res);
// const change = (ripple, con) => type => (res, change) => {
// let levels = (change.key || '').split('.')
// , xto = header('mysql.xto')(res)
// , index = levels[0]
// , field = levels[1]
// , record = change.value

// if (!change.key) return load(ripple, con)(res)
// if (!levels.length || levels.length > 2 || (field && !is.in(fields)(field))) return deb('cannot update', name, key)
// if (xto && !xto(res, change)) return deb('skipping update', name)
// if (field) record = key(['id', field])(res.body[index])
// crud(ripple, con)(type)(res.name, record)
// }

var load = function load(ripple, con) {
return function (name) {
var res = ripple.resources[name],
table = (0, _header2.default)('mysql.table')(res) || res.name,
p = (0, _promise2.default)();

con.query('SHOW COLUMNS FROM ' + table, function (e, rows) {
if (e && e.code == 'ER_NO_SUCH_TABLE') return log('no table', table), (0, _key2.default)('headers.mysql.table', '')(res);
if (e) return err(table, e);
(0, _key2.default)('headers.mysql.fields', rows.map((0, _key2.default)('Field')))(res);
(0, _key2.default)('headers.mysql.table', table)(res);

con.query('SELECT * FROM ' + table, function (e, rows) {
if (e) return err(table, e);
(0, _key2.default)('headers.mysql.fields', rows.map((0, _key2.default)('Field')))(res);
(0, _key2.default)('headers.mysql.table', table)(res);

con.query('SELECT * FROM ' + table, function (e, rows) {
if (e) return err(table, e);
log('got', table, rows.length);
ripple({ name: res.name, body: rows });
});
log('got'.green, table, (0, _str2.default)(rows.length).grey);
p.resolve(rows);
});
};
});

return p;
};
};

Expand All @@ -142,7 +142,7 @@ var sqls = {
return 'INSERT INTO {table} ({keys}) VALUES ({values});'.replace('{table}', name).replace('{keys}', (0, _keys2.default)(body).filter((0, _not2.default)((0, _is2.default)('id'))).map((0, _prepend2.default)('`')).map((0, _append2.default)('`')).join(',')).replace('{values}', (0, _keys2.default)(body).filter((0, _not2.default)((0, _is2.default)('id'))).map((0, _from2.default)(body)).map(escape).join(','));
},
update: function update(name, body) {
return 'UPDATE {table} SET {kvpairs} WHERE id = {id};'.replace('{table}', name).replace('{id}', body['id']).replace('{kvpairs}', (0, _keys2.default)(body).filter((0, _not2.default)((0, _is2.default)('id'))).map(kvpair(body)).join(','));
return (0, _keys2.default)(body).length == 1 && 'id' in body ? '' : 'UPDATE {table} SET {kvpairs} WHERE id = {id};'.replace('{table}', name).replace('{id}', body['id']).replace('{kvpairs}', (0, _keys2.default)(body).filter((0, _not2.default)((0, _is2.default)('id'))).map(kvpair(body)).join(','));
},
remove: function remove(name, body) {
return 'DELETE FROM {table} WHERE id = {id};'.replace('{table}', name).replace('{id}', body['id']);
Expand All @@ -168,7 +168,7 @@ var strip = function strip(next) {
};
};

var loaded = 'headers.mysql.loaded',
log = require('utilise/log')('[ri/mysql]'),
err = require('utilise/err')('[ri/mysql]');
var log = require('utilise/log')('[ri/mysql]'),
err = require('utilise/err')('[ri/mysql]'),
deb = _noop2.default; //require('utilise/log')('[ri/mysql]')
var escape;
96 changes: 48 additions & 48 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,56 +9,54 @@ export default function mysql(ripple){
const init = ripple => config => {
const con = require('mysql').createPool(config)
escape = con.escape.bind(con)

return {
add : exec('add')(con)
, update: exec('update')(con)
, remove: exec('remove')(con)
update: crud(ripple, con)('update')
, remove: crud(ripple, con)('remove')
, add : crud(ripple, con)('add')
, load : load(ripple, con)
// change: change(ripple, con)
}
}

const exec = type => con => ripple => (res, index, value) => {
const table = header('mysql.table')(res)
, xto = key('headers.mysql.to')(res)
, p = promise()
const crud = (ripple, con) => type => (name, record) => {
let res = ripple.resources[name]
, table = header('mysql.table')(res)
, fields = header('mysql.fields')(res)
, p = promise()
, sql

if (xto && !xto(res, { key: index, value, type })) return
if (!index) return load(con)(ripple)(res)
if (!table) return

var levels = index.split('.')
, record = levels.length === 1
? (levels.shift(), value)
: res.body[levels.shift()]
, field = levels.shift()

if (field) record = key(['id', field])(record)
if (!is.obj(record)
|| levels.length
|| (field && !is.in(res.headers.mysql.fields)(field)))
return log('cannot generate SQL for', res.name, index)

const sql = sqls[type](table, key(res.headers.mysql.fields)(record))
if (!table) return deb('no table', name)
if (!(sql = sqls[type](table, key(fields)(record)))) return deb('no sql', name)
log('SQL', sql.grey)

con.query(sql, (e, rows) => {
if (e) return err(type, table, 'failed', e)
log(type.green.bold, table, 'done', rows.insertId ? str(rows.insertId).grey : '')

rows.insertId
? p.resolve(value.id = rows.insertId)
: p.resolve()
p.resolve(rows.insertId || record.id)
})

return p
}

const load = con => ripple => res => {
const table = header('mysql.table')(res) || res.name
// const change = (ripple, con) => type => (res, change) => {
// let levels = (change.key || '').split('.')
// , xto = header('mysql.xto')(res)
// , index = levels[0]
// , field = levels[1]
// , record = change.value

// if (!change.key) return load(ripple, con)(res)
// if (!levels.length || levels.length > 2 || (field && !is.in(fields)(field))) return deb('cannot update', name, key)
// if (xto && !xto(res, change)) return deb('skipping update', name)
// if (field) record = key(['id', field])(res.body[index])
// crud(ripple, con)(type)(res.name, record)
// }

const load = (ripple, con) => name => {
const res = ripple.resources[name]
, table = header('mysql.table')(res) || res.name
, p = promise()

if (key(loaded)(res)) return
key(loaded, true)(res)

con.query(`SHOW COLUMNS FROM ${table}`, (e, rows) => {
if (e && e.code == 'ER_NO_SUCH_TABLE') return log('no table', table), key('headers.mysql.table', '')(res)
if (e) return err(table, e)
Expand All @@ -67,11 +65,12 @@ const load = con => ripple => res => {

con.query(`SELECT * FROM ${table}`, (e, rows) => {
if (e) return err(table, e)
log('got', table, rows.length)
ripple({ name: res.name, body: rows })
log('got'.green, table, str(rows.length).grey)
p.resolve(rows)
})

})

return p
}

const sqls = {
Expand All @@ -90,14 +89,15 @@ const sqls = {
.join(',')
)
}
, update(name, body) { return 'UPDATE {table} SET {kvpairs} WHERE id = {id};'
.replace('{table}', name)
.replace('{id}', body['id'])
.replace('{kvpairs}', keys(body)
.filter(not(is('id')))
.map(kvpair(body))
.join(',')
)
, update(name, body) { return keys(body).length == 1 && ('id' in body) ? ''
: 'UPDATE {table} SET {kvpairs} WHERE id = {id};'
.replace('{table}', name)
.replace('{id}', body['id'])
.replace('{kvpairs}', keys(body)
.filter(not(is('id')))
.map(kvpair(body))
.join(',')
)
}
, remove(name, body) { return 'DELETE FROM {table} WHERE id = {id};'
.replace('{table}', name)
Expand All @@ -123,13 +123,13 @@ import promise from 'utilise/promise'
import prepend from 'utilise/prepend'
import append from 'utilise/append'
import header from 'utilise/header'
import client from 'utilise/client'
import keys from 'utilise/keys'
import noop from 'utilise/noop'
import key from 'utilise/key'
import not from 'utilise/not'
import str from 'utilise/str'
import is from 'utilise/is'
const loaded = 'headers.mysql.loaded'
, log = require('utilise/log')('[ri/mysql]')
const log = require('utilise/log')('[ri/mysql]')
, err = require('utilise/err')('[ri/mysql]')
, deb = noop //require('utilise/log')('[ri/mysql]')
var escape
Loading

0 comments on commit 32e4e67

Please sign in to comment.