howl.interact

.unregister(name) removes the specified input

interact.register name: 'foo', description: 'foo', handler: ->
interact.unregister 'foo'
assert.is_nil interact.foo

calling the interaction calls the handler, returns result

handler = spy.new -> 'r1', 'r2'
interact.register
  name: 'interaction_call'
  description: 'calls passed in function'
  :handler

multi_value = table.pack interact.interaction_call 'arg1', 'arg2'
assert.spy(handler).was_called_with 'arg1', 'arg2'
assert.is_same {'r1', 'r2', n:2}, multi_value

.register(spec)

raises an error if any of the mandatory fields are missing

assert.raises 'name', -> interact.register description: 'foo', handler: ->
assert.raises 'description', -> interact.register name: 'foo', handler: ->
assert.raises 'handler', -> interact.register name: 'foo', description: 'foo'