generator based toolkit for consuming apis, accessing postgres, and managing filesystem

npm i rain-util const $util = require('rain-util');

for fast prototyping. use sub-packages if only a subset is needed

http requests

extends request.js additional properties may be passed as params (httpSignature, multipart, headers)

const api = new $util.http('https://maps.googleapis.com/'); const api2 = new $util.http('https://my.api.com/', { 'x-default-header':'its value'}, {httpSignature:{keyId:'rsa-key-1',algorithm='rsa-sha256',signature:'Base64(RSA-SHA256(signing string))'} ); const req = new $util.http(); const apiResponse = yield mapsApi.get('maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA'); console.log('apiResponse',apiResponse); req.get('full url'); const api2Response = yield api2.post('another url', requestBody);

postgres

queries, data access objects, transactions, schema data

const conn = { host: 'localhost', db: 'postgres', user: 'postgres', password: 'postgres' }; const $postgres = new $util.postgres(conn); // connection string also acceptable if($postgres) { postgres.db.query('SELECT test'); // create a test table const tableName = 'testers'; const testTable = `DROP TABLE IF EXISTS ${tableName}; CREATE TABLE ${tableName}(id CHARACTER constYING(40))WITH(OIDS=FALSE);ALTER TABLE ${tableName} OWNER TO postgres;`; yield $postgres.db.query(testTable); // load created table into $postgres object $postgres.table(tableName); // add a record const recordId = '4a2b'; yield $postgres.tables[`${tableName}`].upsert({id: recordId}); // find created record using dao const daoRecord = yield $postgres.tables[`${tableName}`].findOne('id = ?', recordId); // find created record using sql const findRecordSQL = `SELECT * FROM ${tableName} WHERE id = '${recordId}'`; const sqlRecord = (yield $postgres.db.query(findRecordSQL)).rows[0]; // add new record $postgres.tables.books.upsert({id:'4324'}) //within transaction, find new record and then delete it $postgres.db.transaction(function*() { let record = yield $postgres.tables[`${tableName}`].findOne('id = ?', '4324'); yield $postgres.dao.delete(record); // delete by model throws if more than one row is affected yield $postgres.dao.delete('id = 4324'); // delete by query, returns count }); } // get schema information const schema = yield $postgres.schema();

generator utilities

util.genify - (function) convert regular functions into generator functions yield util.array.(forEach|map|filter|forEachSeries)

file utilities

extends co-fs - all core node fs methods available as generators

$util.fs.download - (file or file array) downloads url(s) to file(s) $util.fs.upsert - (dir or dir array) creates dir if non-existent (uses mkdirp) $util.fs.fetch - (file or dir) read file or directory contents $util.fs.rimraf - (path) yieldable rm -rf $util.fs.json.(read|write) - (file, obj, options)

requires node 4.2 or higher

credits