UNPKG

fixr-compiled

Version:

Create data fixtures for testing projects

62 lines (50 loc) 1.45 kB
pg = require 'pg' sql = require 'sql' async = require 'async' sql.setDialect 'postgres' class pgEngine constructor: (engineConfig) -> @client = new pg.Client engineConfig @client.connect() beforeFix: (data, cb) -> cb null, data beforeFixRecord: (data, cb) -> cb null, data afterFixRecord: (err, cb) -> cb err afterFix: (err, cb) -> @client.end() cb err fix: (data, cb) -> @beforeFix data, (err, data) => if err return cb err cbErr = null q = async.queue (task, cb) => @_fixRecord task.table, task.record, (err) -> if err and not cbErr cbErr = err cb() , 1 q.drain = () => @afterFix cbErr, cb for table, records of data for record in records q.push table: table record: record _fixRecord: (table, record, cb) -> @beforeFixRecord record, (err, data) => query = @_getQuery table, record values = (value for column, value of record) @client.query query, values, (err) => @afterFixRecord err, cb _getQuery: (table, record) -> columns = (column for column, value of record) table = sql.define name: table columns: columns insert = table.insert record query = new sql.dialect().getQuery insert return query.text module.exports = pgEngine