diff --git a/.travis.yml b/.travis.yml index 275a186476..b18286c660 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,9 @@ rvm: - 1.8.7 env: - RAILS_VERSION=master - - RAILS_VERSION=4.0.2 + - RAILS_VERSION=4.0.4 - RAILS_VERSION=4-0-stable - - RAILS_VERSION=3.2.16 + - RAILS_VERSION=3.2.17 - RAILS_VERSION=3-2-stable - RAILS_VERSION=3.1.12 - RAILS_VERSION=3.0.20 @@ -28,9 +28,9 @@ matrix: - rvm: 1.9.2 env: RAILS_VERSION=master - rvm: 1.8.7 - env: RAILS_VERSION=4.0.2 + env: RAILS_VERSION=4.0.4 - rvm: 1.9.2 - env: RAILS_VERSION=4.0.2 + env: RAILS_VERSION=4.0.4 - rvm: 1.8.7 env: RAILS_VERSION=4-0-stable - rvm: 1.9.2 diff --git a/Gemfile b/Gemfile index 6ec84db4ba..b60f8553ba 100644 --- a/Gemfile +++ b/Gemfile @@ -57,7 +57,7 @@ when /master/ when /stable$/ gem "rails", :git => "git://github.com/rails/rails.git", :branch => version when nil, false, "" - gem "rails", "4.0.2" + gem "rails", "4.0.4" else gem "rails", version end diff --git a/lib/rspec/rails/mocks.rb b/lib/rspec/rails/mocks.rb index ee26f34a2c..f8396b158a 100644 --- a/lib/rspec/rails/mocks.rb +++ b/lib/rspec/rails/mocks.rb @@ -149,6 +149,10 @@ def @object.__model_class_has_column?(method_name) #{model_class}.respond_to?(:column_names) && #{model_class}.column_names.include?(method_name.to_s) end + def @object.has_attribute?(attr_name) + __model_class_has_column?(attr_name) + end unless #{stubs.has_key?(:has_attribute?)} + def @object.respond_to?(method_name, include_private=false) __model_class_has_column?(method_name) ? true : super end unless #{stubs.has_key?(:respond_to?)} diff --git a/spec/rspec/rails/mocks/mock_model_spec.rb b/spec/rspec/rails/mocks/mock_model_spec.rb index c24a2629d0..4970538d9c 100644 --- a/spec/rspec/rails/mocks/mock_model_spec.rb +++ b/spec/rspec/rails/mocks/mock_model_spec.rb @@ -194,6 +194,33 @@ end end + describe "#has_attribute?" do + context "with an ActiveRecord model" do + before(:each) do + MockableModel.stub(:column_names).and_return(["column_a", "column_b"]) + @model = mock_model(MockableModel) + end + + it "has a given attribute if the underlying model has column of the same name" do + expect(@model.has_attribute?("column_a")).to be_true + expect(@model.has_attribute?("column_b")).to be_true + expect(@model.has_attribute?("column_c")).to be_false + end + + it "accepts symbols" do + expect(@model.has_attribute?(:column_a)).to be_true + expect(@model.has_attribute?(:column_b)).to be_true + expect(@model.has_attribute?(:column_c)).to be_false + end + + it "allows has_attribute? to be explicitly stubbed" do + @model = mock_model(MockableModel, :has_attribute? => false) + expect(@model.has_attribute?(:column_a)).to be_false + expect(@model.has_attribute?(:column_b)).to be_false + end + end + end + describe "#respond_to?" do context "with an ActiveRecord model" do before(:each) do