Only include ActiveRecord matchers if AR is defined
Fixes cases where you may be using ActiveModel without ActiveRecord. Also add a test for loading without ActiveRecord. The Cucumber feature creates a Gemfile containing ActiveModel and shoulda-matchers, and then asserts that both can be loaded without any errors. The ActiveModel version used will match that of the Rails version specified in the Appraisal Gemfile; and if no such version can be determined, the latest will be used. Closes #480.
This commit is contained in:
parent
36ed5ff7e5
commit
7f425948f8
3
NEWS.md
3
NEWS.md
|
@ -3,6 +3,9 @@
|
||||||
* Fix `ComparisonMatcher` so that `validate_numericality_of` comparison matchers
|
* Fix `ComparisonMatcher` so that `validate_numericality_of` comparison matchers
|
||||||
work with large numbers (#483).
|
work with large numbers (#483).
|
||||||
|
|
||||||
|
* Fix so that ActiveRecord matchers aren't included when ActiveRecord
|
||||||
|
isn't defined (i.e. if you are using ActiveModel only).
|
||||||
|
|
||||||
# 2.6.0
|
# 2.6.0
|
||||||
|
|
||||||
* The boolean argument to `have_db_index`'s `unique` option is now optional, for
|
* The boolean argument to `have_db_index`'s `unique` option is now optional, for
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
Feature: integration with ActiveModel
|
||||||
|
|
||||||
|
Scenario: create a new project using matchers
|
||||||
|
When I generate a new ActiveModel application
|
||||||
|
And I configure the application to use "shoulda-matchers" from this project
|
||||||
|
And I write to "load_dependencies.rb" with:
|
||||||
|
"""
|
||||||
|
require 'active_model'
|
||||||
|
require 'shoulda-matchers'
|
||||||
|
|
||||||
|
puts ActiveModel::VERSION::STRING
|
||||||
|
puts "Loaded all dependencies without errors"
|
||||||
|
"""
|
||||||
|
When I successfully run `bundle exec ruby load_dependencies.rb`
|
||||||
|
Then the output should contain "Loaded all dependencies without errors"
|
|
@ -0,0 +1,21 @@
|
||||||
|
When 'I generate a new ActiveModel application' do
|
||||||
|
steps %{
|
||||||
|
When I run `mkdir #{APP_NAME}`
|
||||||
|
And I cd to "#{APP_NAME}"
|
||||||
|
And I run `bundle init`
|
||||||
|
}
|
||||||
|
|
||||||
|
# Figure out the ActiveModel version to use by reusing the Rails version from
|
||||||
|
# the Appraise gemfile.
|
||||||
|
if match = File.read(ENV['BUNDLE_GEMFILE']).match(/^gem "rails", "(.*)"/)
|
||||||
|
append_to_gemfile %(gem 'activemodel', '#{ match[1] }')
|
||||||
|
else
|
||||||
|
puts "Couldn't determine which ActiveModel version to load; using latest"
|
||||||
|
append_to_gemfile %(gem 'activemodel')
|
||||||
|
end
|
||||||
|
|
||||||
|
steps %{
|
||||||
|
And I set the "BUNDLE_GEMFILE" environment variable to "Gemfile"
|
||||||
|
And I install gems
|
||||||
|
}
|
||||||
|
end
|
|
@ -21,12 +21,14 @@ end
|
||||||
|
|
||||||
if defined?(ActiveSupport::TestCase)
|
if defined?(ActiveSupport::TestCase)
|
||||||
ActiveSupport::TestCase.class_eval do
|
ActiveSupport::TestCase.class_eval do
|
||||||
include Shoulda::Matchers::ActiveRecord
|
if defined?(Shoulda::Matchers::ActiveRecord)
|
||||||
extend Shoulda::Matchers::ActiveRecord
|
include Shoulda::Matchers::ActiveRecord
|
||||||
end
|
extend Shoulda::Matchers::ActiveRecord
|
||||||
|
end
|
||||||
|
|
||||||
ActiveSupport::TestCase.class_eval do
|
if defined?(Shoulda::Matchers::ActiveModel)
|
||||||
include Shoulda::Matchers::ActiveModel
|
include Shoulda::Matchers::ActiveModel
|
||||||
extend Shoulda::Matchers::ActiveModel
|
extend Shoulda::Matchers::ActiveModel
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue