howl.inputs

after_each -> inputs.unregister 'foo'

.<name> allows direct indexing of inputs

def = name: 'foo', description: 'foo', factory: -> true
inputs.register def
assert.same inputs.foo, def

.unregister(name) removes the specified input

inputs.register name: 'foo', description: 'foo', factory: -> true
inputs.unregister 'foo'

assert.is_nil inputs.foo

allows iterating through inputs using pairs()

inputs.register name: 'foo', description: 'foo', factory: -> true
names = [name for name, func in pairs inputs when name == 'foo']
assert.same names, { 'foo' }

.register(spec)

raises an error if any of the mandatory inputs are missing

assert.raises 'name', -> inputs.register description: 'foo', factory: -> true
assert.raises 'factory', -> inputs.register name: 'foo', description: 'foo'
assert.raises 'description', -> inputs.register name: 'foo', factory: -> nil

read(input, options)

raises an error unless options contains .prompt

inputs.register name: 'foo', description: 'foo', factory: -> true
assert.raises 'prompt', -> inputs.read 'foo'

raises an error for an unknown input

assert.raises 'unknown input', -> inputs.read 'guargl', prompt: 'foo'