From 176234d2d6e9fbdaa52531aa8ed2383e17b1dc2f Mon Sep 17 00:00:00 2001 From: David Schoonover Date: Mon, 16 Jul 2012 14:41:31 -0700 Subject: [PATCH] Beginning of a generic resource router. --- src/base/resource-router.co | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 52 insertions(+), 0 deletions(-) create mode 100644 src/base/resource-router.co diff --git a/src/base/resource-router.co b/src/base/resource-router.co new file mode 100644 index 0000000..f5ce9da --- /dev/null +++ b/src/base/resource-router.co @@ -0,0 +1,52 @@ +Backbone = require 'backbone' + +{ _, op, +} = require 'limn/util' +{ BaseBackboneMixin, mixinBase, +} = require 'limn/base/base-mixin' + + + + + +ResourceRouter = exports.ResourceRouter = Backbone.Router.extend mixinBase do + __bind__ : [] + + /** + * Singular, lowercase resource-noun. + * @optional + * @type String + * @example "user" + */ + id : null + + /** + * Plural, lowercase resource-noun. + * @required + * @type String + * @example "users" + */ + name : null + + + + constructor : function ResourceRouter (opts={}) + @__class__ = @constructor + @__superclass__ = @..__super__.constructor + @waitingOn = 0 + opts.routes or= @makeRoutes() + Backbone.Router.apply this, opts + + + makeRoutes: -> + {name, id} = this + routes = {} + # XXX: reverse these mappings? + routes["#name/(new|edit)"] = @create if typeof @create is 'function' + routes["#name/:#id/edit"] = @edit if typeof @edit is 'function' + routes["#name/:#id"] = @show if typeof @show is 'function' + routes["#name"] = @index if typeof @index is 'function' + + + + -- 1.7.0.4