1.0.10 • Published 2 years ago

unmiss v1.0.10

Weekly downloads
245
License
MIT
Repository
github
Last release
2 years ago

Unmiss 🔍

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.

Build Status npm bundle size npm

Requirements

Unmiss uses ES6 Proxies to simulate method_missing, so it will run on node versions >= v6.4.0. It also supports most modern browsers.

Installation

npm install --save unmiss

Usage and Examples

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

Contributing

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
1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.10

2 years ago

1.0.6

4 years ago

1.0.5

5 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago