Changelog History
Page 2
-
v4.1.2 Changes
August 01, 2019๐ Bug fixes
- Fix another regression with
validate_presence_of
so that it works against an attribute that has been decorated withserialize
using a custom serializer class. (#1236)
- Fix another regression with
-
v4.1.1 Changes
July 16, 2019๐ Bug fixes
- Patch some backward-incompatible changes to
validate_presence_of
that were made in the last version. As of 4.1.0 the presence matcher now checks to ensure that empty string will cause the record to be invalid (in addition to nil, which it was already checking against). However, this check was being performed even if the attribute or column the presence matcher is being run against didn't support being set to an empty string. This releases fixes this. (#1222, #1224, #1231)
- Patch some backward-incompatible changes to
-
v4.1.0 Changes
July 16, 2019๐ Bug fixes
Fix
validate_uniqueness_of
so that it works when a scope is defined as a string instead of a symbol on the model. (#1176)Fix
have_db_index
so that it can be used against multiple models that are connected to different databases. (#1200)
๐ Features
โ Add support for Rails 6. No new Rails 6 features are supported, but only existing features that broke with the upgrade. (#1193)
โ Add support for expression indexes (Rails 5, Postgres only) to
have_db_index
. (#1211)Add
allow_nil
to thevalidate_presence_of
matcher. (834d8d0, #1100)
๐ Improvements
Update
validate_presence_of
so that if it is being used against an association which isrequired: true
oroptional: false
, or it is not configured as such but ActiveRecord defaultsbelong_to
associations tooptional: false
, and the matcher fails, the developer is reminded in the failure message that thebelong_to
matcher can be used instead. (#1214, 8697b01)Update
define_enum_for
so that it produces a more helpful message on failure. (#1216)
-
v4.0.1 Changes
February 26, 2019๐ Bug fixes
- ๐ Fix gemspec so that
setup
script isn't installed globally when gem is installed. (#1180)
- ๐ Fix gemspec so that
-
v4.0.0 Changes
February 22, 2019๐ This release mainly brings the gem up to date with modern versions of Ruby and ๐ Rails and drops support for older, unsupported versions. The compatibility list is now:
- ๐ Ruby: 2.6.0, 2.5.1, 2.4.4, 2.3.7
- ๐ Rails: 5.2.2, 5.1.6.1, 5.0.7, 4.2.10
Backward-incompatible changes
โฌ๏ธ Drop support for Rails 4.0 and 4.1 as well as Ruby 2.0, 2.1, and 2.2, since they've been end-of-lifed. The gem now supports Ruby 2.3+ and Rails 4.2+.
use_before_filter
,use_after_filter
, anduse_around_filter
are no longer usable when using shoulda-matchers under Rails 5.x, as the corresponding controller callbacks don't exist there. (#1054)
๐ Deprecations
define_enum_for
:with
is deprecated in favor ofwith_values
. This is to prevent confusion withwith_prefix
andwith_suffix
, which are new. (#1077)
๐ Bug fixes
๐ Fix association matchers when used under Rails 5.x so that they make use of
ActiveRecord::Base.connection.data_sources
instead ofActiveRecord::Base.connection.tables
, which was deprecated. (#933, #943, 61c3654)๐ Fix the
serialize
matcher so that it works with Rails 5.x. (#913, #965, df04f87)๐ Fix our custom mocking library Doublespeak, which is used by
delegate_method
, so that it does not produce a warning under Ruby 2.4. ([#1006], #1038, 8d7dcb8)๐ Fix the
permit
matcher so that it uses the correct method signature to call the controller action with params in order to prevent a warning under Rails 5.x. (#867, #917, #964, #989, ce9624b)Fix the
define_enum_for
matcher so that it once more allows string columns to be used as enum attributes. (#912, #1063, 5650aae)Fix
validate_uniqueness_of
when used under Rails 4.2 so that when the attribute you're testing is a boolean column, it will no longer emit a warning. (#949, #1073)Fix
validate_inclusion_of
so that if it fails, it will no longer blow up with the error "undefined method `attribute_setter' for nil:NilClass". (#904)โ Add negative versions of all validation matchers (i.e. implement
does_not_match?
for them) to prevent them from blowing up with "undefined method `attribute_setter' for nil:NilClass". (#904)
๐ Features
Add
required
andoptional
qualifiers tobelong_to
andhave_one
matchers. (When using thebelong_to
matcher under Rails 5+,required
is assumed unless overridden.) (#861, #870, #956, 3af3d9f)Add
without_validating_presence
qualifier tobelong_to
to get around the fact thatrequired
is assumed, above. (#1153, #1154)Add
allow_nil
qualifier tovalidate_length_of
. (#724)โ Add a
port
option to theroute
matcher to allow testing a route that has a constraint on it such that only a specific port may be used to access that route. (#954, #1074, #1075)Add
with_prefix
andwith_suffix
todefine_enum_for
to allow testing theenum
macro with correspondingprefix
andsuffix
options (Rails 5 only). (#961, #1077)Add
index_errors
option tohas_many
(Rails 5 only). (#1089, 795ca68)
๐ Improvements
-
v4.0.0.rc1 Changes
October 02, 2018โ Adds support for Ruby 2.4 and 2.5 and Rails 5.x.
โฌ๏ธ Drops support for Ruby 2.0 and 2.1 as well as Rails 4.0 and 4.1. -
v3.1.3 Changes
January 29, 2019๐ Improvements
- โก๏ธ Update
BigDecimal.new()
to useBigDecimal()
and avoid deprecation warnings in Ruby 2.6.
- โก๏ธ Update
-
v3.1.2 Changes
July 12, 2017๐ Deprecations
- This is the last version that supports Rails 4.0 and 4.1 and Ruby 2.0 and 2.1.
๐ Bug fixes
- When the
permit
matcher was used without#on
, the controller did not useparams#require
, the params object was duplicated, and the matcher did not recognize the#permit
call inside the controller. This behavior happened because the matcher overwrote double registries with the same parameter hash whenever ActionController::Parameters was instantiated. (#899, #902, 44c019)
-
v3.1.1 Changes
January 28, 2016๐ Bug fixes
๐ Some matchers make use of ActiveSupport's
in?
method, but do not include the file where this is defined in ActiveSupport. This causes problems with projects using shoulda-matchers that do not include all of ActiveSupport by default. To fix this, replacein?
with Ruby's builtininclude?
. (#879)validate_uniqueness_of
works by creating a record if it doesn't exist, and then testing against a new record with various attributes set that are equal to (or different than) corresponding attributes in the existing record. In 3.1.0 a change was made whereby when the uniqueness matcher is given a new record and creates an existing record out of it, it ensures that the record is valid before continuing on. This created a problem because if the subject, before it was saved, was empty and therefore in an invalid state, it could not effectively be saved. While ideally this should be enforced, doing so would be a backward-incompatible change, so this behavior has been rolled back. (#880, #884, #885, 45de869)Fix an issue with
validate_uniqueness_of
+scoped_to
when used against a model where the attribute has multiple uniqueness validations and each validation has a different set of scopes. In this case, a test written for the first validation (and its scopes) would pass, but tests for the other validations (and their scopes) would not, as the matcher only considered the first set of scopes as the actual set of scopes. (#830, 28bd9a1)
๐ Improvements
- Update
validate_uniqueness_of
so that if an existing record fails to be created because a column is non-nullable and was not filled in, raise an ExistingRecordInvalid exception with details on how to fix the test. (78ccfc5)
-
v3.1.0 Changes
January 11, 2016๐ Bug fixes
Update
validate_numericality_of
so that submatchers are applied lazily instead of immediately. Previously, qualifiers were order-dependent, meaning that if you usedstrict
before you used, say,odd
, thenstrict
wouldn't actually apply toodd
. Now the order that you specify qualifiers doesn't matter. (6c67a5e)๐ Fix
allow_value
so that it does not raise an AttributeChangedValueError (formerly CouldNotSetAttributeError) when used against an attribute that is an enum in an ActiveRecord model. (9e8603e)Add a
ignoring_interference_by_writer
qualifier to all matchers, not justallow_value
. This is enabled by default, which means that you should never get a CouldNotSetAttributeError again. (You may get some more information if a test fails, however.) (#786, #799, #801, #804, #817, #841, #849, #872, #873, #874, 1189934, 5532f43)Fix
validate_numericality_of
so that it does not blow up when used against a virtual attribute defined in an ActiveRecord model (that is, an attribute that is not present in the database but is defined usingattr_accessor
). (#822)Update
validate_numericality_of
so that it no longer raises an IneffectiveTestError if used against a numeric column. (#832, 5ed0362)
๐ Features
- Add a new qualifier,
ignoring_case_sensitivity
, tovalidate_uniqueness_of
. This provides a way to test uniqueness of an attribute whose case is normalized, either in a custom writer method for that attribute, or in a custombefore_validation
callback. (#836, #840)
๐ Improvements
๐ Improve failure messages and descriptions of all matchers across the board so that it is easier to understand what the matcher was doing when it failed. (You'll see a huge difference in the output of the numericality and uniqueness matchers in particular.)
Matchers now raise an error if any attributes that the matcher is attempting to set do not exist on the model. (2962112)
Update
validate_numericality_of
so that it doesn't always run all of the submatchers, but stops on the first one that fails. Since failure messages now contain information as to what value the matcher set on the attribute when it failed, this change guarantees that the correct value will be shown. (8e24a6e)Continue to detect if attributes change incoming values, but now instead of immediately seeing a CouldNotSetAttributeError, you will only be informed about it if the test you've written fails. (1189934)
Add an additional check to
define_enum_for
to ensure that the column that underlies the enum attribute you're testing is an integer column. (68dd70a)Add a test for
validate_numericality_of
so that it officially supports money columns. (#841, a559713)