Unmiss is a Ruby's method_missing
implementation you can use in your javascript classes. Basically, it is a method that is called when no matching method is found. It gives you a way to intercept unanswerable messages and handle them gracefully. Learn more about method_missing
here.
Unmiss uses ES6 Proxies
to simulate method_missing
, so it will run on node versions >= v6.4.0. It also supports most modern browsers.
npm install --save unmiss
There are multiple ways to use Unmiss: Using class inheritance, by calling a high order function, using decorators, or wrapping an existing instance. Whichever way you prefer, add to your class a methodMissing
method to generate an awesome safety net method.
Using a high order function:
import { withMethodMissing } from 'unmiss'
class Example {
methodMissing(name, ...args) {
console.log(`Method ${name} was called with arguments: ${args.join(' ')}`);
}
}
const instance = new withMethodMissing(Example);
instance.what('is', 'this');
> Method what was called with arguments: is this
Using a modern javascript decorator:
import { withMethodMissing } from 'unmiss'
@withMethodMissing
class Example {
methodMissing(name, ...args) {
console.log(`Method ${name} was called with arguments: ${args.join(' ')}`);
}
}
const instance = new Example();
instance.what('is', 'this');
> Method what was called with arguments: is this
Using ES6 classical inheritance:
import { MethodMissingClass } from 'unmiss'
class Example extends MethodMissingClass {
methodMissing(name, ...args) {
console.log(`Method ${name} was called with arguments: ${args.join(' ')}`);
}
}
const instance = new Example();
instance.what('is', 'this');
> Method what was called with arguments: is this
ALERT: If you choose to use the inheritance way, take into account that if you want to use a constructor
in your class, you will have to call super()
first.
Wrapping an existing instance of a class:
import { addMethodMissing } from 'unmiss'
class Example {
methodMissing(name, ...args) {
console.log(`Method ${name} was called with arguments: ${args.join(' ')}`);
}
}
const instance = addMethodMissing(new Example());
instance.what('is', 'this');
> Method what was called with arguments: is this
Feel free to submit any issues and PRs you want. To run the project first install its dependencies:
npm install
Then build it and test it:
npm run build && npm run test