@api private
# File lib/rspec/rails/matchers/be_a_new.rb, line 25 def failure_message_for_should [].tap do |message| unless actual.is_a?(expected) && actual.new_record? message << "expected #{actual.inspect} to be a new #{expected.inspect}" end unless attributes_match?(actual) if unmatched_attributes.size > 1 message << "attributes #{unmatched_attributes.inspect} were not set on #{actual.inspect}" else message << "attribute #{unmatched_attributes.inspect} was not set on #{actual.inspect}" end end end.join(' and ') end
@api private
# File lib/rspec/rails/matchers/be_a_new.rb, line 6 def matches?(actual) super actual.is_a?(expected) && actual.new_record? && attributes_match?(actual) end
Use this to specify the specific attributes to match on the new record.
@example
it "assigns a new Thing with the submitted attributes" do post :create, :thing => { :name => "Illegal Value" } assigns(:thing).should be_a_new(Thing).with(:name => nil) end
# File lib/rspec/rails/matchers/be_a_new.rb, line 19 def with(expected_attributes) attributes.merge!(expected_attributes) self end