Temporaries Build Status

Set things temporarily and declaratively. Best way to test.

  • Set values of constants.
  • Set values of attributes.
  • Set values of hash keys.
  • Set values of instance variables.
  • Set values of class variables.
  • Set values of globals.
  • Set definitions of methods.
  • Set a temporary directory.

Do it for the length of a test, or within a specific block in your code. Nest them arbitrarily; the innermost one applies.

How

In RSpec

describe MyClass do
  # Mylib.foo will be 5 within these examples.
  use_attribute_value MyLib, :foo, 5

  describe MyClass do
    # In this nested example group, it will be 7.
    use_attribute_value MyLib, :foo, 7
  end
end

Here's the full list of methods you can use:

use_hash_value(hash, key, value)
use_constant_value(module, :constant, value)
use_attribute_value(object, :attribute, value)
use_instance_variable_value(object, :name, value)
use_class_variable_value(object, :name, value)
use_global_value(:name, value)
use_method_definition(module, :name, ->(*args){defintion})

Sigils in the name are unnecessary in the last 3 (unlike instance_variable_get, for instance).

In Test::Unit

class MyTest < Test::Unit::TestCase
  use_attribute_value MyLib, :foo, 5
end

Digging Deeper

You may also set the temporary for the duration of a particular block:

with_hash_value hash, key, value do
  ...
end

with_constant_value module, :constant, value do
  ...
end

with_attribute_value object, :attribute, value do
  ...
end

with_instance_variable_value object, :name, value do
  ...
end

with_class_variable_value object, :name, value do
  ...
end

with_global_value :name, value do
  ...
end

with_method_definition module, :name, ->(*args){definition} do
  ...
end

with_temporary_directory path do
  # `tmp' refers to the directory.
end

Or push and pop temporary values onto the stack yourself:

push_hash_value hash, key, value
pop_hash_value hash, key

push_constant_value module, :constant, value
pop_constant_value module, :constant

# etc.

Keep 'em balanced, maestro.

Contributing

  • Source
  • Bug reports
  • Patches: Fork on Github, send pull request.
    • Include tests where practical.
    • Leave the version alone, or bump it in a separate commit.

Copyright (c) George Ogata. See LICENSE for details.