@websdk/nap
Advanced tools
Comparing version 0.10.7 to 0.11.0
@@ -16,8 +16,8 @@ (function (global, factory) { | ||
var nap = { | ||
environment: {} | ||
}; | ||
var nap = { environment: {} }; | ||
nap.web = newWeb; | ||
nap.is = is; | ||
nap.into = into; | ||
nap.negotiate = { | ||
@@ -28,2 +28,3 @@ selector: bySelector, | ||
}; | ||
nap.responses = { | ||
@@ -42,2 +43,5 @@ ok: ok, | ||
if (!node) return; | ||
// TODO: This breaks d3; presumably because there's a discrepancy in domino CustomEvent vs. jsdom CustomEvent | ||
// node.dispatchEvent && node.dispatchEvent(new CustomEvent("update")) | ||
res.body(node); | ||
@@ -144,11 +148,12 @@ }; | ||
function bySelector() { | ||
var options = toArray(arguments).reduce(function (curr, next) { | ||
if (isStr(next)) curr.push({ | ||
selector: next | ||
});else curr[curr.length - 1].fn = next; | ||
if (isStr(next)) curr.push({ selector: next });else curr[curr.length - 1].fn = next; | ||
return curr; | ||
}, []); | ||
return function (node, cb) { | ||
var called = false, | ||
cb = cb || noop; | ||
called = options.some(function (option) { | ||
@@ -161,2 +166,3 @@ if (is(node, option.selector)) { | ||
}); | ||
if (!called) cb("No matching selector"); | ||
@@ -182,20 +188,30 @@ }; | ||
web.resource = function (name, ptn, handler) { | ||
if (arguments.length == 1) return resources[name]; | ||
if (arguments.length == 2) { | ||
web.resource = function (name, ptn, handler, metadata) { | ||
if (arguments.length == 1) { | ||
return resources[name]; | ||
} else if (arguments.length == 2) { | ||
handler = ptn; | ||
ptn = name; | ||
} else if (arguments.length == 3 && typeof handler !== 'function') { | ||
metadata = handler; | ||
handler = ptn; | ||
ptn = name; | ||
} | ||
metadata || (metadata = {}); | ||
handler = wrap(handler, middleware); | ||
resources[name] = { | ||
name: name, | ||
ptn: ptn, | ||
handler: handler | ||
handler: handler, | ||
metadata: metadata | ||
}; | ||
routes.add(ptn, function (params) { | ||
return { | ||
fn: handler, | ||
params: params | ||
params: params, | ||
metadata: metadata | ||
}; | ||
@@ -206,7 +222,8 @@ }); | ||
web.find = find; | ||
web.req = function (path, cb) { | ||
var req = isStr(path) ? { | ||
uri: path | ||
} : path, | ||
var req = isStr(path) ? { uri: path } : path, | ||
cb = cb || noop; | ||
req.web = web; | ||
@@ -217,5 +234,4 @@ req.method || (req.method = "get"); | ||
req.headers.accept || (req.headers.accept = "application/x.nap.view"); | ||
var match = routes.match(req.uri) || { | ||
fn: wrap(notFound, middleware) | ||
}; | ||
var match = find(req.uri) || { fn: wrap(notFound, middleware) }; | ||
req.params = match.params; | ||
@@ -233,5 +249,5 @@ match.fn.call(null, req, cb); | ||
web.uri = function (ptn, params) { | ||
var meta = resources[ptn]; | ||
if (meta) ptn = meta.ptn; | ||
var parts = rhumb._parse(ptn); | ||
@@ -243,3 +259,2 @@ | ||
} | ||
return [uri, part.input].join("/"); | ||
@@ -250,2 +265,6 @@ }, ""); | ||
return web; | ||
function find(path) { | ||
return routes.match(path); | ||
} | ||
} | ||
@@ -252,0 +271,0 @@ |
{ | ||
"name": "@websdk/nap", | ||
"version": "0.10.7", | ||
"version": "0.11.0", | ||
"description": "Organizing applications into resources", | ||
@@ -5,0 +5,0 @@ "main": "lib/nap.js", |
@@ -175,10 +175,16 @@ var rhumb = require('@websdk/rhumb') | ||
web.resource = function(name, ptn, handler){ | ||
if(arguments.length == 1) return resources[name] | ||
if(arguments.length == 2) { | ||
web.resource = function(name, ptn, handler, metadata) { | ||
if (arguments.length == 1) { | ||
return resources[name] | ||
} else if (arguments.length == 2) { | ||
handler = ptn | ||
ptn = name | ||
} else if (arguments.length == 3 && typeof handler !== 'function') { | ||
metadata = handler | ||
handler = ptn | ||
ptn = name | ||
} | ||
metadata || (metadata = {}) | ||
handler = wrap(handler, middleware) | ||
@@ -190,2 +196,3 @@ | ||
, handler : handler | ||
, metadata : metadata | ||
} | ||
@@ -197,2 +204,3 @@ | ||
, params : params | ||
, metadata: metadata | ||
} | ||
@@ -203,4 +211,5 @@ }) | ||
web.find = find | ||
web.req = function(path, cb){ | ||
var req = isStr(path) ? {uri: path} : path | ||
@@ -215,3 +224,3 @@ , cb = cb || noop | ||
var match = routes.match(req.uri) || { fn : wrap(notFound, middleware) } | ||
var match = find(req.uri) || { fn: wrap(notFound, middleware) } | ||
req.params = match.params | ||
@@ -246,4 +255,8 @@ match.fn.call(null, req, cb) | ||
return web | ||
function find(path) { | ||
return routes.match(path) | ||
} | ||
} | ||
module.exports = nap |
@@ -88,2 +88,35 @@ var nap = require('../src/nap') | ||
test('Web should return handler, params, and metadata when finding a resource by path', function(t) { | ||
t.plan(12) | ||
var web = nap.web() | ||
, fn_a = function() {} | ||
, fn_b = function() {} | ||
, fn_c = function() {} | ||
, fn_d = function() {} | ||
web.resource('/no/metadata/no/params', fn_a) | ||
var a = web.find('/no/metadata/no/params') | ||
t.equal(a.fn, fn_a) | ||
t.deepEqual(a.params, {}) | ||
t.deepEqual(a.metadata, {}) | ||
web.resource('/with/metadata/no/params', fn_b, { foo: 'bar' }) | ||
var b = web.find('/with/metadata/no/params') | ||
t.equal(b.fn, fn_b) | ||
t.deepEqual(b.params, {}) | ||
t.deepEqual(b.metadata, { foo: 'bar' }) | ||
web.resource('/{with}/metadata/and/{params}', fn_c, { baz: 'wibble' }) | ||
var c = web.find('/some/metadata/and/fun') | ||
t.equal(c.fn, fn_c) | ||
t.deepEqual(c.params, { with: 'some', params: 'fun' }) | ||
t.deepEqual(c.metadata, { baz: 'wibble' }) | ||
web.resource('named', '/also/{with}/metadata/and/{params}', fn_d, { boo: 'moo' }) | ||
var d = web.find('/also/some/metadata/and/fun') | ||
t.equal(d.fn, fn_d) | ||
t.deepEqual(d.params, { with: 'some', params: 'fun' }) | ||
t.deepEqual(d.metadata, { boo: 'moo' }) | ||
}) | ||
test("Web should respond with a 404 if no resource is found", function(t) { | ||
@@ -90,0 +123,0 @@ t.plan(1) |
Sorry, the diff of this file is not supported yet
60548
832