Handle values based on a property.
npm:
npm install zwitch
var zwitch = require('zwitch') var handle = zwitch('type') handle.invalid = invalid handle.unknown = unknown handle.handlers.alpha = handle handle({type: 'alpha'})
Or, with a switch
statement:
function handle(value) { var fn if (!value || typeof value !== 'object' || !('type' in value)) { fn = invalid } else { switch (value.type) { case 'alpha': fn = handle break default: fn = unknown break } } return fn.apply(this, arguments) } handle({type: 'alpha'})
zwitch(key[, options])
Create a functional switch, based on a key
(string
).
options
Options can be omitted and added later to one
.
handlers
(Object.<Function>
, optional) — Object mapping values to handle, stored on one.handlers
invalid
(Function
, optional) — Handle values without key
, stored on one.invalid
unknown
(Function
, optional) — Handle values with an unhandled key
, stored on one.unknown
Function
— See one
.
one(value[, rest...])
Handle one value. Based on the bound key
, a respective handler will be invoked. If value
is not an object, or doesn’t have a key
property, the special “invalid” handler will be invoked. If value
has an unknown key
, the special “unknown” handler will be invoked.
All arguments, and the context object, are passed through to the handler, and it’s result is returned.
one.handlers
Map of handlers (Object.<string, Function>
).
one.invalid
Special handler
invoked if a value doesn’t have a key
property. If not set, undefined
is returned for invalid values.
one.unknown
Special handler
invoked if a value does not have a matching handler. If not set, undefined
is returned for unknown values.
function handler(value[, rest...])
Handle one value.
mapz
— Functional map