Skip to content

Commit d75d413

Browse files
author
pemrouz
committed
use named connections and single change event
1 parent ad55fb7 commit d75d413

File tree

3 files changed

+100
-84
lines changed

3 files changed

+100
-84
lines changed

dist/index.js

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ var _header = require('utilise/header');
99

1010
var _header2 = _interopRequireDefault(_header);
1111

12-
var _client = require('utilise/client');
13-
14-
var _client2 = _interopRequireDefault(_client);
15-
1612
var _values = require('utilise/values');
1713

1814
var _values2 = _interopRequireDefault(_values);
@@ -21,9 +17,9 @@ var _noop = require('utilise/noop');
2117

2218
var _noop2 = _interopRequireDefault(_noop);
2319

24-
var _key = require('utilise/key');
20+
var _keys = require('utilise/keys');
2521

26-
var _key2 = _interopRequireDefault(_key);
22+
var _keys2 = _interopRequireDefault(_keys);
2723

2824
var _not = require('utilise/not');
2925

@@ -33,6 +29,10 @@ var _is = require('utilise/is');
3329

3430
var _is2 = _interopRequireDefault(_is);
3531

32+
var _to = require('utilise/to');
33+
34+
var _to2 = _interopRequireDefault(_to);
35+
3636
/* istanbul ignore next */
3737
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3838

@@ -43,21 +43,22 @@ function db(ripple) {
4343
/* istanbul ignore next */
4444
var _ref = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
4545

46-
var db = _ref.db;
46+
var _ref$db = _ref.db;
47+
var db = _ref$db === undefined ? {} : _ref$db;
4748

4849
log('creating');
49-
ripple.adaptors = ripple.adaptors || {};
50-
ripple.connections = [];
5150
ripple.on('change.db', crud(ripple));
52-
connection(ripple)(db);
51+
ripple.adaptors = ripple.adaptors || {};
52+
ripple.connections = (0, _keys2.default)(db).map(function (k) {
53+
return connect(ripple)(k, db[k]);
54+
}).reduce(_to2.default.obj, {});
5355
return ripple;
5456
}
5557

56-
var connection = function connection(ripple) {
57-
return function (config) {
58-
if (!config) return ripple;
58+
var connect = function connect(ripple) {
59+
return function (id, config) {
60+
if (!config) return { id: id, invalid: err('no connection string', id) };
5961

60-
// TODO Use built-in url parse
6162
_is2.default.str(config) && (config = {
6263
type: (config = config.split('://')).shift(),
6364
user: (config = config.join('://').split(':')).shift(),
@@ -67,13 +68,11 @@ var connection = function connection(ripple) {
6768
password: config.join('@')
6869
});
6970

70-
if ((0, _values2.default)(config).some((0, _not2.default)(Boolean))) return err('incorrect connection string', config), ripple;
71-
72-
var con = (ripple.adaptors[config.type] || _noop2.default)(config);
71+
if ((0, _values2.default)(config).some((0, _not2.default)(Boolean))) return { id: id, invalid: err('incorrect connection string', id, config) };
7372

74-
con && ripple.connections.push(con);
73+
var connection = (ripple.adaptors[config.type] || _noop2.default)(config);
7574

76-
return ripple;
75+
return connection ? (connection.id = id, connection) : { id: id, invalid: err('invalid connection', id) };
7776
};
7877
};
7978

@@ -89,17 +88,13 @@ var crud = function crud(ripple) {
8988
if (!(0, _header2.default)('content-type', 'application/data')(res)) return;
9089
if ((0, _header2.default)('silentdb')(res)) return delete res.headers.silentdb;
9190
if (!type) return;
92-
log('crud', name, type);
93-
94-
ripple.connections.forEach(function (con) {
95-
return con[type](silent(ripple))(res, key, value);
91+
var updated = (0, _values2.default)(ripple.connections).filter(function (con) {
92+
return con.change && con.change(type)(res, change);
93+
}).map(function (d) {
94+
return d.id;
9695
});
97-
};
98-
};
9996

100-
var silent = function silent(ripple) {
101-
return function (res) {
102-
return (0, _key2.default)('headers.silentdb', true)(res), ripple(res);
97+
if (updated.length) log('crud', type, name, updated.join(',').grey);
10398
};
10499
};
105100

src/index.js

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
// -------------------------------------------
22
// Pipe resources to/from another source
33
// -------------------------------------------
4-
export default function db(ripple, { db } = {}){
4+
export default function db(ripple, { db = {} } = {}){
55
log('creating')
6-
ripple.adaptors = ripple.adaptors || {}
7-
ripple.connections = []
86
ripple.on('change.db', crud(ripple))
9-
connection(ripple)(db)
7+
ripple.adaptors = ripple.adaptors || {}
8+
ripple.connections = keys(db)
9+
.map(k => connect(ripple)(k, db[k]))
10+
.reduce(to.obj, {})
1011
return ripple
1112
}
1213

13-
const connection = ripple => config => {
14-
if (!config) return ripple
14+
const connect = ripple => (id, config) => {
15+
if (!config) return { id, invalid: err('no connection string', id) }
1516

16-
// TODO Use built-in url parse
1717
is.str(config) && (config = {
1818
type : (config = config.split('://')).shift()
1919
, user : (config = config.join('://').split(':')).shift()
@@ -24,15 +24,13 @@ const connection = ripple => config => {
2424
})
2525

2626
if (values(config).some(not(Boolean)))
27-
return err('incorrect connection string', config), ripple
28-
29-
const con = (ripple.adaptors[config.type] || noop)(config)
27+
return { id, invalid: err('incorrect connection string', id, config) }
3028

31-
con && ripple
32-
.connections
33-
.push(con)
29+
const connection = (ripple.adaptors[config.type] || noop)(config)
3430

35-
return ripple
31+
return connection
32+
? (connection.id = id, connection)
33+
: ({ id, invalid: err('invalid connection', id) })
3634
}
3735

3836
const crud = ripple => (name, change) => {
@@ -42,21 +40,19 @@ const crud = ripple => (name, change) => {
4240
if (!header('content-type', 'application/data')(res)) return
4341
if (header('silentdb')(res)) return delete res.headers.silentdb
4442
if (!type) return
45-
log('crud', name, type)
43+
const updated = values(ripple.connections)
44+
.filter(con => con.change && con.change(type)(res, change))
45+
.map(d => d.id)
4646

47-
ripple
48-
.connections
49-
.forEach(con => con[type](silent(ripple))(res, key, value))
47+
if (updated.length) log('crud', type, name, updated.join(',').grey)
5048
}
5149

52-
const silent = ripple => res => (key('headers.silentdb', true)(res), ripple(res))
53-
5450
import header from 'utilise/header'
55-
import client from 'utilise/client'
5651
import values from 'utilise/values'
5752
import noop from 'utilise/noop'
58-
import key from 'utilise/key'
53+
import keys from 'utilise/keys'
5954
import not from 'utilise/not'
6055
import is from 'utilise/is'
56+
import to from 'utilise/to'
6157
const err = require('utilise/err')('[ri/db]')
6258
, log = require('utilise/log')('[ri/db]')

0 commit comments

Comments
 (0)