Module: RSpec::Core::RSpecSet::ClassMethods
- Defined in:
- lib/rspec-set.rb
Instance Method Summary collapse
-
#set(variable_name, &block) ⇒ Object
Set @variable_name in a before(:all) block and give access to it via let(:variable_name).
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 |