Module: RSpec::Core::RSpecSet::ClassMethods

Defined in:
lib/rspec-set.rb

Instance Method Summary collapse

Instance Method Details

#set(variable_name, &block) ⇒ Object

Set @variable_name in a before(:all) block and give access to it via let(:variable_name)

Example:

set(:transaction) { Factory(:address) }

it "should be valid" do
  transaction.should be_valid
end


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rspec-set.rb', line 18

def set(variable_name, &block)
  before(:all) do
    # Create model
    self.class.send(:class_variable_set, "@@__rspec_set_#{variable_name}".to_sym, instance_eval(&block))
  end

  before(:each) do
    model = send(variable_name)

    if model.is_a?(ActiveRecord::Base)
      if model.destroyed?
        # Reset destroyed model
        self.class.send(:class_variable_set, "@@__rspec_set_#{variable_name}".to_sym, model.class.find(model.id))
      elsif !model.new_record?
        # Reload saved model
        model.reload
      end
    else
      warn "#{variable_name} is a #{model.class} - rspec-set works with ActiveRecord models only"
    end
  end

  define_method(variable_name) do
    self.class.send(:class_variable_get, "@@__rspec_set_#{variable_name}".to_sym)
  end
end