0.8.0 • Published 9 years ago

commandojs v0.8.0

Weekly downloads
3
License
MIT
Repository
github
Last release
9 years ago

Commando Library

Tiny abstraction over promises and command pattern to ease decoupling in Javascript project.

This project has no dependency and only add ~1.8k in amd minified version and < 700 bytes if gzipped.

What's in

  • command launchers:
    • default, which use a function as a command,
    • promise, which wraps your command in a promise
  • command pool which basically create a map between event and commands

Version

AMD

  • non minified: dist/commando.amd.js
  • minified version: dist/commando.amd.min.js

Common JS

  • the whole library: dist/commonjs/commando.js
  • or if you only want a part:
    • command launcher: dist/commonjs/commando/launcher
    • command pool: dist/commonjs/commando/pool

Browser version

TODO

Usage

Command launcher without promise support

// given this simple command
var command = function (a, b) {
  console.log(a, b);
};

// Setup default launcher without promise support.
var launcher = new DefaultLauncher();

launcher.execute(command, ['foo', 'bar']);

// it will print the following message to console
foo, bar

Command launcher with promise support

// Setup launcher with Promise object.
var launcher = new PromiseLauncher({
  promise: Promise
});

// Execute a command
// Command should have a constructor which conforms to this API:
//   function(resolve, reject) {}

Command = function (resolve, reject) {
  // keep a reference on these two resolvers
  this.success = resolve;
  this.error = reject;
};

Command.prototype.execute(a, b) {
  // do something and calls
  // e.g this function will invert a and b
  ok ? this.success(b, a) : this.error('something wrong');
};

var promise = launcher.execute(Command, ['foo', 'bar']);

// Add a callback
promise.then(function (one, two) {
  console.log('Success!', one, two); // will print 'Success, bar, foo'
}, function (error) {
  console.warn('Error!', error); // will print 'Error! something wrong'
});

Command pool

// (Optional create a command map)
var commandMap = {
  login: LoginCommand
};

// Pass some arguments
// * eventHub (required) : any object with on, off and trigger methods
// * commandMap (optional) : to register some commands
// * options: (optional): Object to set some options. Supported options:
//    + launcher: String ('default', 'promise'): enable the setup of the launcher
//      using the default ones provided. If you want to setup a custom launcher use
//      the `withLauncher(object)` method
var pool = new CommandPool(eventHub, commandMap, options);

// register a new command for `logout` event
pool.addCommand('logout', LogoutCommand);

// register two command for `username:change` event
pool.addCommand('username:change', [
  UpdateUsernameLabelCommand, // for e.g. update username label 'Hi foo'
  RequestUsernameChangeCommand // send a request to some API route
]);

// remove previously registered login command
pool.delCommand('login', LoginCommand);

// remove all commands attached to event 'username:change'
pool.delCommand('username:change');

Chaining API

You can define add multiple commands at once as the addCommand and delCommand are chainable. Thus you can write the previous example like this:

// (Optional create a command map)
var commandMap = {
  login: LoginCommand
};

// Pass some arguments
// * eventHub (required) : any object with on, off and trigger methods
// * commandMap (optional) : to register some commands
// * options: (optional): Object to set some options. Supported options:
//    + launcher: String ('default', 'promise'): enable the setup of the launcher
//      using the default ones provided. If you want to setup a custom launcher use
//      the `withLauncher(object)` method
var pool = new CommandPool(eventHub, commandMap, options);

pool
  // register a new command for `logout` event
  .addCommand('logout', LogoutCommand)
  // register two command for `username:change` event
  .addCommand('username:change', [
    UpdateUsernameLabelCommand, // for e.g. update username label 'Hi foo'
    RequestUsernameChangeCommand // send a request to some API route
  ]);

pool
  // remove previously registered login command
  .delCommand('login', LoginCommand)
  // remove all commands attached to event 'username:change'
  .delCommand('username:change');

Example

TODO

API

See docs folder.

Roadmap

  • add tests
  • add examples
  • add docs
  • provide a browser version

License

MIT

0.8.0

9 years ago

0.7.2

9 years ago

0.7.1

9 years ago

0.7.0

9 years ago

0.5.4

10 years ago

0.5.3

10 years ago

0.5.2

10 years ago

0.5.1

10 years ago

0.5.0

10 years ago

0.4.2

10 years ago

0.4.1

10 years ago

0.4.0

10 years ago