{"id":26474004,"url":"https://github.com/ramadis/unmiss","last_synced_at":"2025-03-19T22:39:46.011Z","repository":{"id":46129871,"uuid":"102080667","full_name":"ramadis/unmiss","owner":"ramadis","description":"🔍 Ruby's method_missing implementation in modern javascript","archived":false,"fork":false,"pushed_at":"2021-11-11T23:33:22.000Z","size":218,"stargazers_count":27,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-08-11T09:24:10.133Z","etag":null,"topics":["javascript","metaprogramming","method-missing","ruby"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ramadis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-01T06:23:44.000Z","updated_at":"2023-03-11T12:20:00.000Z","dependencies_parsed_at":"2022-09-26T18:30:57.729Z","dependency_job_id":null,"html_url":"https://github.com/ramadis/unmiss","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramadis%2Funmiss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramadis%2Funmiss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramadis%2Funmiss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramadis%2Funmiss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ramadis","download_url":"https://codeload.github.com/ramadis/unmiss/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244519091,"owners_count":20465585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","metaprogramming","method-missing","ruby"],"created_at":"2025-03-19T22:39:45.408Z","updated_at":"2025-03-19T22:39:46.005Z","avatar_url":"https://github.com/ramadis.png","language":"JavaScript","readme":"# Unmiss 🔍\n\n\u003cimg width=\"1088\" alt=\"687474703a2f2f692e6375626575706c6f61642e636f6d2f53495344714b2e706e67\" src=\"https://user-images.githubusercontent.com/2911971/141382997-5f948f7b-456f-42eb-ad0c-16ab9cc050a0.png\"\u003e\n\n**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](http://rubylearning.com/satishtalim/ruby_method_missing.html).\n\n[![Build Status](https://travis-ci.org/ramadis/unmiss.svg?branch=master)](https://travis-ci.org/ramadis/unmiss)\n![npm bundle size](https://img.shields.io/bundlephobia/minzip/unmiss?color=green)\n![npm](https://img.shields.io/npm/v/unmiss?color=green)\n## Requirements\n**Unmiss** uses ES6 `Proxies` to simulate `method_missing`, so it will run on node versions \u003e= v6.4.0. It also supports [most modern browsers](https://caniuse.com/proxy).\n\n## Installation\n\n```bash\nnpm install --save unmiss\n```\n\n## Usage and Examples\n\nThere are multiple ways to use **Unmiss**: Using class inheritance, by calling a high order function, using [decorators](https://github.com/tc39/proposal-decorators), or wrapping an existing instance. Whichever way you prefer, add to your class a `methodMissing` method to generate an awesome safety net method.\n\nUsing a high order function:\n```js\nimport { withMethodMissing } from 'unmiss'\n\nclass Example {\n    methodMissing(name, ...args) {\n        console.log(`Method ${name} was called with arguments: ${args.join(' ')}`);\n    }\n}\n\nconst instance = new withMethodMissing(Example);\ninstance.what('is', 'this');\n\u003e Method what was called with arguments: is this\n```\n\nUsing a modern javascript decorator:\n```js\nimport { withMethodMissing } from 'unmiss'\n\n@withMethodMissing\nclass Example {\n    methodMissing(name, ...args) {\n        console.log(`Method ${name} was called with arguments: ${args.join(' ')}`);\n    }\n}\n\nconst instance = new Example();\ninstance.what('is', 'this');\n\u003e Method what was called with arguments: is this\n```\n\nUsing ES6 classical inheritance:\n```js\nimport { MethodMissingClass } from 'unmiss'\n\nclass Example extends MethodMissingClass {\n    methodMissing(name, ...args) {\n        console.log(`Method ${name} was called with arguments: ${args.join(' ')}`);\n    }\n}\n\nconst instance = new Example();\ninstance.what('is', 'this');\n\u003e Method what was called with arguments: is this\n```\n**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.\n\nWrapping an existing instance of a class:\n```js\nimport { addMethodMissing } from 'unmiss'\n\nclass Example {\n    methodMissing(name, ...args) {\n        console.log(`Method ${name} was called with arguments: ${args.join(' ')}`);\n    }\n}\n\nconst instance = addMethodMissing(new Example());\ninstance.what('is', 'this');\n\u003e Method what was called with arguments: is this\n```\n\n## Contributing\n\nFeel free to submit any issues and PRs you want. To run the project first install its dependencies:\n\n```sh\nnpm install\n```\n\nThen build it and test it:\n\n```sh\nnpm run build \u0026\u0026 npm run test\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framadis%2Funmiss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framadis%2Funmiss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framadis%2Funmiss/lists"}