path-proxy
Given an group of paths (say, from an API schema), you might need to create a
set of proxy objects for interacting with those paths. This is the situation I
found myself in while working on the Node client for the Heroku API.
Given a set of paths and a base constructor function, path-proxy will create a
network of logical proxy objects based on the paths and attach it to the
constructor's prototype.
Install
npm install path-proxy --save
Usage
var pathProxy = require('path-proxy');
function ApiClient() {}
pathProxy.proxy(ApiClient, [
"/foo",
"/foo/{id}/bar"
]);
var client = new ApiClient();
client.foo("qux").bar();
This may not appear all that useful—they're mostly just empty functions—until you
start mucking around with their prototypes:
var BarProxy = pathProxy.pathProxy(ApiClient, "/foo/{id}/bar");
BarProxy.prototype.sayHello = function () {
console.log("hello");
};
client.foo("qux").bar().sayHello();
They also have access to a few useful attributes:
var baz = client.foo("qux").bar("baz");
baz.params;
baz.pathSegments;
baz.path;
And can access the instance of the base constructor they're based off of:
ApiClient.prototype.delete = function (path, callback) {
var message = this.name + " deleted at " + path;
callback(message);
};
var client = new ApiClient();
client.name = "Jonathan";
BarProxy.prototype.delete = function (callback) {
this.base.delete(this.path, callback);
};
client.foo("qux").bar("baz").delete(function (message) {
});
client.delete("/foo/qux/bar/baz", function (message) {
});
Tests
path-proxy uses jasmine-node for tests. To run them:
$ npm install
$ npm test