howl.util.Sandbox

allows running a function with a specified environment

box = Sandbox env: {from_env: -> 'bar!'}
assert.equal 'bar!', box -> from_env!

allows passing parameters to the function

box = Sandbox!
f = (...) -> return ...
assert.equal 'bar!', box(f, 'bar!')

.put allows modifiying the environment

box = Sandbox!
box\put from_env: -> 'bar!'
assert.equal 'bar!', box -> from_env!

allows global access by default

box = Sandbox!
assert.equal table, box -> return table

disallows global access if options.no_globals is set

box = Sandbox no_globals: true
assert.is_nil box -> return table

(when options.no_implicit_globals is set)

raises an error upon implicit global writes

box = Sandbox no_implicit_globals: true
renegade = -> export frob = 'bar!'
assert.raises 'implicit global', -> box renegade

(when options.no_implicit_globals is not set)

collects exports into .exports

box = Sandbox!
box -> export foo = 'bar'
assert.equal box.exports.foo, 'bar'