From 610bb92cdfbaabc646b12e77b6a4139d532b609d Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Sat, 21 Feb 2015 11:10:47 -0700 Subject: [PATCH 01/30] Compile coffee --- lib/ez-access/ez-access-angular.js | 2 +- lib/ez-access/ez-access.js | 2 +- lib/ez-access/frontend.js | 2 +- lib/ez-access/validator.js | 2 +- lib/ez-ctrl/base.js | 2 +- lib/ez-ctrl/converter.js | 2 +- lib/ez-ctrl/func-details.js | 2 +- lib/ez-ctrl/manager.js | 2 +- lib/ez-ctrl/userError.js | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/ez-access/ez-access-angular.js b/lib/ez-access/ez-access-angular.js index ab95474..cdc1ba3 100644 --- a/lib/ez-access/ez-access-angular.js +++ b/lib/ez-access/ez-access-angular.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { (function(generator) { var EZAccess, EZRoutes, angular; diff --git a/lib/ez-access/ez-access.js b/lib/ez-access/ez-access.js index 273f052..600c8e8 100644 --- a/lib/ez-access/ez-access.js +++ b/lib/ez-access/ez-access.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; diff --git a/lib/ez-access/frontend.js b/lib/ez-access/frontend.js index e333b44..189fdd8 100644 --- a/lib/ez-access/frontend.js +++ b/lib/ez-access/frontend.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var ControllerManager, FrontEnd, FuncDetails, Q, frontEndJS, _; diff --git a/lib/ez-access/validator.js b/lib/ez-access/validator.js index 61862eb..b07e95e 100644 --- a/lib/ez-access/validator.js +++ b/lib/ez-access/validator.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { (function(generator) { var Q, UserError, validate, validator, _; diff --git a/lib/ez-ctrl/base.js b/lib/ez-ctrl/base.js index 1eb1f26..1e5fed1 100644 --- a/lib/ez-ctrl/base.js +++ b/lib/ez-ctrl/base.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var BaseController, Converter, FuncDetails, Q, UserError, Validator, inflection, multiparty, util, _; diff --git a/lib/ez-ctrl/converter.js b/lib/ez-ctrl/converter.js index 02ec903..698e20f 100644 --- a/lib/ez-ctrl/converter.js +++ b/lib/ez-ctrl/converter.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var Converter, ConverterMethods, _; diff --git a/lib/ez-ctrl/func-details.js b/lib/ez-ctrl/func-details.js index d4d7c28..b5b0646 100644 --- a/lib/ez-ctrl/func-details.js +++ b/lib/ez-ctrl/func-details.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var FuncDetails, _; diff --git a/lib/ez-ctrl/manager.js b/lib/ez-ctrl/manager.js index 63c7c79..1c99c4e 100644 --- a/lib/ez-ctrl/manager.js +++ b/lib/ez-ctrl/manager.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var ControllerManager, Q, fs, _; diff --git a/lib/ez-ctrl/userError.js b/lib/ez-ctrl/userError.js index 88607cf..04f7ebb 100644 --- a/lib/ez-ctrl/userError.js +++ b/lib/ez-ctrl/userError.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 /* * The purpose of UserError is to be able to throw an error in a promise and catch it From 23050f7a5ec3abddd5b90647cc07d67065b15b00 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Sat, 21 Feb 2015 11:11:28 -0700 Subject: [PATCH 02/30] Include base route --- lib/ez-ctrl/base.coffee | 8 ++++---- lib/ez-ctrl/base.js | 11 +++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/ez-ctrl/base.coffee b/lib/ez-ctrl/base.coffee index 869bee5..47abec3 100644 --- a/lib/ez-ctrl/base.coffee +++ b/lib/ez-ctrl/base.coffee @@ -21,13 +21,13 @@ module.exports = BaseController = if _.isFunction @initialize @initialize() if options.name - BaseController.setBaseData.call(@, NewController.modelName) + BaseController.setBaseData.call(@, NewController.modelName, NewController.idRegex, NewController.baseRoute) return _.extend(NewController, this) NewController.isAbstract = false _.extend NewController, options if options.name - NewController.setBaseData(options.name, NewController.idRegex) + NewController.setBaseData(options.name, NewController.idRegex, NewController.baseRoute) NewController.beforeEach = @extendArray 'beforeEach', options.beforeEach NewController.middleware = @extendArray 'middleware', options.middleware _.extend(NewController.prototype, @prototype, options.methods) @@ -36,10 +36,10 @@ module.exports = BaseController = extendArray: (name, extend)-> newarray = if extend then @[name].concat extend else @[name].slice 0 - setBaseData: (name, idRegex)-> + setBaseData: (name, idRegex, baseRoute = '')-> @modelName = name @tableName = inflection.tableize(@modelName) - @basePattern = "/" + @tableName + @basePattern = baseRoute + "/" + @tableName idPattern = if idRegex? if idRegex is false then '' else "(#{idRegex})" else diff --git a/lib/ez-ctrl/base.js b/lib/ez-ctrl/base.js index 1e5fed1..2506d9f 100644 --- a/lib/ez-ctrl/base.js +++ b/lib/ez-ctrl/base.js @@ -36,14 +36,14 @@ this.initialize(); } if (options.name) { - BaseController.setBaseData.call(this, NewController.modelName); + BaseController.setBaseData.call(this, NewController.modelName, NewController.idRegex, NewController.baseRoute); } }; _.extend(NewController, this); NewController.isAbstract = false; _.extend(NewController, options); if (options.name) { - NewController.setBaseData(options.name, NewController.idRegex); + NewController.setBaseData(options.name, NewController.idRegex, NewController.baseRoute); } NewController.beforeEach = this.extendArray('beforeEach', options.beforeEach); NewController.middleware = this.extendArray('middleware', options.middleware); @@ -54,11 +54,14 @@ var newarray; return newarray = extend ? this[name].concat(extend) : this[name].slice(0); }, - setBaseData: function(name, idRegex) { + setBaseData: function(name, idRegex, baseRoute) { var idPattern; + if (baseRoute == null) { + baseRoute = ''; + } this.modelName = name; this.tableName = inflection.tableize(this.modelName); - this.basePattern = "/" + this.tableName; + this.basePattern = baseRoute + "/" + this.tableName; idPattern = idRegex != null ? idRegex === false ? '' : "(" + idRegex + ")" : '([0-9]+)'; this.individualPattern = "" + this.basePattern + "/:id" + idPattern; return this.methods = ["get", "put", "post", "delete"]; From 4162b0b9eb8b460028c5d8b223a3080b3dba1133 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Sat, 7 Mar 2015 15:36:01 -0700 Subject: [PATCH 03/30] Upgrade --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9926813..80cb86f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.4.59", + "version": "0.4.60", "main": "index.js", "dependencies": { "express": "3.4.4", From e6ca9f31166e1daad686db59f4ca701f1a5a561c Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 10:40:18 -0600 Subject: [PATCH 04/30] Use bluebird instead of Q --- lib/ez-access/ez-access.coffee | 49 +++++++++++++++++----------------- lib/ez-access/frontend.coffee | 6 ++--- lib/ez-access/validator.coffee | 47 +++++++++++++++----------------- lib/ez-ctrl/base.coffee | 25 ++++++++--------- lib/ez-ctrl/manager.coffee | 5 ++-- package.json | 4 +-- 6 files changed, 66 insertions(+), 70 deletions(-) diff --git a/lib/ez-access/ez-access.coffee b/lib/ez-access/ez-access.coffee index 40856a6..0ff4e58 100644 --- a/lib/ez-access/ez-access.coffee +++ b/lib/ez-access/ez-access.coffee @@ -1,14 +1,14 @@ # Note this is a front-end file! ( (generator)-> if exports? and module.exports - Q = require 'q' + Bluebird = require 'bluebird' _ = require 'lodash' - module.exports = generator(Q, _) + module.exports = generator(Bluebird, _) else if define? and define.amd - define ['q', 'lodash'], generator + define ['bluebird', 'lodash'], generator else - window.EZAccess = generator(window.Q, window._) -)((Q, _)-> + window.EZAccess = generator(window.Bluebird, window._) +)((Bluebird, _)-> class BaseController constructor: (@_details)-> @@ -64,28 +64,27 @@ _makeRequestBase: (method, path, data)-> - deferred = Q.defer() - xmlhttp = if window.XMLHttpRequest - new XMLHttpRequest() - else - new ActiveXObject("Microsoft.XMLHTTP") + new Bluebird (resolve, reject)-> + xmlhttp = if window.XMLHttpRequest + new XMLHttpRequest() + else + new ActiveXObject("Microsoft.XMLHTTP") - xmlhttp.onreadystatechange = => - if xmlhttp.readyState is 4 and xmlhttp.status is 200 - try - deferred.resolve JSON.parse xmlhttp.responseText - catch e - console.log "EZAccessError: Response not in valid JSON", xml.responseText - deferred.reject error, "EZAccessError: Response not in valid JSON", xml.responseText + xmlhttp.onreadystatechange = => + if xmlhttp.readyState is 4 and xmlhttp.status is 200 + try + resolve JSON.parse xmlhttp.responseText + catch e + console.log "EZAccessError: Response not in valid JSON", xml.responseText + reject error, "EZAccessError: Response not in valid JSON", xml.responseText - if method is 'get' - xmlhttp.open(method, path, true) - xmlhttp.send() - else - xmlhttp.open(method, path, true) - xmlhttp.setRequestHeader('Content-Type', 'application/json') - xmlhttp.send JSON.stringify data - deferred.promise + if method is 'get' + xmlhttp.open(method, path, true) + xmlhttp.send() + else + xmlhttp.open(method, path, true) + xmlhttp.setRequestHeader('Content-Type', 'application/json') + xmlhttp.send JSON.stringify data interpretResult: (result)-> if result.success diff --git a/lib/ez-access/frontend.coffee b/lib/ez-access/frontend.coffee index c1ab193..0d29531 100644 --- a/lib/ez-access/frontend.coffee +++ b/lib/ez-access/frontend.coffee @@ -1,7 +1,7 @@ _ = require 'lodash' ControllerManager = require('../ez-ctrl/manager') FuncDetails = require('../ez-ctrl/func-details') -Q = require 'q' +Bluebird = require 'bluebird' frontEndJS = null @@ -13,7 +13,7 @@ module.exports = class FrontEnd initPromise = if dirname @controllerManager.readdir(dirname) else - Q.when true + Bluebird.resolve true initPromise.then => @controllerManager.registerRoutes app if dynoScripts @@ -30,7 +30,7 @@ module.exports = class FrontEnd res.sendfile __dirname + "/validator.js" app.get '/get-batch', (req, res)=> response = {} - Q.all _.map req.query, (value, key)=> + Bluebird.all _.map req.query, (value, key)=> Controller = @controllerManager.controllers[value.controllerName] controller = Controller.getController value.methodName controller.run req, res, (value.args or {}) diff --git a/lib/ez-access/validator.coffee b/lib/ez-access/validator.coffee index eae0adf..614013b 100644 --- a/lib/ez-access/validator.coffee +++ b/lib/ez-access/validator.coffee @@ -2,15 +2,15 @@ if exports? and module.exports _ = require('lodash') validate = require 'validator' - Q = require('q') + Bluebird = require('bluebird') UserError = require '../ez-ctrl/userError' - module.exports = generator(_, validate, Q, UserError) + module.exports = generator(_, validate, Bluebird, UserError) else if define? and define.amd - define ['lodash', 'validate', 'q', 'UserError'], generator + define ['lodash', 'validate', 'bluebird', 'UserError'], generator else - {_, validator, Q, UserError} = window - window.Validator = generator(_, validator, Q, UserError) -)((_, validate, Q, UserError)-> + {_, validator, Bluebird, UserError} = window + window.Validator = generator(_, validator, Bluebird, UserError) +)((_, validate, Bluebird, UserError)-> check = validate.check Validator = validate: (validation, data, controllerName)-> @@ -22,13 +22,12 @@ promises.push @validateField(validatorData, field, data[field], controllerName) else if validatorData.default data[field] = validatorData.default - Q.allSettled(promises).then (results)-> - deferred = Q.defer() + Bluebird.settle(promises).then (results)-> errors = _.filter results, (result)-> - result.state != "fulfilled" + not result.isFulfilled() if errors.length > 0 errors = _.reduce errors, (memo, result)-> - reason = result.reason + reason = result.reason() # exit validation if there was an unexpected error throw reason if reason instanceof Error memo[reason.field] = reason.errors @@ -36,10 +35,9 @@ , {} error = new UserError 'Validate' error.errors = errors - deferred.reject error + throw error else - deferred.resolve(data) - deferred.promise + data ### Returns a promise that either resolves, or rejects with a list of errors: i.e. @@ -55,21 +53,18 @@ else if validators for validator, validatorData of validators promises.push @runValidate value, validator, validatorData, field, controllerName - Q.allSettled(promises).then (results)-> - deferred = Q.defer() - readableErrors = (for result in results when result.state isnt "fulfilled" - if result.reason instanceof Error + Bluebird.settle(promises).then (results)-> + readableErrors = (for result in results when not result.isFulfilled() + reason = result.reason() + if reason instanceof Error # Throw error and exit validation for any unexpected errors - throw result.reason - result.reason + throw reason + reason ) if readableErrors.length > 0 - deferred.reject + throw errors: readableErrors field: field - else - deferred.resolve() - deferred.promise ### Returns a promise that either is resolved, or is rejected with the readable error. Note that if validator is "type", then the validatorData will be transformed to is. @@ -78,7 +73,7 @@ type: "int" => isInt ### runValidate: (value, validator, validatorData, field, controllerName)-> - Q.fcall => + Bluebird.try => if validator is "type" if _.isString validatorData validator = 'is' + validatorData.substr(0, 1).toUpperCase() + validatorData.substr(1) @@ -91,7 +86,7 @@ else # TODO: support more complex array validation throw new Error 'only types are supported by array validators' - return Q.all(for value_part in value + return Bluebird.all(for value_part in value @validateField(validators, field, value_part, controllerName) ).fail -> throw new UserError "should be an array of " + validators.type @@ -113,7 +108,7 @@ else @ValidationMethods[validator] value, validatorData, field, controllerName .fail (error)-> - Q.reject if error instanceof UserError then error.message else error + Bluebird.reject if error instanceof UserError then error.message else error registerValidator: (name, fn)-> @ValidationMethods[name] = fn diff --git a/lib/ez-ctrl/base.coffee b/lib/ez-ctrl/base.coffee index 47abec3..464278d 100644 --- a/lib/ez-ctrl/base.coffee +++ b/lib/ez-ctrl/base.coffee @@ -1,12 +1,13 @@ FuncDetails = require('./func-details') Converter = require('./converter') -Q = require('q') +Bluebird = require 'bluebird' _ = require('lodash') inflection = require('inflection') Converter = require('./converter') Validator = require('../ez-access/validator') UserError = require './userError' -multiparty = require 'multiparty' +{Form} = require 'multiparty' +Bluebird.promisifyAll Form util = require 'util' module.exports = BaseController = @@ -170,17 +171,17 @@ BaseController.prototype = @handleForked() handleForked: -> - Q.allSettled @forked + Bluebird.settle @forked .then (results)=> results.forEach (result)=> - unless result.state is 'fulfilled' - @logError 'ForkError', result.reason + unless result.isFulfilled() + @logError 'ForkError', result.reason() getDisplayName: -> "#{@modelName}.#{@route}" steps: (steps, first)-> - promise = Q.when first + promise = Bluebird.resolve first steps.reduce (promise, step)=> promise.then step.bind @ , promise @@ -202,14 +203,14 @@ BaseController.prototype = runBefore: (data, i = 0)-> if i < @before.length - Q.fcall(=> @applyFunction(@before[i], data)) + Bluebird.try(=> @applyFunction(@before[i], data)) .then => @runBefore data, i + 1 else data runLogic: (data)-> - Q.fcall => + Bluebird.try => @applyFunction @logic, data clean: (object)-> @@ -234,11 +235,11 @@ BaseController.prototype = @parseFiles().then => @files?[field]?[0] else - Q.fcall => @request.param(field) + Bluebird.try => @request.param(field) parseFiles: -> - form = new multiparty.Form() - Q.ninvoke(form, 'parse', @request).spread( (fields, files)=> + form = new Form() + form.parseAsync(@request).spread( (fields, files)=> @files = files ).fail (error)=> if error.message is 'Expected CR Received 45' @@ -254,7 +255,7 @@ BaseController.prototype = if value? data[field] = value )(field, value) - Q.all(promises).then -> + Bluebird.all(promises).then -> data translateSuccessResponse: (response) -> diff --git a/lib/ez-ctrl/manager.coffee b/lib/ez-ctrl/manager.coffee index 68e61b9..7458eb2 100644 --- a/lib/ez-ctrl/manager.coffee +++ b/lib/ez-ctrl/manager.coffee @@ -1,6 +1,7 @@ _ = require('lodash') -Q = require 'q' +Bluebird = require 'bluebird' fs = require 'fs' +Bluebird.promisifyAll fs module.exports = class ControllerManager constructor: -> @@ -12,7 +13,7 @@ module.exports = class ControllerManager memo , {} readdir: (dirname)-> - Q.nfcall(fs.readdir, dirname).then (files)=> + fs.readdirAsync(dirname).then (files)=> @loadFiles dirname, files, '.js' if Object.keys(@controllers).length is 0 @loadFiles dirname, files, '.coffee' diff --git a/package.json b/package.json index 80cb86f..f70de0e 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "ez-ctrl", - "version": "0.4.60", + "version": "0.5.0", "main": "index.js", "dependencies": { + "bluebird": "^2.9.25", "express": "3.4.4", "inflection": "1.2.6", "lodash": "2.4.1", "multiparty": "3.1.0", - "q": "0.9.7", "validator": "2.0.0" }, "devDependencies": { From d7178e9561a41a6086c2b1704102ae51efed3eeb Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 10:40:55 -0600 Subject: [PATCH 05/30] Compile javascript --- lib/ez-access/ez-access.js | 62 +++++++++++++++++++------------------- lib/ez-access/frontend.js | 8 ++--- lib/ez-access/validator.js | 55 +++++++++++++++------------------ lib/ez-ctrl/base.js | 28 +++++++++-------- lib/ez-ctrl/manager.js | 8 +++-- 5 files changed, 80 insertions(+), 81 deletions(-) diff --git a/lib/ez-access/ez-access.js b/lib/ez-access/ez-access.js index 600c8e8..79462a4 100644 --- a/lib/ez-access/ez-access.js +++ b/lib/ez-access/ez-access.js @@ -4,17 +4,17 @@ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; (function(generator) { - var Q, _; + var Bluebird, _; if ((typeof exports !== "undefined" && exports !== null) && module.exports) { - Q = require('q'); + Bluebird = require('bluebird'); _ = require('lodash'); - return module.exports = generator(Q, _); + return module.exports = generator(Bluebird, _); } else if ((typeof define !== "undefined" && define !== null) && define.amd) { - return define(['q', 'lodash'], generator); + return define(['bluebird', 'lodash'], generator); } else { - return window.EZAccess = generator(window.Q, window._); + return window.EZAccess = generator(window.Bluebird, window._); } - })(function(Q, _) { + })(function(Bluebird, _) { var BaseController, Batch, BatchController, Controller, EZAccess; BaseController = (function() { function BaseController(_details) { @@ -93,32 +93,32 @@ }; BaseController.prototype._makeRequestBase = function(method, path, data) { - var deferred, xmlhttp; - deferred = Q.defer(); - xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); - xmlhttp.onreadystatechange = (function(_this) { - return function() { - var e; - if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { - try { - return deferred.resolve(JSON.parse(xmlhttp.responseText)); - } catch (_error) { - e = _error; - console.log("EZAccessError: Response not in valid JSON", xml.responseText); - return deferred.reject(error, "EZAccessError: Response not in valid JSON", xml.responseText); + return new Bluebird(function(resolve, reject) { + var xmlhttp; + xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); + xmlhttp.onreadystatechange = (function(_this) { + return function() { + var e; + if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { + try { + return resolve(JSON.parse(xmlhttp.responseText)); + } catch (_error) { + e = _error; + console.log("EZAccessError: Response not in valid JSON", xml.responseText); + return reject(error, "EZAccessError: Response not in valid JSON", xml.responseText); + } } - } - }; - })(this); - if (method === 'get') { - xmlhttp.open(method, path, true); - xmlhttp.send(); - } else { - xmlhttp.open(method, path, true); - xmlhttp.setRequestHeader('Content-Type', 'application/json'); - xmlhttp.send(JSON.stringify(data)); - } - return deferred.promise; + }; + })(this); + if (method === 'get') { + xmlhttp.open(method, path, true); + return xmlhttp.send(); + } else { + xmlhttp.open(method, path, true); + xmlhttp.setRequestHeader('Content-Type', 'application/json'); + return xmlhttp.send(JSON.stringify(data)); + } + }); }; BaseController.prototype.interpretResult = function(result) { diff --git a/lib/ez-access/frontend.js b/lib/ez-access/frontend.js index 189fdd8..5ae00f7 100644 --- a/lib/ez-access/frontend.js +++ b/lib/ez-access/frontend.js @@ -1,6 +1,6 @@ // Generated by CoffeeScript 1.8.0 (function() { - var ControllerManager, FrontEnd, FuncDetails, Q, frontEndJS, _; + var Bluebird, ControllerManager, FrontEnd, FuncDetails, frontEndJS, _; _ = require('lodash'); @@ -8,7 +8,7 @@ FuncDetails = require('../ez-ctrl/func-details'); - Q = require('q'); + Bluebird = require('bluebird'); frontEndJS = null; @@ -19,7 +19,7 @@ FrontEnd.prototype.registerRoutes = function(app, dirname, dynoScripts) { var initPromise; - initPromise = dirname ? this.controllerManager.readdir(dirname) : Q.when(true); + initPromise = dirname ? this.controllerManager.readdir(dirname) : Bluebird.resolve(true); return initPromise.then((function(_this) { return function() { _this.controllerManager.registerRoutes(app); @@ -44,7 +44,7 @@ return app.get('/get-batch', function(req, res) { var response; response = {}; - return Q.all(_.map(req.query, function(value, key) { + return Bluebird.all(_.map(req.query, function(value, key) { var Controller, controller; Controller = _this.controllerManager.controllers[value.controllerName]; controller = Controller.getController(value.methodName); diff --git a/lib/ez-access/validator.js b/lib/ez-access/validator.js index b07e95e..21ce59b 100644 --- a/lib/ez-access/validator.js +++ b/lib/ez-access/validator.js @@ -1,20 +1,20 @@ // Generated by CoffeeScript 1.8.0 (function() { (function(generator) { - var Q, UserError, validate, validator, _; + var Bluebird, UserError, validate, validator, _; if ((typeof exports !== "undefined" && exports !== null) && module.exports) { _ = require('lodash'); validate = require('validator'); - Q = require('q'); + Bluebird = require('bluebird'); UserError = require('../ez-ctrl/userError'); - return module.exports = generator(_, validate, Q, UserError); + return module.exports = generator(_, validate, Bluebird, UserError); } else if ((typeof define !== "undefined" && define !== null) && define.amd) { - return define(['lodash', 'validate', 'q', 'UserError'], generator); + return define(['lodash', 'validate', 'bluebird', 'UserError'], generator); } else { - _ = window._, validator = window.validator, Q = window.Q, UserError = window.UserError; - return window.Validator = generator(_, validator, Q, UserError); + _ = window._, validator = window.validator, Bluebird = window.Bluebird, UserError = window.UserError; + return window.Validator = generator(_, validator, Bluebird, UserError); } - })(function(_, validate, Q, UserError) { + })(function(_, validate, Bluebird, UserError) { var Validator, check; check = validate.check; return Validator = { @@ -30,16 +30,15 @@ data[field] = validatorData["default"]; } } - return Q.allSettled(promises).then(function(results) { - var deferred, error, errors; - deferred = Q.defer(); + return Bluebird.settle(promises).then(function(results) { + var error, errors; errors = _.filter(results, function(result) { - return result.state !== "fulfilled"; + return !result.isFulfilled(); }); if (errors.length > 0) { errors = _.reduce(errors, function(memo, result) { var reason; - reason = result.reason; + reason = result.reason(); if (reason instanceof Error) { throw reason; } @@ -48,11 +47,10 @@ }, {}); error = new UserError('Validate'); error.errors = errors; - deferred.reject(error); + throw error; } else { - deferred.resolve(data); + return data; } - return deferred.promise; }); }, @@ -73,33 +71,30 @@ promises.push(this.runValidate(value, validator, validatorData, field, controllerName)); } } - return Q.allSettled(promises).then(function(results) { - var deferred, readableErrors, result; - deferred = Q.defer(); + return Bluebird.settle(promises).then(function(results) { + var readableErrors, reason, result; readableErrors = (function() { var _i, _len, _results; _results = []; for (_i = 0, _len = results.length; _i < _len; _i++) { result = results[_i]; - if (!(result.state !== "fulfilled")) { + if (!(!result.isFulfilled())) { continue; } - if (result.reason instanceof Error) { - throw result.reason; + reason = result.reason(); + if (reason instanceof Error) { + throw reason; } - _results.push(result.reason); + _results.push(reason); } return _results; })(); if (readableErrors.length > 0) { - deferred.reject({ + throw { errors: readableErrors, field: field - }); - } else { - deferred.resolve(); + }; } - return deferred.promise; }); }, @@ -111,7 +106,7 @@ type: "int" => isInt */ runValidate: function(value, validator, validatorData, field, controllerName) { - return Q.fcall((function(_this) { + return Bluebird["try"]((function(_this) { return function() { var args, checker, e, validators, value_part; if (validator === "type") { @@ -130,7 +125,7 @@ } else { throw new Error('only types are supported by array validators'); } - return Q.all((function() { + return Bluebird.all((function() { var _i, _len, _results; _results = []; for (_i = 0, _len = value.length; _i < _len; _i++) { @@ -170,7 +165,7 @@ } }; })(this)).fail(function(error) { - return Q.reject(error instanceof UserError ? error.message : error); + return Bluebird.reject(error instanceof UserError ? error.message : error); }); }, registerValidator: function(name, fn) { diff --git a/lib/ez-ctrl/base.js b/lib/ez-ctrl/base.js index 2506d9f..e8e7031 100644 --- a/lib/ez-ctrl/base.js +++ b/lib/ez-ctrl/base.js @@ -1,12 +1,12 @@ // Generated by CoffeeScript 1.8.0 (function() { - var BaseController, Converter, FuncDetails, Q, UserError, Validator, inflection, multiparty, util, _; + var BaseController, Bluebird, Converter, Form, FuncDetails, UserError, Validator, inflection, util, _; FuncDetails = require('./func-details'); Converter = require('./converter'); - Q = require('q'); + Bluebird = require('bluebird'); _ = require('lodash'); @@ -18,7 +18,9 @@ UserError = require('./userError'); - multiparty = require('multiparty'); + Form = require('multiparty').Form; + + Bluebird.promisifyAll(Form); util = require('util'); @@ -217,11 +219,11 @@ })(this)); }, handleForked: function() { - return Q.allSettled(this.forked).then((function(_this) { + return Bluebird.settle(this.forked).then((function(_this) { return function(results) { return results.forEach(function(result) { - if (result.state !== 'fulfilled') { - return _this.logError('ForkError', result.reason); + if (!result.isFulfilled()) { + return _this.logError('ForkError', result.reason()); } }); }; @@ -232,7 +234,7 @@ }, steps: function(steps, first) { var promise; - promise = Q.when(first); + promise = Bluebird.resolve(first); return steps.reduce((function(_this) { return function(promise, step) { return promise.then(step.bind(_this)); @@ -258,7 +260,7 @@ i = 0; } if (i < this.before.length) { - return Q.fcall((function(_this) { + return Bluebird["try"]((function(_this) { return function() { return _this.applyFunction(_this.before[i], data); }; @@ -272,7 +274,7 @@ } }, runLogic: function(data) { - return Q.fcall((function(_this) { + return Bluebird["try"]((function(_this) { return function() { return _this.applyFunction(_this.logic, data); }; @@ -307,7 +309,7 @@ })(this)); } } else { - return Q.fcall((function(_this) { + return Bluebird["try"]((function(_this) { return function() { return _this.request.param(field); }; @@ -316,8 +318,8 @@ }, parseFiles: function() { var form; - form = new multiparty.Form(); - return Q.ninvoke(form, 'parse', this.request).spread((function(_this) { + form = new Form(); + return form.parseAsync(this.request).spread((function(_this) { return function(fields, files) { return _this.files = files; }; @@ -352,7 +354,7 @@ } return _results; }).call(this); - return Q.all(promises).then(function() { + return Bluebird.all(promises).then(function() { return data; }); }, diff --git a/lib/ez-ctrl/manager.js b/lib/ez-ctrl/manager.js index 1c99c4e..7d31c47 100644 --- a/lib/ez-ctrl/manager.js +++ b/lib/ez-ctrl/manager.js @@ -1,13 +1,15 @@ // Generated by CoffeeScript 1.8.0 (function() { - var ControllerManager, Q, fs, _; + var Bluebird, ControllerManager, fs, _; _ = require('lodash'); - Q = require('q'); + Bluebird = require('bluebird'); fs = require('fs'); + Bluebird.promisifyAll(fs); + module.exports = ControllerManager = (function() { function ControllerManager() { this.controllers = {}; @@ -23,7 +25,7 @@ }; ControllerManager.prototype.readdir = function(dirname) { - return Q.nfcall(fs.readdir, dirname).then((function(_this) { + return fs.readdirAsync(dirname).then((function(_this) { return function(files) { _this.loadFiles(dirname, files, '.js'); if (Object.keys(_this.controllers).length === 0) { From d4caf50d0208ad9b449586ebd64d4abf389b03a2 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 10:41:09 -0600 Subject: [PATCH 06/30] Bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f70de0e..0116c38 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.0", + "version": "0.5.1", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From daee1b4ec532ad9a9ce7850fa0999480ad0e5140 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:06:32 -0600 Subject: [PATCH 07/30] Fixed switch to bluebird --- lib/ez-access/validator.coffee | 4 ++-- lib/ez-access/validator.js | 4 ++-- lib/ez-ctrl/base.coffee | 8 ++++---- lib/ez-ctrl/base.js | 8 ++++---- package.json | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/ez-access/validator.coffee b/lib/ez-access/validator.coffee index 614013b..f2d46d1 100644 --- a/lib/ez-access/validator.coffee +++ b/lib/ez-access/validator.coffee @@ -88,7 +88,7 @@ throw new Error 'only types are supported by array validators' return Bluebird.all(for value_part in value @validateField(validators, field, value_part, controllerName) - ).fail -> + ).catch -> throw new UserError "should be an array of " + validators.type else # TODO: support object validation @@ -107,7 +107,7 @@ throw new Error("Validation method '#{validator}' does not exist") else @ValidationMethods[validator] value, validatorData, field, controllerName - .fail (error)-> + .catch (error)-> Bluebird.reject if error instanceof UserError then error.message else error registerValidator: (name, fn)-> diff --git a/lib/ez-access/validator.js b/lib/ez-access/validator.js index 21ce59b..02a4ea4 100644 --- a/lib/ez-access/validator.js +++ b/lib/ez-access/validator.js @@ -133,7 +133,7 @@ _results.push(this.validateField(validators, field, value_part, controllerName)); } return _results; - }).call(_this)).fail(function() { + }).call(_this))["catch"](function() { throw new UserError("should be an array of " + validators.type); }); } else { @@ -164,7 +164,7 @@ return _this.ValidationMethods[validator](value, validatorData, field, controllerName); } }; - })(this)).fail(function(error) { + })(this))["catch"](function(error) { return Bluebird.reject(error instanceof UserError ? error.message : error); }); }, diff --git a/lib/ez-ctrl/base.coffee b/lib/ez-ctrl/base.coffee index 464278d..f9ee369 100644 --- a/lib/ez-ctrl/base.coffee +++ b/lib/ez-ctrl/base.coffee @@ -161,11 +161,11 @@ BaseController.prototype = @validate @runLogic @translateSuccessResponse - ]).fail (reason)=> + ]).catch (reason)=> @translateErrorResponse reason .then (result)=> @send result - .fail (reason) => + .catch (reason) => @logError 'UnhandledError', reason .then => @handleForked() @@ -195,7 +195,7 @@ BaseController.prototype = @validate @runLogic @translateSuccessResponse - ], data).fail (reason)=> + ], data).catch (reason)=> @translateErrorResponse reason .then (result)=> @handleForked() @@ -241,7 +241,7 @@ BaseController.prototype = form = new Form() form.parseAsync(@request).spread( (fields, files)=> @files = files - ).fail (error)=> + ).catch (error)=> if error.message is 'Expected CR Received 45' @files = {} else diff --git a/lib/ez-ctrl/base.js b/lib/ez-ctrl/base.js index e8e7031..1e70f21 100644 --- a/lib/ez-ctrl/base.js +++ b/lib/ez-ctrl/base.js @@ -200,7 +200,7 @@ this.request = req; this.response = res; this.next = next; - return this.steps([this.getData, this.runBefore, this.convert, this.validate, this.runLogic, this.translateSuccessResponse]).fail((function(_this) { + return this.steps([this.getData, this.runBefore, this.convert, this.validate, this.runLogic, this.translateSuccessResponse])["catch"]((function(_this) { return function(reason) { return _this.translateErrorResponse(reason); }; @@ -208,7 +208,7 @@ return function(result) { return _this.send(result); }; - })(this)).fail((function(_this) { + })(this))["catch"]((function(_this) { return function(reason) { return _this.logError('UnhandledError', reason); }; @@ -244,7 +244,7 @@ run: function(req, res, data) { this.request = req; this.response = res; - return this.steps([this.runBefore, this.convert, this.validate, this.runLogic, this.translateSuccessResponse], data).fail((function(_this) { + return this.steps([this.runBefore, this.convert, this.validate, this.runLogic, this.translateSuccessResponse], data)["catch"]((function(_this) { return function(reason) { return _this.translateErrorResponse(reason); }; @@ -323,7 +323,7 @@ return function(fields, files) { return _this.files = files; }; - })(this)).fail((function(_this) { + })(this))["catch"]((function(_this) { return function(error) { if (error.message === 'Expected CR Received 45') { return _this.files = {}; diff --git a/package.json b/package.json index 0116c38..876652a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.1", + "version": "0.5.2", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From 1160d2baf2ac9fcb0bdca50468e49e61e0d7912c Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:29:33 -0600 Subject: [PATCH 08/30] Test updates --- test/test_logic.coffee | 16 ++--- test/test_logic.js | 19 +++--- test/test_server.coffee | 83 +++++++++++----------- test/test_server.js | 102 ++++++++++++++-------------- test/test_testers.js | 2 +- test/test_validator.coffee | 20 +++--- test/test_validator.js | 22 +++--- test_data/data.coffee | 15 ++-- test_data/data.js | 21 +++--- test_data/routes/async_users.coffee | 43 ++++-------- test_data/routes/async_users.js | 61 +++++++---------- test_data/routes/index.coffee | 1 - test_data/routes/index.js | 6 +- test_data/routes/users.coffee | 1 - test_data/routes/users.js | 6 +- test_data/run_server.js | 2 +- test_data/server.coffee | 2 +- test_data/server.js | 4 +- 18 files changed, 199 insertions(+), 227 deletions(-) diff --git a/test/test_logic.coffee b/test/test_logic.coffee index cb5b521..81cd9a1 100644 --- a/test/test_logic.coffee +++ b/test/test_logic.coffee @@ -88,7 +88,7 @@ describe 'UserController', -> it 'should work with add', -> routeDetails = UserController.getRouteDetails 'add' - assert.equal routeDetails.method, 'put' + assert.equal routeDetails.method, 'post' assert.equal routeDetails.pattern, '/users' assert.ok _.isFunction routeDetails.logic johnnyboy = @@ -103,7 +103,7 @@ describe 'UserController', -> it 'should work with save', -> routeDetails = UserController.getRouteDetails 'save' - assert.equal routeDetails.method, 'post' + assert.equal routeDetails.method, 'put' assert.ok _.isFunction routeDetails.logic newName = 'Shirley Tate' value = routeDetails.logic 1, name: newName @@ -160,7 +160,7 @@ describe 'UserController', -> assert.equal errors.name.length, 1 assert.equal errors.name[0], 'String is not in range' done() - .fail (error)-> + .catch (error)-> done(error) @@ -180,7 +180,7 @@ describe 'UserController', -> assert.equal errors.name[0], 'String is not in range' assert.equal errors.username[0], 'String is not in range' done() - .fail (error)-> + .catch (error)-> done(error) @@ -203,7 +203,7 @@ describe 'UserController', -> assert.equal errors.id[0], 'does not exist' assert.equal errors.username[0], 'must be unique' done() - .fail (error)-> + .catch (error)-> done(error) @@ -227,7 +227,7 @@ describe 'UserController', -> assert.ok result assert.equal result, true done() - .fail done + .catch done it 'should catch the error as a promise as well.', (done)-> controller = UserController.getController 'postLogin' controller.runLogic @@ -235,7 +235,7 @@ describe 'UserController', -> username: 'yourdeveloperfriend' .then (result)-> done new Error 'shouldn\'t have resolved.' + JSON.stringify result - .fail (error)-> + .catch (error)-> assert.ok error assert.equal error.constructor, UserError assert.equal error.message, 'Invalid username or password' @@ -257,7 +257,7 @@ describe 'UserController', -> try #FrontEnd = eval(frontEndMethods) catch e - assert.fail('', e) + assert.catch('', e) describe 'converter', -> Converter = base.Converter diff --git a/test/test_logic.js b/test/test_logic.js index 34746c0..6dee9e7 100644 --- a/test/test_logic.js +++ b/test/test_logic.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var AsyncUserController, FrontEnd, TestData, UserController, UserError, Validator, assert, base, _; @@ -141,7 +141,7 @@ it('should work with add', function() { var data, johnnyboy, routeDetails, value; routeDetails = UserController.getRouteDetails('add'); - assert.equal(routeDetails.method, 'put'); + assert.equal(routeDetails.method, 'post'); assert.equal(routeDetails.pattern, '/users'); assert.ok(_.isFunction(routeDetails.logic)); johnnyboy = { @@ -158,7 +158,7 @@ it('should work with save', function() { var data, newName, routeDetails, value; routeDetails = UserController.getRouteDetails('save'); - assert.equal(routeDetails.method, 'post'); + assert.equal(routeDetails.method, 'put'); assert.ok(_.isFunction(routeDetails.logic)); newName = 'Shirley Tate'; value = routeDetails.logic(1, { @@ -223,7 +223,7 @@ assert.equal(errors.name.length, 1); assert.equal(errors.name[0], 'String is not in range'); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -244,7 +244,7 @@ assert.equal(errors.name[0], 'String is not in range'); assert.equal(errors.username[0], 'String is not in range'); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -258,6 +258,7 @@ }).then(function(result) { return done(new Error('Didn\'t throw an error')); }, function(error) { + console.log('error', error); var errors; errors = error.errors; assert.equal(error.constructor, UserError); @@ -268,7 +269,7 @@ assert.equal(errors.id[0], 'does not exist'); assert.equal(errors.username[0], 'must be unique'); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -295,7 +296,7 @@ assert.ok(result); assert.equal(result, true); return done(); - }).fail(done); + })["catch"](done); }); return it('should catch the error as a promise as well.', function(done) { var controller; @@ -305,7 +306,7 @@ username: 'yourdeveloperfriend' }).then(function(result) { return done(new Error('shouldn\'t have resolved.' + JSON.stringify(result))); - }).fail(function(error) { + })["catch"](function(error) { assert.ok(error); assert.equal(error.constructor, UserError); assert.equal(error.message, 'Invalid username or password'); @@ -334,7 +335,7 @@ } catch (_error) { e = _error; - return assert.fail('', e); + return assert["catch"]('', e); } }); }); diff --git a/test/test_server.coffee b/test/test_server.coffee index e1ae892..e33b0d7 100644 --- a/test/test_server.coffee +++ b/test/test_server.coffee @@ -1,5 +1,5 @@ http = require 'http' -Q = require 'q' +Bluebird = require 'bluebird' assert = require 'assert' _ = require "lodash" TestData = require '../test_data/data' @@ -13,28 +13,27 @@ describe "Test Server", -> beforeEach -> TestData.resetData() makeRequest = (data, postData)-> - deferred = Q.defer() - data.port = 3000 - data.hostname = "localhost" - data.headers = - "Content-Type": "application/json" - req = http.request data, (res)-> - data = "" - res.setEncoding "utf8" - res.on "data", (chunk)-> - data += chunk - res.on "end", -> - try - deferred.resolve JSON.parse(data) - catch e - console.log e, data - deferred.reject "Failed to parse json" - .on "error", (error)-> - deferred.reject "Request error" + error - if postData - req.write JSON.stringify postData - req.end() - deferred.promise + new Bluebird (resolve, reject)-> + data.port = 3000 + data.hostname = "localhost" + data.headers = + "Content-Type": "application/json" + req = http.request data, (res)-> + data = "" + res.setEncoding "utf8" + res.on "data", (chunk)-> + data += chunk + res.on "end", -> + try + resolve JSON.parse(data) + catch e + console.log e, data + reject "Failed to parse json" + .on "error", (error)-> + reject "Request error" + error + if postData + req.write JSON.stringify postData + req.end() doIt = (type)-> describe "making a #{type} request", -> it "should successfully make the request", (done)-> @@ -47,7 +46,7 @@ describe "Test Server", -> assert.equal data.response.length, 3 assert.equal data.response[0].name, "Nathan Tate" done() - .fail (error)-> + .catch (error)-> done(error) it "should get a single user", (done)-> makeRequest @@ -57,11 +56,11 @@ describe "Test Server", -> assert.ok data.response assert.equal data.response.name, "Baby Tate" done() - .fail (error)-> + .catch (error)-> done error it "should update a single user", (done)-> makeRequest - method: "POST", + method: "PUT", path: "/#{type}/2" , name: "Ren Tate" @@ -73,11 +72,11 @@ describe "Test Server", -> assert.equal userData.name, "Ren Tate" assert.equal userData.username, "soonToCome" done() - .fail (error)-> + .catch (error)-> done error it "should add a single user", (done)-> makeRequest - method: "PUT", + method: "POST", path: "/#{type}" , name: "Another Tate" @@ -92,7 +91,7 @@ describe "Test Server", -> assert.equal userData.username, "AnotherTate" assert.equal userData.password, "booyaBaby" done() - .fail (error)-> + .catch (error)-> done error doIt "users" doIt "async_users" @@ -111,7 +110,7 @@ describe "Test Server", -> assert.ok error assert.equal error.message, 'object is not a function' done() - .fail (error)-> + .catch (error)-> done error it 'shouldnt fail on a 0', (done)-> makeRequest @@ -124,7 +123,7 @@ describe "Test Server", -> assert.equal data.success, true assert.equal data.response, 'Result' done() - .fail done + .catch done it "should use an id", (done)-> makeRequest method: "GET", @@ -134,7 +133,7 @@ describe "Test Server", -> assert.equal data.success, true assert.equal data.response, 'Result' done() - .fail (error)-> + .catch (error)-> done error it 'should give me required error', (done)-> makeRequest @@ -148,11 +147,11 @@ describe "Test Server", -> assert.equal data.success, false assert.equal data.error, 'Invalid username or password' done() - .fail (error)-> + .catch (error)-> done error it "should give me required validation error", (done)-> makeRequest - method: "PUT", + method: "POST", path: "/users" , name: "Booya Baby" @@ -162,11 +161,11 @@ describe "Test Server", -> assert.equal data.errors.username[0], "is required" assert.equal data.errors.password[0], "is required" done() - .fail (error)-> + .catch (error)-> done error it 'shouldn\'t let me use an array when a string is required', (done)-> makeRequest - method: 'PUT' + method: 'POST' path: '/users' , name: ['booya', 'baby'] @@ -177,7 +176,7 @@ describe "Test Server", -> assert.equal data.success, false assert.equal data.errors.name[0], 'must be a string' done() - .fail (error)-> + .catch (error)-> done error describe "middleware", -> it "should run base and user", (done)-> @@ -189,7 +188,7 @@ describe "Test Server", -> assert.equal TestData.middleware.userRan, 1 assert.equal TestData.middleware.asyncRan, 0 done() - .fail (reason)-> + .catch (reason)-> done reason it "should run base and async", (done)-> makeRequest @@ -200,7 +199,7 @@ describe "Test Server", -> assert.equal TestData.middleware.userRan, 0 assert.equal TestData.middleware.asyncRan, 1 done() - .fail (reason)-> + .catch (reason)-> done reason describe "beforeEach", -> it "should run base and user", (done)-> @@ -212,7 +211,7 @@ describe "Test Server", -> assert.equal TestData.beforeEach.userRan, 1 assert.equal TestData.beforeEach.asyncRan, 0 done() - .fail (reason)-> + .catch (reason)-> done reason it "should run base and async", (done)-> makeRequest @@ -223,7 +222,7 @@ describe "Test Server", -> assert.equal TestData.beforeEach.userRan, 0 assert.equal TestData.beforeEach.asyncRan, 2 done() - .fail (reason)-> + .catch (reason)-> done reason it "should run on before too", (done)-> makeRequest @@ -235,5 +234,5 @@ describe "Test Server", -> assert.equal TestData.beforeEach.asyncRan, 2 assert.ok TestData.beforeEach.other.crazy done() - .fail (reason)-> + .catch (reason)-> done reason diff --git a/test/test_server.js b/test/test_server.js index 39bc842..f44d255 100644 --- a/test/test_server.js +++ b/test/test_server.js @@ -1,10 +1,10 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { - var Q, TestData, TestServer, assert, http, _; + var Bluebird, TestData, TestServer, assert, http, _; http = require('http'); - Q = require('q'); + Bluebird = require('bluebird'); assert = require('assert'); @@ -26,37 +26,37 @@ return TestData.resetData(); }); makeRequest = function(data, postData) { - var deferred, req; - deferred = Q.defer(); - data.port = 3000; - data.hostname = "localhost"; - data.headers = { - "Content-Type": "application/json" - }; - req = http.request(data, function(res) { - data = ""; - res.setEncoding("utf8"); - res.on("data", function(chunk) { - return data += chunk; - }); - return res.on("end", function() { - var e; - try { - return deferred.resolve(JSON.parse(data)); - } catch (_error) { - e = _error; - console.log(e, data); - return deferred.reject("Failed to parse json"); - } + return new Bluebird(function(resolve, reject) { + var req; + data.port = 3000; + data.hostname = "localhost"; + data.headers = { + "Content-Type": "application/json" + }; + req = http.request(data, function(res) { + data = ""; + res.setEncoding("utf8"); + res.on("data", function(chunk) { + return data += chunk; + }); + return res.on("end", function() { + var e; + try { + return resolve(JSON.parse(data)); + } catch (_error) { + e = _error; + console.log(e, data); + return reject("Failed to parse json"); + } + }); + }).on("error", function(error) { + return reject("Request error" + error); }); - }).on("error", function(error) { - return deferred.reject("Request error" + error); + if (postData) { + req.write(JSON.stringify(postData)); + } + return req.end(); }); - if (postData) { - req.write(JSON.stringify(postData)); - } - req.end(); - return deferred.promise; }; doIt = function(type) { return describe("making a " + type + " request", function() { @@ -70,7 +70,7 @@ assert.equal(data.response.length, 3); assert.equal(data.response[0].name, "Nathan Tate"); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -82,13 +82,13 @@ assert.ok(data.response); assert.equal(data.response.name, "Baby Tate"); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); it("should update a single user", function(done) { return makeRequest({ - method: "POST", + method: "PUT", path: "/" + type + "/2" }, { name: "Ren Tate" @@ -101,13 +101,13 @@ assert.equal(userData.name, "Ren Tate"); assert.equal(userData.username, "soonToCome"); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); return it("should add a single user", function(done) { return makeRequest({ - method: "PUT", + method: "POST", path: "/" + type }, { name: "Another Tate", @@ -123,7 +123,7 @@ assert.equal(userData.username, "AnotherTate"); assert.equal(userData.password, "booyaBaby"); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -148,7 +148,7 @@ assert.ok(error); assert.equal(error.message, 'object is not a function'); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -163,7 +163,7 @@ assert.equal(data.success, true); assert.equal(data.response, 'Result'); return done(); - }).fail(done); + })["catch"](done); }); it("should use an id", function(done) { return makeRequest({ @@ -174,7 +174,7 @@ assert.equal(data.success, true); assert.equal(data.response, 'Result'); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -190,13 +190,13 @@ assert.equal(data.success, false); assert.equal(data.error, 'Invalid username or password'); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); it("should give me required validation error", function(done) { return makeRequest({ - method: "PUT", + method: "POST", path: "/users" }, { name: "Booya Baby" @@ -206,13 +206,13 @@ assert.equal(data.errors.username[0], "is required"); assert.equal(data.errors.password[0], "is required"); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); it('shouldn\'t let me use an array when a string is required', function(done) { return makeRequest({ - method: 'PUT', + method: 'POST', path: '/users' }, { name: ['booya', 'baby'], @@ -223,7 +223,7 @@ assert.equal(data.success, false); assert.equal(data.errors.name[0], 'must be a string'); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -237,7 +237,7 @@ assert.equal(TestData.middleware.userRan, 1); assert.equal(TestData.middleware.asyncRan, 0); return done(); - }).fail(function(reason) { + })["catch"](function(reason) { return done(reason); }); }); @@ -250,7 +250,7 @@ assert.equal(TestData.middleware.userRan, 0); assert.equal(TestData.middleware.asyncRan, 1); return done(); - }).fail(function(reason) { + })["catch"](function(reason) { return done(reason); }); }); @@ -265,7 +265,7 @@ assert.equal(TestData.beforeEach.userRan, 1); assert.equal(TestData.beforeEach.asyncRan, 0); return done(); - }).fail(function(reason) { + })["catch"](function(reason) { return done(reason); }); }); @@ -278,7 +278,7 @@ assert.equal(TestData.beforeEach.userRan, 0); assert.equal(TestData.beforeEach.asyncRan, 2); return done(); - }).fail(function(reason) { + })["catch"](function(reason) { return done(reason); }); }); @@ -292,7 +292,7 @@ assert.equal(TestData.beforeEach.asyncRan, 2); assert.ok(TestData.beforeEach.other.crazy); return done(); - }).fail(function(reason) { + })["catch"](function(reason) { return done(reason); }); }); diff --git a/test/test_testers.js b/test/test_testers.js index 054cd9a..0847628 100644 --- a/test/test_testers.js +++ b/test/test_testers.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var AsyncUserController, TestData, UserController, assert; diff --git a/test/test_validator.coffee b/test/test_validator.coffee index 350f92d..e58605f 100644 --- a/test/test_validator.coffee +++ b/test/test_validator.coffee @@ -20,7 +20,7 @@ describe 'Validator', -> name: "Booya Baby" .then -> done new Error "didn't throw error" - .fail (result)-> + .catch (result)-> assert.ok result instanceof UserError assert.equal result.message, 'Validate' assert.equal result.errors.username.length, 1 @@ -28,7 +28,7 @@ describe 'Validator', -> assert.equal result.errors.password.length, 1 assert.equal result.errors.password[0], 'is required' done() - .fail (error)-> + .catch (error)-> done error it "should fail", (done)-> @@ -37,7 +37,7 @@ describe 'Validator', -> , (error)-> assert.equal error, 'is required' done() - .fail (result)-> + .catch (result)-> done(result) it "should give me an appropriate error", (done)-> Validator.runValidate("no-oolong", "len", 8, "username").then (result)-> @@ -45,7 +45,7 @@ describe 'Validator', -> , (error)-> assert.equal error, 'is required' done() - .fail (result)-> + .catch (result)-> done(result) it "should get me a readable error", (done)-> Validator.validateField(required: true, "username", undefined, true).then (result)-> @@ -55,7 +55,7 @@ describe 'Validator', -> assert.equal result.errors.length, 1 assert.equal result.errors[0], "is required" done() - .fail (error)-> + .catch (error)-> done error it "should get me multiple readable errors", (done)-> Validator.validateField( @@ -69,7 +69,7 @@ describe 'Validator', -> assert.equal result.errors[0], "String is not in range" assert.equal result.errors[1], "must be alphanumeric" done() - .fail (error)-> + .catch (error)-> done error it 'should be able to handle complex validation', (done)-> Validator.validate @@ -92,12 +92,12 @@ describe 'Validator', -> array: ['booya', 5, 'two'] .then (result)-> done new Error 'Got Result' - .fail (result)-> + .catch (result)-> assert.ok result instanceof UserError assert.ok result?.errors?.array assert.equal result.errors.array[0], 'should be an array of text' done() - .fail done + .catch done it 'should pass on 0 or empty string', (done)-> Validator.validate name: required: true @@ -105,7 +105,7 @@ describe 'Validator', -> name: 0 .then (result)-> done() - .fail done + .catch done it 'should test other validation on 0 or empty string', (done)-> Validator.validate name: @@ -127,4 +127,4 @@ describe 'Validator', -> assert.equal error.errors.name?.length, 1 assert.equal error.errors.name[0], 'String is not in range' done() - .fail done + .catch done diff --git a/test/test_validator.js b/test/test_validator.js index 7027de9..323d6b6 100644 --- a/test/test_validator.js +++ b/test/test_validator.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var UserError, Validator, assert; @@ -30,7 +30,7 @@ name: "Booya Baby" }).then(function() { return done(new Error("didn't throw error")); - }).fail(function(result) { + })["catch"](function(result) { assert.ok(result instanceof UserError); assert.equal(result.message, 'Validate'); assert.equal(result.errors.username.length, 1); @@ -38,7 +38,7 @@ assert.equal(result.errors.password.length, 1); assert.equal(result.errors.password[0], 'is required'); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -48,7 +48,7 @@ }, function(error) { assert.equal(error, 'is required'); return done(); - }).fail(function(result) { + })["catch"](function(result) { return done(result); }); }); @@ -58,7 +58,7 @@ }, function(error) { assert.equal(error, 'is required'); return done(); - }).fail(function(result) { + })["catch"](function(result) { return done(result); }); }); @@ -72,7 +72,7 @@ assert.equal(result.errors.length, 1); assert.equal(result.errors[0], "is required"); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -88,7 +88,7 @@ assert.equal(result.errors[0], "String is not in range"); assert.equal(result.errors[1], "must be alphanumeric"); return done(); - }).fail(function(error) { + })["catch"](function(error) { return done(error); }); }); @@ -118,13 +118,13 @@ array: ['booya', 5, 'two'] }).then(function(result) { return done(new Error('Got Result')); - }).fail(function(result) { + })["catch"](function(result) { var _ref; assert.ok(result instanceof UserError); assert.ok(result != null ? (_ref = result.errors) != null ? _ref.array : void 0 : void 0); assert.equal(result.errors.array[0], 'should be an array of text'); return done(); - }).fail(done); + })["catch"](done); }); it('should pass on 0 or empty string', function(done) { return Validator.validate({ @@ -135,7 +135,7 @@ name: 0 }).then(function(result) { return done(); - }).fail(done); + })["catch"](done); }); return it('should test other validation on 0 or empty string', function(done) { return Validator.validate({ @@ -161,7 +161,7 @@ assert.equal((_ref1 = error.errors.name) != null ? _ref1.length : void 0, 1); assert.equal(error.errors.name[0], 'String is not in range'); return done(); - }).fail(done); + })["catch"](done); }); }); diff --git a/test_data/data.coffee b/test_data/data.coffee index dcfc98c..b702253 100644 --- a/test_data/data.coffee +++ b/test_data/data.coffee @@ -1,4 +1,4 @@ -Q = require('q') +Bluebird = require 'bluebird' base = require('../index') Validator = base.Validator UserError = base.UserError @@ -42,15 +42,16 @@ Validator.registerValidator "unique", (value, data, field, controllerName)-> # Test asynchronous validator Validator.registerValidator "inDb", (value, data, field, controllerName)-> - deferred = Q.defer() - setTimeout -> + new Bluebird( (resolve)-> + setTimeout resolve, 25 + ).then -> found = UserData.length > value if found is data - deferred.resolve() + true + else if data + "does not exist" else - deferred.reject(if data then "does not exist" else "must not exist") - , 25 - deferred.promise + "must not exist" exports.ErrorHandler = ErrorHandler = expect: (callback)-> diff --git a/test_data/data.js b/test_data/data.js index 880f03d..4bb006d 100644 --- a/test_data/data.js +++ b/test_data/data.js @@ -1,8 +1,8 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { - var ErrorHandler, Q, UserData, UserError, Validator, base, beforeEach, middleware; + var Bluebird, ErrorHandler, UserData, UserError, Validator, base, beforeEach, middleware; - Q = require('q'); + Bluebird = require('bluebird'); base = require('../index'); @@ -60,18 +60,19 @@ }); Validator.registerValidator("inDb", function(value, data, field, controllerName) { - var deferred; - deferred = Q.defer(); - setTimeout(function() { + return new Bluebird(function(resolve) { + return setTimeout(resolve, 25); + }).then(function() { var found; found = UserData.length > value; if (found === data) { - return deferred.resolve(); + return true; + } else if (data) { + return "does not exist"; } else { - return deferred.reject(data ? "does not exist" : "must not exist"); + return "must not exist"; } - }, 25); - return deferred.promise; + }); }); exports.ErrorHandler = ErrorHandler = { diff --git a/test_data/routes/async_users.coffee b/test_data/routes/async_users.coffee index 37fc82a..2882d62 100644 --- a/test_data/routes/async_users.coffee +++ b/test_data/routes/async_users.coffee @@ -1,10 +1,13 @@ -Q = require('q') +Bluebird = require 'bluebird' MyBaseController = require './' data = require '../data' middleware = data.middleware beforeEach = data.beforeEach UserData = data.UserData +timeout = (time)-> + new Bluebird (resolve)-> + setTimeout resolve, time module.exports = MyBaseController.extend name: "AsyncUser" beforeEach: [-> @@ -24,12 +27,7 @@ module.exports = MyBaseController.extend default: 5 logic: (optional)-> # Get the users - deferred = Q.defer() - setTimeout -> - deferred.resolve(UserData) - , 25 - deferred.promise - + timeout(25).then -> UserData get: # get /users/:id Anything with "get" automatically is get //:id validation: id: @@ -37,11 +35,7 @@ module.exports = MyBaseController.extend type: 'int' inDb: true logic: (id)-> - deferred = Q.defer() - setTimeout -> - deferred.resolve UserData[id] - , 25 - deferred.promise + timeout(25).then -> UserData[id] add: # put /users Anything with "add" automatically is put / validation: name: @@ -57,14 +51,11 @@ module.exports = MyBaseController.extend type: 'alphanumeric' unique: true # Backend Only logic: (_data)-> - deferred = Q.defer() - setTimeout -> + timeout(25).then -> _data.id = UserData.length _data.comments = [] UserData.push _data - deferred.resolve true - , 25 - deferred.promise + true save: # post /users/:id Anything with "save" automatically is post //:id validation: id: @@ -81,12 +72,9 @@ module.exports = MyBaseController.extend type: 'alphaNumeric' len: 8 logic: (id, _data)-> - deferred = Q.defer() - setTimeout -> + timeout(25).then -> UserData[id][key] = value for key, value of _data - deferred.resolve true - , 25 - deferred.promise + true postLogin: # post is always / - deferred = Q.defer() - setTimeout -> + timeout(25).then -> for user in UserData user = UserData[id] if user.username is username if user.password is password - deferred.resolve(true) + return true else - deferred.reject "Invalid username or password" - deferred.reject("Invalid username or password") - , 25 - deferred.promise + throw new UserError "Invalid username or password" + throw new UserError "Invalid username or password" beforeEachCrazy: before: -> beforeEach.other.crazy = true diff --git a/test_data/routes/async_users.js b/test_data/routes/async_users.js index 14a4077..37ddb87 100644 --- a/test_data/routes/async_users.js +++ b/test_data/routes/async_users.js @@ -1,8 +1,8 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { - var MyBaseController, Q, UserData, beforeEach, data, middleware; + var Bluebird, MyBaseController, UserData, beforeEach, data, middleware, timeout; - Q = require('q'); + Bluebird = require('bluebird'); MyBaseController = require('./'); @@ -14,6 +14,12 @@ UserData = data.UserData; + timeout = function(time) { + return new Bluebird(function(resolve) { + return setTimeout(resolve, time); + }); + }; + module.exports = MyBaseController.extend({ name: "AsyncUser", beforeEach: [ @@ -37,12 +43,9 @@ } }, logic: function(optional) { - var deferred; - deferred = Q.defer(); - setTimeout(function() { - return deferred.resolve(UserData); - }, 25); - return deferred.promise; + return timeout(25).then(function() { + return UserData; + }); } }, get: { @@ -54,12 +57,9 @@ } }, logic: function(id) { - var deferred; - deferred = Q.defer(); - setTimeout(function() { - return deferred.resolve(UserData[id]); - }, 25); - return deferred.promise; + return timeout(25).then(function() { + return UserData[id]; + }); } }, add: { @@ -81,15 +81,12 @@ } }, logic: function(_data) { - var deferred; - deferred = Q.defer(); - setTimeout(function() { + return timeout(25).then(function() { _data.id = UserData.length; _data.comments = []; UserData.push(_data); - return deferred.resolve(true); - }, 25); - return deferred.promise; + return true; + }); } }, save: { @@ -113,17 +110,14 @@ } }, logic: function(id, _data) { - var deferred; - deferred = Q.defer(); - setTimeout(function() { + return timeout(25).then(function() { var key, value; for (key in _data) { value = _data[key]; UserData[id][key] = value; } - return deferred.resolve(true); - }, 25); - return deferred.promise; + return true; + }); } }, postLogin: { @@ -136,24 +130,21 @@ } }, logic: function(username, password) { - var deferred; - deferred = Q.defer(); - setTimeout(function() { + return timeout(25).then(function() { var user, _i, _len; for (_i = 0, _len = UserData.length; _i < _len; _i++) { user = UserData[_i]; user = UserData[id]; if (user.username === username) { if (user.password === password) { - deferred.resolve(true); + return true; } else { - deferred.reject("Invalid username or password"); + throw new UserError("Invalid username or password"); } } } - return deferred.reject("Invalid username or password"); - }, 25); - return deferred.promise; + throw new UserError("Invalid username or password"); + }); } }, beforeEachCrazy: { diff --git a/test_data/routes/index.coffee b/test_data/routes/index.coffee index aafc8c1..ac55189 100644 --- a/test_data/routes/index.coffee +++ b/test_data/routes/index.coffee @@ -1,4 +1,3 @@ -Q = require('q') base = require('../../index') BaseController = base.BaseController data = require '../data' diff --git a/test_data/routes/index.js b/test_data/routes/index.js index 454f2c8..270125f 100644 --- a/test_data/routes/index.js +++ b/test_data/routes/index.js @@ -1,8 +1,6 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { - var BaseController, ErrorHandler, MyBaseController, Q, UserData, base, beforeEach, data, middleware; - - Q = require('q'); + var BaseController, ErrorHandler, MyBaseController, UserData, base, beforeEach, data, middleware; base = require('../../index'); diff --git a/test_data/routes/users.coffee b/test_data/routes/users.coffee index adf3c9c..1752ee8 100644 --- a/test_data/routes/users.coffee +++ b/test_data/routes/users.coffee @@ -1,4 +1,3 @@ -Q = require('q') MyBaseController = require './' data = require '../data' middleware = data.middleware diff --git a/test_data/routes/users.js b/test_data/routes/users.js index a7d3bd2..9672075 100644 --- a/test_data/routes/users.js +++ b/test_data/routes/users.js @@ -1,8 +1,6 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { - var MyBaseController, Q, UserData, UserError, beforeEach, data, middleware; - - Q = require('q'); + var MyBaseController, UserData, UserError, beforeEach, data, middleware; MyBaseController = require('./'); diff --git a/test_data/run_server.js b/test_data/run_server.js index d56af4c..518f95b 100644 --- a/test_data/run_server.js +++ b/test_data/run_server.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var Server; diff --git a/test_data/server.coffee b/test_data/server.coffee index 0b9e11f..0feb9eb 100644 --- a/test_data/server.coffee +++ b/test_data/server.coffee @@ -6,7 +6,7 @@ app.use express.json() app.use express.urlencoded() app.use express.bodyParser() app.use express.static(__dirname + "/server_public") -wait = frontEnd.registerRoutes(app, __dirname + "/routes", true).fail (error)-> +wait = frontEnd.registerRoutes(app, __dirname + "/routes", true).catch (error)-> console.log 'FAIL', error, error?.stack module.exports = start: (cb)-> diff --git a/test_data/server.js b/test_data/server.js index e52a336..4b1612f 100644 --- a/test_data/server.js +++ b/test_data/server.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var app, express, frontEnd, http, wait; @@ -18,7 +18,7 @@ app.use(express["static"](__dirname + "/server_public")); - wait = frontEnd.registerRoutes(app, __dirname + "/routes", true).fail(function(error) { + wait = frontEnd.registerRoutes(app, __dirname + "/routes", true)["catch"](function(error) { return console.log('FAIL', error, error != null ? error.stack : void 0); }); From 243b904fc7f7225b2414b3f4e58dd293810d3683 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:29:51 -0600 Subject: [PATCH 09/30] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 876652a..591b338 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.2", + "version": "0.5.3", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From 13631953d33b9ec9021917991d332366fef47c21 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:34:13 -0600 Subject: [PATCH 10/30] remove console --- test/test_logic.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_logic.js b/test/test_logic.js index 6dee9e7..af77948 100644 --- a/test/test_logic.js +++ b/test/test_logic.js @@ -258,7 +258,6 @@ }).then(function(result) { return done(new Error('Didn\'t throw an error')); }, function(error) { - console.log('error', error); var errors; errors = error.errors; assert.equal(error.constructor, UserError); From 29973449f22cc87cc112fa93dd16a061b4de2955 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:50:53 -0600 Subject: [PATCH 11/30] Fixed promisify bug --- lib/ez-ctrl/base.coffee | 2 +- lib/ez-ctrl/base.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ez-ctrl/base.coffee b/lib/ez-ctrl/base.coffee index f9ee369..c5c0e02 100644 --- a/lib/ez-ctrl/base.coffee +++ b/lib/ez-ctrl/base.coffee @@ -7,7 +7,7 @@ Converter = require('./converter') Validator = require('../ez-access/validator') UserError = require './userError' {Form} = require 'multiparty' -Bluebird.promisifyAll Form +Form.parseAsync = Bluebird.promisify Form.parse util = require 'util' module.exports = BaseController = diff --git a/lib/ez-ctrl/base.js b/lib/ez-ctrl/base.js index 1e70f21..8fae4a5 100644 --- a/lib/ez-ctrl/base.js +++ b/lib/ez-ctrl/base.js @@ -20,7 +20,7 @@ Form = require('multiparty').Form; - Bluebird.promisifyAll(Form); + Form.parseAsync = Bluebird.promisify(Form.parse); util = require('util'); From 94b622753b526f4b8382d491796e568fbe7bb3c0 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:51:25 -0600 Subject: [PATCH 12/30] 0.5.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 591b338..2f250f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.3", + "version": "0.5.4", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From 65fea28b6f81e7bd7fa246c14fb484788bc71bcf Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:51:48 -0600 Subject: [PATCH 13/30] 0.5.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2f250f4..8cf815c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.4", + "version": "0.5.5", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From dff1f153975a31c50d2cc0e76f432619e146eb95 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:53:11 -0600 Subject: [PATCH 14/30] Fixed form --- lib/ez-ctrl/base.coffee | 2 +- lib/ez-ctrl/base.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ez-ctrl/base.coffee b/lib/ez-ctrl/base.coffee index c5c0e02..d01e4ca 100644 --- a/lib/ez-ctrl/base.coffee +++ b/lib/ez-ctrl/base.coffee @@ -7,7 +7,7 @@ Converter = require('./converter') Validator = require('../ez-access/validator') UserError = require './userError' {Form} = require 'multiparty' -Form.parseAsync = Bluebird.promisify Form.parse +Form.prototype.parseAsync = Bluebird.promisify Form.prototype.parse util = require 'util' module.exports = BaseController = diff --git a/lib/ez-ctrl/base.js b/lib/ez-ctrl/base.js index 8fae4a5..73cc6b6 100644 --- a/lib/ez-ctrl/base.js +++ b/lib/ez-ctrl/base.js @@ -20,7 +20,7 @@ Form = require('multiparty').Form; - Form.parseAsync = Bluebird.promisify(Form.parse); + Form.prototype.parseAsync = Bluebird.promisify(Form.prototype.parse); util = require('util'); From 3179bb321977f53afee330081066239ed53b8e8a Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Mon, 11 May 2015 11:53:19 -0600 Subject: [PATCH 15/30] 0.5.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8cf815c..d2680e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.5", + "version": "0.5.6", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From 250f02e4c45f08307e0f253d2d3826f832428cb3 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 22 Sep 2015 10:14:07 -0700 Subject: [PATCH 16/30] Fixed an obvious bug --- lib/ez-ctrl/converter.coffee | 4 ++-- lib/ez-ctrl/converter.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ez-ctrl/converter.coffee b/lib/ez-ctrl/converter.coffee index 444d36d..5e18935 100644 --- a/lib/ez-ctrl/converter.coffee +++ b/lib/ez-ctrl/converter.coffee @@ -26,8 +26,8 @@ module.exports = Converter = data convertField: (value, type)-> - if _.isArray type or _.isArray value - unless _.isArray type and _.isArray value + if _.isArray(type) or _.isArray(value) + unless _.isArray(type) and _.isArray(value) value else for index, val in value diff --git a/lib/ez-ctrl/converter.js b/lib/ez-ctrl/converter.js index 698e20f..44dcb8a 100644 --- a/lib/ez-ctrl/converter.js +++ b/lib/ez-ctrl/converter.js @@ -37,8 +37,8 @@ }, convertField: function(value, type) { var index, val, _i, _len; - if (_.isArray(type || _.isArray(value))) { - if (!_.isArray(type && _.isArray(value))) { + if (_.isArray(type) || _.isArray(value)) { + if (!(_.isArray(type) && _.isArray(value))) { return value; } else { for (val = _i = 0, _len = value.length; _i < _len; val = ++_i) { From 2a199c123b2fe5751cab92a77b025a4aabd53605 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 22 Sep 2015 10:16:42 -0700 Subject: [PATCH 17/30] Compile with new coffeescript --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 7d4deac..662751d 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.8.0 (function() { var BaseController, ControllerManager, Converter, FrontEnd, FuncDetails, UserError, Validator; From abe5e3e45fa73d45d58527ca820dd9e73aa3a1e0 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 22 Sep 2015 10:16:46 -0700 Subject: [PATCH 18/30] 0.5.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d2680e6..97329fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.6", + "version": "0.5.7", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From 86cbc4c5cda4b72b7dc6fa249eb2309d75ca6401 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 22 Sep 2015 10:17:08 -0700 Subject: [PATCH 19/30] 0.5.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 97329fd..14783c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.7", + "version": "0.5.8", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From 2e32acc3a652f04d77093cf4a1887acc9ad5f339 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 22 Sep 2015 10:28:12 -0700 Subject: [PATCH 20/30] Fixed conversion bug --- lib/ez-ctrl/converter.coffee | 2 +- lib/ez-ctrl/converter.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ez-ctrl/converter.coffee b/lib/ez-ctrl/converter.coffee index 5e18935..dfe66e5 100644 --- a/lib/ez-ctrl/converter.coffee +++ b/lib/ez-ctrl/converter.coffee @@ -30,7 +30,7 @@ module.exports = Converter = unless _.isArray(type) and _.isArray(value) value else - for index, val in value + for val, index in value value[index] = @convertField val, type[0] value else if(ConverterMethods[type]) diff --git a/lib/ez-ctrl/converter.js b/lib/ez-ctrl/converter.js index 44dcb8a..33de23d 100644 --- a/lib/ez-ctrl/converter.js +++ b/lib/ez-ctrl/converter.js @@ -41,8 +41,8 @@ if (!(_.isArray(type) && _.isArray(value))) { return value; } else { - for (val = _i = 0, _len = value.length; _i < _len; val = ++_i) { - index = value[val]; + for (index = _i = 0, _len = value.length; _i < _len; index = ++_i) { + val = value[index]; value[index] = this.convertField(val, type[0]); } return value; From af870b4bf0c99c3384b847bbec86f4f84137ea02 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 22 Sep 2015 10:28:27 -0700 Subject: [PATCH 21/30] 0.5.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 14783c5..3398da0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.8", + "version": "0.5.9", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From 7cd3b0a6d133b04da2e00397d34cd56e2c2a3208 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 22 Sep 2015 10:33:40 -0700 Subject: [PATCH 22/30] Enabled simplifying of long arrays. --- lib/ez-access/ez-access.coffee | 20 +++++++++++++------- lib/ez-access/ez-access.js | 20 +++++++++++++++----- lib/ez-ctrl/converter.coffee | 5 +++++ lib/ez-ctrl/converter.js | 9 ++++++++- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/lib/ez-access/ez-access.coffee b/lib/ez-access/ez-access.coffee index 0ff4e58..ec89c3e 100644 --- a/lib/ez-access/ez-access.coffee +++ b/lib/ez-access/ez-access.coffee @@ -32,18 +32,24 @@ url else path + _isPrimitive: (value)-> + _.some [_.isNumber, _.isString, _.isBoolean, _.isNull, _.isUndefined], + (fn)-> fn(value) _serialize: (obj, prefix)-> str = [] unless obj? null else if obj.length? - for value, i in obj - key = if prefix then "#{prefix}[#{i}]" else i - if value isnt undefined - str.push if typeof value is 'object' - @_serialize(value, key) - else - key + "=" + encodeURIComponent(value) + if prefix and obj.length > 20 and _.every obj, @_isPrimitive + str.push prefix + '=' + encodeURIComponent(JSON.stringify(obj)) + else + for value, i in obj + key = if prefix then "#{prefix}[#{i}]" else i + if value isnt undefined + str.push if typeof value is 'object' + @_serialize(value, key) + else + key + "=" + encodeURIComponent(value) else for key, value of obj key = if prefix then prefix + "[" + key + "]" else encodeURIComponent(key) diff --git a/lib/ez-access/ez-access.js b/lib/ez-access/ez-access.js index 79462a4..166863f 100644 --- a/lib/ez-access/ez-access.js +++ b/lib/ez-access/ez-access.js @@ -53,17 +53,27 @@ } }; + BaseController.prototype._isPrimitive = function(value) { + return _.some([_.isNumber, _.isString, _.isBoolean, _.isNull, _.isUndefined], function(fn) { + return fn(value); + }); + }; + BaseController.prototype._serialize = function(obj, prefix) { var i, key, str, value, _i, _len; str = []; if (obj == null) { null; } else if (obj.length != null) { - for (i = _i = 0, _len = obj.length; _i < _len; i = ++_i) { - value = obj[i]; - key = prefix ? "" + prefix + "[" + i + "]" : i; - if (value !== void 0) { - str.push(typeof value === 'object' ? this._serialize(value, key) : key + "=" + encodeURIComponent(value)); + if (prefix && obj.length > 20 && _.every(obj, this._isPrimitive)) { + str.push(prefix + '=' + encodeURIComponent(JSON.stringify(obj))); + } else { + for (i = _i = 0, _len = obj.length; _i < _len; i = ++_i) { + value = obj[i]; + key = prefix ? "" + prefix + "[" + i + "]" : i; + if (value !== void 0) { + str.push(typeof value === 'object' ? this._serialize(value, key) : key + "=" + encodeURIComponent(value)); + } } } } else { diff --git a/lib/ez-ctrl/converter.coffee b/lib/ez-ctrl/converter.coffee index dfe66e5..6164279 100644 --- a/lib/ez-ctrl/converter.coffee +++ b/lib/ez-ctrl/converter.coffee @@ -27,6 +27,11 @@ module.exports = Converter = convertField: (value, type)-> if _.isArray(type) or _.isArray(value) + if _.isString value + try + value = JSON.parse value + catch e + # ignore unless _.isArray(type) and _.isArray(value) value else diff --git a/lib/ez-ctrl/converter.js b/lib/ez-ctrl/converter.js index 33de23d..1d4f08f 100644 --- a/lib/ez-ctrl/converter.js +++ b/lib/ez-ctrl/converter.js @@ -36,8 +36,15 @@ return data; }, convertField: function(value, type) { - var index, val, _i, _len; + var e, index, val, _i, _len; if (_.isArray(type) || _.isArray(value)) { + if (_.isString(value)) { + try { + value = JSON.parse(value); + } catch (_error) { + e = _error; + } + } if (!(_.isArray(type) && _.isArray(value))) { return value; } else { From a3c9c15b0d60b6ceaed6843760b71882365eb8e2 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 22 Sep 2015 10:33:45 -0700 Subject: [PATCH 23/30] 0.5.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3398da0..45571dc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.9", + "version": "0.5.10", "main": "index.js", "dependencies": { "bluebird": "^2.9.25", From b92540b9320ef0fec7b0bd453bd390dbc443d90b Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Thu, 10 Mar 2016 16:46:02 -0800 Subject: [PATCH 24/30] Upgraded bluebird version --- lib/ez-access/ez-access-angular.js | 2 +- lib/ez-access/ez-access.js | 60 +++++++++++++++--------------- lib/ez-access/frontend.js | 32 ++++++++-------- lib/ez-access/validator.coffee | 2 +- lib/ez-access/validator.js | 38 ++++++++++--------- lib/ez-ctrl/base.coffee | 2 +- lib/ez-ctrl/base.js | 58 +++++++++++++++-------------- lib/ez-ctrl/converter.js | 6 +-- lib/ez-ctrl/func-details.js | 42 ++++++++++----------- lib/ez-ctrl/manager.js | 32 ++++++++-------- lib/ez-ctrl/userError.js | 2 +- package.json | 2 +- 12 files changed, 141 insertions(+), 137 deletions(-) diff --git a/lib/ez-access/ez-access-angular.js b/lib/ez-access/ez-access-angular.js index cdc1ba3..cbf62f0 100644 --- a/lib/ez-access/ez-access-angular.js +++ b/lib/ez-access/ez-access-angular.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 (function() { (function(generator) { var EZAccess, EZRoutes, angular; diff --git a/lib/ez-access/ez-access.js b/lib/ez-access/ez-access.js index 79462a4..d00a1e5 100644 --- a/lib/ez-access/ez-access.js +++ b/lib/ez-access/ez-access.js @@ -1,7 +1,7 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 (function() { - var __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; (function(generator) { var Bluebird, _; @@ -26,25 +26,25 @@ var param, params, path, url, value, variable, variables; params = pattern.split('/'); path = ((function() { - var _i, _len, _results; - _results = []; - for (_i = 0, _len = params.length; _i < _len; _i++) { - param = params[_i]; + var j, len, results1; + results1 = []; + for (j = 0, len = params.length; j < len; j++) { + param = params[j]; if (variables = param.match(/^:(.*?)(\(.*?\))?$/)) { variable = variables[1]; value = data[variable]; delete data[variable]; - _results.push(value); + results1.push(value); } else { - _results.push(param); + results1.push(param); } } - return _results; + return results1; })()).join("/"); if (EZAccess.hostname) { url = "//" + EZAccess.hostname + path; if (EZAccess.protocol) { - return "" + EZAccess.protocol + ":" + url; + return EZAccess.protocol + ":" + url; } else { return url; } @@ -54,14 +54,14 @@ }; BaseController.prototype._serialize = function(obj, prefix) { - var i, key, str, value, _i, _len; + var i, j, key, len, str, value; str = []; if (obj == null) { null; } else if (obj.length != null) { - for (i = _i = 0, _len = obj.length; _i < _len; i = ++_i) { + for (i = j = 0, len = obj.length; j < len; i = ++j) { value = obj[i]; - key = prefix ? "" + prefix + "[" + i + "]" : i; + key = prefix ? prefix + "[" + i + "]" : i; if (value !== void 0) { str.push(typeof value === 'object' ? this._serialize(value, key) : key + "=" + encodeURIComponent(value)); } @@ -98,12 +98,12 @@ xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange = (function(_this) { return function() { - var e; + var e, error1; if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { try { return resolve(JSON.parse(xmlhttp.responseText)); - } catch (_error) { - e = _error; + } catch (error1) { + e = error1; console.log("EZAccessError: Response not in valid JSON", xml.responseText); return reject(error, "EZAccessError: Response not in valid JSON", xml.responseText); } @@ -135,8 +135,8 @@ return BaseController; })(); - Controller = (function(_super) { - __extends(Controller, _super); + Controller = (function(superClass) { + extend(Controller, superClass); function Controller() { return Controller.__super__.constructor.apply(this, arguments); @@ -160,8 +160,8 @@ return Controller; })(BaseController); - BatchController = (function(_super) { - __extends(BatchController, _super); + BatchController = (function(superClass) { + extend(BatchController, superClass); function BatchController(_details) { this._details = _details; @@ -179,8 +179,8 @@ return BatchController; })(BaseController); - Batch = (function(_super) { - __extends(Batch, _super); + Batch = (function(superClass) { + extend(Batch, superClass); function Batch() { this.requests = {}; @@ -197,23 +197,23 @@ }; Batch.prototype.get = function(varName, request) { - var key, value, _results; + var key, results1, value; if (_.isString(varName)) { return this.requests[varName] = request; } else { - _results = []; + results1 = []; for (key in varName) { value = varName[key]; - _results.push(this.get(key, value)); + results1.push(this.get(key, value)); } - return _results; + return results1; } }; Batch.prototype.flush = function(ignoreFailures) { var path, url; path = "/get-batch" + (this._constructQuery(this.requests)); - url = EZAccess.hostname ? (url = "//" + EZAccess.hostname + path, EZAccess.protocol ? "" + EZAccess.protocol + ":" + url : url) : path; + url = EZAccess.hostname ? (url = "//" + EZAccess.hostname + path, EZAccess.protocol ? EZAccess.protocol + ":" + url : url) : path; return this._makeRequestBase('get', url).then((function(_this) { return function(results) { if (ignoreFailures) { @@ -251,8 +251,8 @@ var shell; shell = []; shell._promise = promise.then(function(result) { - var i, value, _i, _len; - for (i = _i = 0, _len = result.length; _i < _len; i = ++_i) { + var i, j, len, value; + for (i = j = 0, len = result.length; j < len; i = ++j) { value = result[i]; shell.push(result[i]); } diff --git a/lib/ez-access/frontend.js b/lib/ez-access/frontend.js index 5ae00f7..b91b91a 100644 --- a/lib/ez-access/frontend.js +++ b/lib/ez-access/frontend.js @@ -1,6 +1,6 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 (function() { - var Bluebird, ControllerManager, FrontEnd, FuncDetails, frontEndJS, _; + var Bluebird, ControllerManager, FrontEnd, FuncDetails, _, frontEndJS; _ = require('lodash'); @@ -131,26 +131,26 @@ } else if (_.isArray(object)) { output = "[\n"; output += tabs2 + ((function() { - var _i, _len, _results; - _results = []; - for (_i = 0, _len = object.length; _i < _len; _i++) { - object_item = object[_i]; - _results.push(this.convertToFrontEndRaw(object_item, depth + 1)); + var i, len, results; + results = []; + for (i = 0, len = object.length; i < len; i++) { + object_item = object[i]; + results.push(this.convertToFrontEndRaw(object_item, depth + 1)); } - return _results; + return results; }).call(this)).join(",\n" + tabs2) + "\n"; output += tabs + "]"; return output; } else if (_.isObject(object)) { output = "{\n"; output += tabs2 + ((function() { - var _results; - _results = []; + var results; + results = []; for (field in object) { value = object[field]; - _results.push(field + ": " + this.convertToFrontEndRaw(value, depth + 1)); + results.push(field + ": " + this.convertToFrontEndRaw(value, depth + 1)); } - return _results; + return results; }).call(this)).join(",\n" + tabs2) + "\n"; output += tabs + "}"; return output; @@ -165,12 +165,12 @@ FrontEnd.prototype.getTabs = _.memoize(function(depth) { return ((function() { - var _results; - _results = []; + var results; + results = []; while (depth--) { - _results.push(" "); + results.push(" "); } - return _results; + return results; })()).join(""); }); diff --git a/lib/ez-access/validator.coffee b/lib/ez-access/validator.coffee index f2d46d1..d120efc 100644 --- a/lib/ez-access/validator.coffee +++ b/lib/ez-access/validator.coffee @@ -22,7 +22,7 @@ promises.push @validateField(validatorData, field, data[field], controllerName) else if validatorData.default data[field] = validatorData.default - Bluebird.settle(promises).then (results)-> + Bluebird.map(promises, (promise)-> Bluebird.resolve(promise).reflect()).then (results)-> errors = _.filter results, (result)-> not result.isFulfilled() if errors.length > 0 diff --git a/lib/ez-access/validator.js b/lib/ez-access/validator.js index 02a4ea4..63db7c0 100644 --- a/lib/ez-access/validator.js +++ b/lib/ez-access/validator.js @@ -1,7 +1,7 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 (function() { (function(generator) { - var Bluebird, UserError, validate, validator, _; + var Bluebird, UserError, _, validate, validator; if ((typeof exports !== "undefined" && exports !== null) && module.exports) { _ = require('lodash'); validate = require('validator'); @@ -30,7 +30,9 @@ data[field] = validatorData["default"]; } } - return Bluebird.settle(promises).then(function(results) { + return Bluebird.map(promises, function(promise) { + return Bluebird.resolve(promise).reflect(); + }).then(function(results) { var error, errors; errors = _.filter(results, function(result) { return !result.isFulfilled(); @@ -74,10 +76,10 @@ return Bluebird.settle(promises).then(function(results) { var readableErrors, reason, result; readableErrors = (function() { - var _i, _len, _results; - _results = []; - for (_i = 0, _len = results.length; _i < _len; _i++) { - result = results[_i]; + var i, len, results1; + results1 = []; + for (i = 0, len = results.length; i < len; i++) { + result = results[i]; if (!(!result.isFulfilled())) { continue; } @@ -85,9 +87,9 @@ if (reason instanceof Error) { throw reason; } - _results.push(reason); + results1.push(reason); } - return _results; + return results1; })(); if (readableErrors.length > 0) { throw { @@ -108,7 +110,7 @@ runValidate: function(value, validator, validatorData, field, controllerName) { return Bluebird["try"]((function(_this) { return function() { - var args, checker, e, validators, value_part; + var args, checker, e, error1, validators, value_part; if (validator === "type") { if (_.isString(validatorData)) { validator = 'is' + validatorData.substr(0, 1).toUpperCase() + validatorData.substr(1); @@ -126,13 +128,13 @@ throw new Error('only types are supported by array validators'); } return Bluebird.all((function() { - var _i, _len, _results; - _results = []; - for (_i = 0, _len = value.length; _i < _len; _i++) { - value_part = value[_i]; - _results.push(this.validateField(validators, field, value_part, controllerName)); + var i, len, results1; + results1 = []; + for (i = 0, len = value.length; i < len; i++) { + value_part = value[i]; + results1.push(this.validateField(validators, field, value_part, controllerName)); } - return _results; + return results1; }).call(_this))["catch"](function() { throw new UserError("should be an array of " + validators.type); }); @@ -152,8 +154,8 @@ } try { checker[validator].apply(checker, validatorData); - } catch (_error) { - e = _error; + } catch (error1) { + e = error1; throw new UserError(e.message); } return true; diff --git a/lib/ez-ctrl/base.coffee b/lib/ez-ctrl/base.coffee index d01e4ca..738a7b2 100644 --- a/lib/ez-ctrl/base.coffee +++ b/lib/ez-ctrl/base.coffee @@ -171,7 +171,7 @@ BaseController.prototype = @handleForked() handleForked: -> - Bluebird.settle @forked + Bluebird.map @forked, (promise)-> Bluebird.resolve(promise).reflect() .then (results)=> results.forEach (result)=> unless result.isFulfilled() diff --git a/lib/ez-ctrl/base.js b/lib/ez-ctrl/base.js index 73cc6b6..acc9fc3 100644 --- a/lib/ez-ctrl/base.js +++ b/lib/ez-ctrl/base.js @@ -1,6 +1,6 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 (function() { - var BaseController, Bluebird, Converter, Form, FuncDetails, UserError, Validator, inflection, util, _; + var BaseController, Bluebird, Converter, Form, FuncDetails, UserError, Validator, _, inflection, util; FuncDetails = require('./func-details'); @@ -65,11 +65,11 @@ this.tableName = inflection.tableize(this.modelName); this.basePattern = baseRoute + "/" + this.tableName; idPattern = idRegex != null ? idRegex === false ? '' : "(" + idRegex + ")" : '([0-9]+)'; - this.individualPattern = "" + this.basePattern + "/:id" + idPattern; + this.individualPattern = this.basePattern + "/:id" + idPattern; return this.methods = ["get", "put", "post", "delete"]; }, getRouteDetails: function(route) { - var before, logic, m, method, middleware, pattern, remainingRoute, returnType, routeDetails, usesId, validation, _i, _len, _ref; + var before, j, len, logic, m, method, middleware, pattern, ref, remainingRoute, returnType, routeDetails, usesId, validation; usesId = false; routeDetails = this.routes[route]; switch (route) { @@ -99,9 +99,9 @@ default: remainingRoute = route; method = "get"; - _ref = this.methods; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - m = _ref[_i]; + ref = this.methods; + for (j = 0, len = ref.length; j < len; j++) { + m = ref[j]; if (route.indexOf(m) === 0) { method = m; remainingRoute = route.substring(method.length); @@ -169,24 +169,24 @@ return controller.handleRequest(req, res, next); }, getRoutes: function() { - var r, route, routes, _ref; + var r, ref, route, routes; routes = {}; - _ref = this.routes; - for (route in _ref) { - r = _ref[route]; + ref = this.routes; + for (route in ref) { + r = ref[route]; routes[route] = this.getRouteDetails(route); } return routes; }, registerRoutes: function(app) { - var route, routeDetails, routes, _results; + var results1, route, routeDetails, routes; routes = this.getRoutes(); - _results = []; + results1 = []; for (route in routes) { routeDetails = routes[route]; - _results.push(this.registerRoute(app, routeDetails)); + results1.push(this.registerRoute(app, routeDetails)); } - return _results; + return results1; }, getController: function(route) { var controller, routeDetails; @@ -219,7 +219,9 @@ })(this)); }, handleForked: function() { - return Bluebird.settle(this.forked).then((function(_this) { + return Bluebird.map(this.forked, function(promise) { + return Bluebird.resolve(promise).reflect(); + }).then((function(_this) { return function(results) { return results.forEach(function(result) { if (!result.isFulfilled()) { @@ -230,7 +232,7 @@ })(this)); }, getDisplayName: function() { - return "" + this.modelName + "." + this.route; + return this.modelName + "." + this.route; }, steps: function(steps, first) { var promise; @@ -296,15 +298,15 @@ return fn.apply(this, args); }, getRequestData: function(field, type) { - var _ref; + var ref; if (type === 'file' || type === 'image') { if (this.files) { - return (_ref = this.files[field]) != null ? _ref[0] : void 0; + return (ref = this.files[field]) != null ? ref[0] : void 0; } else { return this.parseFiles().then((function(_this) { return function() { - var _ref1, _ref2; - return (_ref1 = _this.files) != null ? (_ref2 = _ref1[field]) != null ? _ref2[0] : void 0 : void 0; + var ref1, ref2; + return (ref1 = _this.files) != null ? (ref2 = ref1[field]) != null ? ref2[0] : void 0 : void 0; }; })(this)); } @@ -337,12 +339,12 @@ var data, field, promises, value; data = {}; promises = (function() { - var _ref, _results; - _ref = this.validation; - _results = []; - for (field in _ref) { - value = _ref[field]; - _results.push(((function(_this) { + var ref, results1; + ref = this.validation; + results1 = []; + for (field in ref) { + value = ref[field]; + results1.push(((function(_this) { return function(field, value) { return _this.getRequestData(field, value.type).then(function(value) { if (value != null) { @@ -352,7 +354,7 @@ }; })(this))(field, value)); } - return _results; + return results1; }).call(this); return Bluebird.all(promises).then(function() { return data; diff --git a/lib/ez-ctrl/converter.js b/lib/ez-ctrl/converter.js index 698e20f..e963e6c 100644 --- a/lib/ez-ctrl/converter.js +++ b/lib/ez-ctrl/converter.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 (function() { var Converter, ConverterMethods, _; @@ -36,12 +36,12 @@ return data; }, convertField: function(value, type) { - var index, val, _i, _len; + var i, index, len, val; if (_.isArray(type || _.isArray(value))) { if (!_.isArray(type && _.isArray(value))) { return value; } else { - for (val = _i = 0, _len = value.length; _i < _len; val = ++_i) { + for (val = i = 0, len = value.length; i < len; val = ++i) { index = value[val]; value[index] = this.convertField(val, type[0]); } diff --git a/lib/ez-ctrl/func-details.js b/lib/ez-ctrl/func-details.js index b5b0646..6833195 100644 --- a/lib/ez-ctrl/func-details.js +++ b/lib/ez-ctrl/func-details.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 (function() { var FuncDetails, _; @@ -6,7 +6,7 @@ module.exports = FuncDetails = { extractArguments: function(fn) { - var FN_ARG, FN_ARGS, FN_ARG_SPLIT, STRIP_COMMENTS, arg, argDecl, argsList, fnText, _i, _len, _ref; + var FN_ARG, FN_ARGS, FN_ARG_SPLIT, STRIP_COMMENTS, arg, argDecl, argsList, fnText, j, len, ref; FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; FN_ARG_SPLIT = /,/; FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; @@ -16,9 +16,9 @@ argsList = []; fnText = fn.toString().replace(STRIP_COMMENTS, ''); argDecl = fnText.match(FN_ARGS); - _ref = argDecl[1].split(FN_ARG_SPLIT); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - arg = _ref[_i]; + ref = argDecl[1].split(FN_ARG_SPLIT); + for (j = 0, len = ref.length; j < len; j++) { + arg = ref[j]; arg.replace(FN_ARG, function(all, lodash, name) { return argsList.push(name); }); @@ -31,25 +31,25 @@ } }, dataToArgs: function(fn, data) { - var arg, argData, args, i, unseenData, _dataPosition; + var _dataPosition, arg, argData, args, i, unseenData; args = FuncDetails.extractArguments(fn); argData = []; unseenData = _.extend({}, data); argData = (function() { - var _i, _len, _ref, _results; - _ref = args || []; - _results = []; - for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { - arg = _ref[i]; + var j, len, ref, results; + ref = args || []; + results = []; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + arg = ref[i]; if (arg === "_data") { _dataPosition = i; - _results.push(null); + results.push(null); } else { delete unseenData[arg]; - _results.push(data[arg]); + results.push(data[arg]); } } - return _results; + return results; })(); if (_dataPosition != null) { argData[_dataPosition] = unseenData; @@ -57,15 +57,15 @@ return argData; }, argsToData: function(argList, args) { - var argString, data, field, i, value, _i, _len, _ref, _ref1; + var argString, data, field, i, j, len, ref, ref1, value; data = {}; - _ref = argList || []; - for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { - argString = _ref[i]; + ref = argList || []; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + argString = ref[i]; if (argString === "_data") { - _ref1 = args[i]; - for (field in _ref1) { - value = _ref1[field]; + ref1 = args[i]; + for (field in ref1) { + value = ref1[field]; data[field] = value; } } else { diff --git a/lib/ez-ctrl/manager.js b/lib/ez-ctrl/manager.js index 7d31c47..35717e5 100644 --- a/lib/ez-ctrl/manager.js +++ b/lib/ez-ctrl/manager.js @@ -1,6 +1,6 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 (function() { - var Bluebird, ControllerManager, fs, _; + var Bluebird, ControllerManager, _, fs; _ = require('lodash'); @@ -36,33 +36,33 @@ }; ControllerManager.prototype.loadFiles = function(dirname, files, ext) { - var Controller, file, hasExtension, index, isHidden, isTest, _i, _len, _results; - _results = []; - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; + var Controller, file, hasExtension, i, index, isHidden, isTest, len, results; + results = []; + for (i = 0, len = files.length; i < len; i++) { + file = files[i]; hasExtension = -1 !== (index = file.indexOf(ext)); isTest = -1 !== file.indexOf('.spec' + ext); isHidden = 0 === file.indexOf('.'); if (hasExtension && !isTest && !isHidden) { file = file.substr(0, index); Controller = require(dirname + "/" + file); - _results.push(this.addController(Controller)); + results.push(this.addController(Controller)); } else { - _results.push(void 0); + results.push(void 0); } } - return _results; + return results; }; ControllerManager.prototype.registerRoutes = function(app) { - var controller, name, _ref, _results; - _ref = this.controllers; - _results = []; - for (name in _ref) { - controller = _ref[name]; - _results.push(controller.registerRoutes(app)); + var controller, name, ref, results; + ref = this.controllers; + results = []; + for (name in ref) { + controller = ref[name]; + results.push(controller.registerRoutes(app)); } - return _results; + return results; }; ControllerManager.prototype.addController = function(ctrl) { diff --git a/lib/ez-ctrl/userError.js b/lib/ez-ctrl/userError.js index 04f7ebb..2e52eb9 100644 --- a/lib/ez-ctrl/userError.js +++ b/lib/ez-ctrl/userError.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.8.0 +// Generated by CoffeeScript 1.10.0 /* * The purpose of UserError is to be able to throw an error in a promise and catch it diff --git a/package.json b/package.json index d2680e6..020f8d6 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.5.6", "main": "index.js", "dependencies": { - "bluebird": "^2.9.25", + "bluebird": "^3.3.4", "express": "3.4.4", "inflection": "1.2.6", "lodash": "2.4.1", From 9284fc05915cd7c4a6eb90adca625ca5d8242d79 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Thu, 10 Mar 2016 16:46:14 -0800 Subject: [PATCH 25/30] 0.5.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 020f8d6..c3115b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.6", + "version": "0.5.7", "main": "index.js", "dependencies": { "bluebird": "^3.3.4", From f4e55f0f5e5f09074c7b90b80560fd2a1006e27e Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Thu, 10 Mar 2016 16:52:22 -0800 Subject: [PATCH 26/30] 0.5.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb64199..0300c32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.10", + "version": "0.5.11", "main": "index.js", "dependencies": { "bluebird": "^3.3.4", From bf672bd029a577316fb7364819247a751400b59b Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Thu, 24 Mar 2016 13:56:55 -0700 Subject: [PATCH 27/30] Fixed upgraded bluebird --- lib/ez-ctrl/base.coffee | 2 +- lib/ez-ctrl/base.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/ez-ctrl/base.coffee b/lib/ez-ctrl/base.coffee index 738a7b2..81968df 100644 --- a/lib/ez-ctrl/base.coffee +++ b/lib/ez-ctrl/base.coffee @@ -7,7 +7,7 @@ Converter = require('./converter') Validator = require('../ez-access/validator') UserError = require './userError' {Form} = require 'multiparty' -Form.prototype.parseAsync = Bluebird.promisify Form.prototype.parse +Form.prototype.parseAsync = Bluebird.promisify Form.prototype.parse, multiArgs: true util = require 'util' module.exports = BaseController = diff --git a/lib/ez-ctrl/base.js b/lib/ez-ctrl/base.js index acc9fc3..820808d 100644 --- a/lib/ez-ctrl/base.js +++ b/lib/ez-ctrl/base.js @@ -20,7 +20,9 @@ Form = require('multiparty').Form; - Form.prototype.parseAsync = Bluebird.promisify(Form.prototype.parse); + Form.prototype.parseAsync = Bluebird.promisify(Form.prototype.parse, { + multiArgs: true + }); util = require('util'); From f73fe8f407e9a958e27f210252dcb7db538baa29 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Thu, 24 Mar 2016 13:57:09 -0700 Subject: [PATCH 28/30] 0.5.12 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0300c32..a8910be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.11", + "version": "0.5.12", "main": "index.js", "dependencies": { "bluebird": "^3.3.4", From d18b6ba6156626b089cbed0f51dbc6227f1cbb60 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 29 Mar 2016 11:23:12 -0700 Subject: [PATCH 29/30] Fixed bluebird reflect/settle business. --- lib/ez-access/validator.coffee | 4 ++-- lib/ez-access/validator.js | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/ez-access/validator.coffee b/lib/ez-access/validator.coffee index d120efc..9fbee1e 100644 --- a/lib/ez-access/validator.coffee +++ b/lib/ez-access/validator.coffee @@ -22,7 +22,7 @@ promises.push @validateField(validatorData, field, data[field], controllerName) else if validatorData.default data[field] = validatorData.default - Bluebird.map(promises, (promise)-> Bluebird.resolve(promise).reflect()).then (results)-> + Bluebird.all(promises.map (promise)-> promise.reflect()).then (results)-> errors = _.filter results, (result)-> not result.isFulfilled() if errors.length > 0 @@ -53,7 +53,7 @@ else if validators for validator, validatorData of validators promises.push @runValidate value, validator, validatorData, field, controllerName - Bluebird.settle(promises).then (results)-> + Bluebird.all(promises.map (promise)-> promise.reflect()).then (results)-> readableErrors = (for result in results when not result.isFulfilled() reason = result.reason() if reason instanceof Error diff --git a/lib/ez-access/validator.js b/lib/ez-access/validator.js index 63db7c0..7f201c1 100644 --- a/lib/ez-access/validator.js +++ b/lib/ez-access/validator.js @@ -30,9 +30,9 @@ data[field] = validatorData["default"]; } } - return Bluebird.map(promises, function(promise) { - return Bluebird.resolve(promise).reflect(); - }).then(function(results) { + return Bluebird.all(promises.map(function(promise) { + return promise.reflect(); + })).then(function(results) { var error, errors; errors = _.filter(results, function(result) { return !result.isFulfilled(); @@ -73,7 +73,9 @@ promises.push(this.runValidate(value, validator, validatorData, field, controllerName)); } } - return Bluebird.settle(promises).then(function(results) { + return Bluebird.all(promises.map(function(promise) { + return promise.reflect(); + })).then(function(results) { var readableErrors, reason, result; readableErrors = (function() { var i, len, results1; From 612c3c0b242005a28a0f95ab617d0174ef35e0b7 Mon Sep 17 00:00:00 2001 From: Nathan Tate Date: Tue, 29 Mar 2016 11:23:21 -0700 Subject: [PATCH 30/30] 0.5.13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a8910be..1849e2b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ez-ctrl", - "version": "0.5.12", + "version": "0.5.13", "main": "index.js", "dependencies": { "bluebird": "^3.3.4",