module RSpec::Core::RSpecSet::ClassMethods
Public Instance Methods
set(variable_name, &block)
click to toggle source
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
# 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