shoulda-matchers 5.3.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +39 -15
  4. data/lib/shoulda/matchers/action_controller/permit_matcher.rb +7 -9
  5. data/lib/shoulda/matchers/action_controller/set_session_or_flash_matcher.rb +13 -15
  6. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +46 -1
  7. data/lib/shoulda/matchers/active_model/comparison_matcher.rb +157 -0
  8. data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +7 -0
  9. data/lib/shoulda/matchers/active_model/numericality_matchers/range_matcher.rb +1 -1
  10. data/lib/shoulda/matchers/active_model/numericality_matchers/submatchers.rb +16 -6
  11. data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +0 -6
  12. data/lib/shoulda/matchers/active_model/validate_comparison_of_matcher.rb +532 -0
  13. data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +3 -3
  14. data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +24 -11
  15. data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +64 -9
  16. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +40 -96
  17. data/lib/shoulda/matchers/active_model/validation_matcher/build_description.rb +6 -7
  18. data/lib/shoulda/matchers/active_model/validation_matcher.rb +6 -0
  19. data/lib/shoulda/matchers/active_model/validator.rb +4 -0
  20. data/lib/shoulda/matchers/active_model.rb +2 -1
  21. data/lib/shoulda/matchers/active_record/association_matcher.rb +543 -15
  22. data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +9 -1
  23. data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +1 -0
  24. data/lib/shoulda/matchers/active_record/association_matchers/option_verifier.rb +4 -0
  25. data/lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb +23 -19
  26. data/lib/shoulda/matchers/active_record/association_matchers/required_matcher.rb +27 -23
  27. data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +0 -8
  28. data/lib/shoulda/matchers/active_record/encrypt_matcher.rb +174 -0
  29. data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +46 -6
  30. data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +24 -13
  31. data/lib/shoulda/matchers/active_record/have_implicit_order_column.rb +3 -5
  32. data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +1 -1
  33. data/lib/shoulda/matchers/active_record/normalize_matcher.rb +151 -0
  34. data/lib/shoulda/matchers/active_record/uniqueness/model.rb +1 -1
  35. data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +82 -70
  36. data/lib/shoulda/matchers/active_record.rb +2 -0
  37. data/lib/shoulda/matchers/doublespeak/double_collection.rb +2 -6
  38. data/lib/shoulda/matchers/doublespeak/world.rb +2 -6
  39. data/lib/shoulda/matchers/independent/delegate_method_matcher.rb +13 -15
  40. data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +7 -5
  41. data/lib/shoulda/matchers/integrations/libraries/routing.rb +5 -3
  42. data/lib/shoulda/matchers/rails_shim.rb +8 -6
  43. data/lib/shoulda/matchers/util/word_wrap.rb +1 -1
  44. data/lib/shoulda/matchers/util.rb +18 -20
  45. data/lib/shoulda/matchers/version.rb +1 -1
  46. data/lib/shoulda/matchers.rb +2 -2
  47. data/shoulda-matchers.gemspec +1 -1
  48. metadata +11 -8
  49. data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +0 -136
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoulda-matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 6.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tammer Saleh
@@ -11,10 +11,10 @@ authors:
11
11
  - Matt Jankowski
12
12
  - Stafford Brunk
13
13
  - Elliot Winkler
14
- autorequire:
14
+ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2022-12-16 00:00:00.000000000 Z
17
+ date: 2024-03-15 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activesupport
@@ -69,12 +69,12 @@ files:
69
69
  - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters_and_validators.rb
70
70
  - lib/shoulda/matchers/active_model/allow_value_matcher/successful_check.rb
71
71
  - lib/shoulda/matchers/active_model/allow_value_matcher/successful_setting.rb
72
+ - lib/shoulda/matchers/active_model/comparison_matcher.rb
72
73
  - lib/shoulda/matchers/active_model/disallow_value_matcher.rb
73
74
  - lib/shoulda/matchers/active_model/errors.rb
74
75
  - lib/shoulda/matchers/active_model/have_secure_password_matcher.rb
75
76
  - lib/shoulda/matchers/active_model/helpers.rb
76
77
  - lib/shoulda/matchers/active_model/numericality_matchers.rb
77
- - lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb
78
78
  - lib/shoulda/matchers/active_model/numericality_matchers/even_number_matcher.rb
79
79
  - lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb
80
80
  - lib/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher.rb
@@ -88,6 +88,7 @@ files:
88
88
  - lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb
89
89
  - lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb
90
90
  - lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb
91
+ - lib/shoulda/matchers/active_model/validate_comparison_of_matcher.rb
91
92
  - lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb
92
93
  - lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb
93
94
  - lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb
@@ -115,6 +116,7 @@ files:
115
116
  - lib/shoulda/matchers/active_record/association_matchers/source_matcher.rb
116
117
  - lib/shoulda/matchers/active_record/association_matchers/through_matcher.rb
117
118
  - lib/shoulda/matchers/active_record/define_enum_for_matcher.rb
119
+ - lib/shoulda/matchers/active_record/encrypt_matcher.rb
118
120
  - lib/shoulda/matchers/active_record/have_attached_matcher.rb
119
121
  - lib/shoulda/matchers/active_record/have_db_column_matcher.rb
120
122
  - lib/shoulda/matchers/active_record/have_db_index_matcher.rb
@@ -122,6 +124,7 @@ files:
122
124
  - lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb
123
125
  - lib/shoulda/matchers/active_record/have_rich_text_matcher.rb
124
126
  - lib/shoulda/matchers/active_record/have_secure_token_matcher.rb
127
+ - lib/shoulda/matchers/active_record/normalize_matcher.rb
125
128
  - lib/shoulda/matchers/active_record/serialize_matcher.rb
126
129
  - lib/shoulda/matchers/active_record/uniqueness.rb
127
130
  - lib/shoulda/matchers/active_record/uniqueness/model.rb
@@ -180,7 +183,7 @@ metadata:
180
183
  documentation_uri: https://matchers.shoulda.io/docs
181
184
  homepage_uri: https://matchers.shoulda.io
182
185
  source_code_uri: https://github.com/thoughtbot/shoulda-matchers
183
- post_install_message:
186
+ post_install_message:
184
187
  rdoc_options: []
185
188
  require_paths:
186
189
  - lib
@@ -188,15 +191,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
191
  requirements:
189
192
  - - ">="
190
193
  - !ruby/object:Gem::Version
191
- version: 2.6.0
194
+ version: 3.0.5
192
195
  required_rubygems_version: !ruby/object:Gem::Requirement
193
196
  requirements:
194
197
  - - ">="
195
198
  - !ruby/object:Gem::Version
196
199
  version: '0'
197
200
  requirements: []
198
- rubygems_version: 3.3.7
199
- signing_key:
201
+ rubygems_version: 3.5.6
202
+ signing_key:
200
203
  specification_version: 4
201
204
  summary: Simple one-liner tests for common Rails functionality
202
205
  test_files: []
@@ -1,136 +0,0 @@
1
- require 'active_support/core_ext/module/delegation'
2
-
3
- module Shoulda
4
- module Matchers
5
- module ActiveModel
6
- module NumericalityMatchers
7
- # @private
8
- class ComparisonMatcher < ValidationMatcher
9
- ERROR_MESSAGES = {
10
- :> => {
11
- label: :greater_than,
12
- assertions: [false, false, true],
13
- },
14
- :>= => {
15
- label: :greater_than_or_equal_to,
16
- assertions: [false, true, true],
17
- },
18
- :< => {
19
- label: :less_than,
20
- assertions: [true, false, false],
21
- },
22
- :<= => {
23
- label: :less_than_or_equal_to,
24
- assertions: [true, true, false],
25
- },
26
- :== => {
27
- label: :equal_to,
28
- assertions: [false, true, false],
29
- },
30
- :!= => {
31
- label: :other_than,
32
- assertions: [true, false, true],
33
- },
34
- }.freeze
35
-
36
- delegate :failure_message, :failure_message_when_negated, to: :submatchers
37
-
38
- def initialize(numericality_matcher, value, operator)
39
- super(nil)
40
- unless numericality_matcher.respond_to? :diff_to_compare
41
- raise ArgumentError, 'numericality_matcher is invalid'
42
- end
43
-
44
- @numericality_matcher = numericality_matcher
45
- @value = value
46
- @operator = operator
47
- @message = ERROR_MESSAGES[operator][:label]
48
- end
49
-
50
- def simple_description
51
- description = ''
52
-
53
- if expects_strict?
54
- description << ' strictly'
55
- end
56
-
57
- description +
58
- "disallow :#{attribute} from being a number that is not " +
59
- "#{comparison_expectation} #{@value}"
60
- end
61
-
62
- def for(attribute)
63
- @attribute = attribute
64
- self
65
- end
66
-
67
- def with_message(message)
68
- @expects_custom_validation_message = true
69
- @message = message
70
- self
71
- end
72
-
73
- def expects_custom_validation_message?
74
- @expects_custom_validation_message
75
- end
76
-
77
- def matches?(subject)
78
- @subject = subject
79
- submatchers.matches?(subject)
80
- end
81
-
82
- def comparison_description
83
- "#{comparison_expectation} #{@value}"
84
- end
85
-
86
- def submatchers
87
- @_submatchers ||= NumericalityMatchers::Submatchers.new(build_submatchers)
88
- end
89
-
90
- private
91
-
92
- def build_submatchers
93
- comparison_combos.map do |diff, submatcher_method_name|
94
- matcher = __send__(submatcher_method_name, diff, nil)
95
- matcher.with_message(@message, values: { count: @value })
96
- matcher
97
- end
98
- end
99
-
100
- def comparison_combos
101
- diffs_to_compare.zip(submatcher_method_names)
102
- end
103
-
104
- def submatcher_method_names
105
- assertions.map do |value|
106
- if value
107
- :allow_value_matcher
108
- else
109
- :disallow_value_matcher
110
- end
111
- end
112
- end
113
-
114
- def assertions
115
- ERROR_MESSAGES[@operator][:assertions]
116
- end
117
-
118
- def diffs_to_compare
119
- diff_to_compare = @numericality_matcher.diff_to_compare
120
- values = [-1, 0, 1].map { |sign| @value + (diff_to_compare * sign) }
121
-
122
- if @numericality_matcher.given_numeric_column?
123
- values
124
- else
125
- values.map(&:to_s)
126
- end
127
- end
128
-
129
- def comparison_expectation
130
- ERROR_MESSAGES[@operator][:label].to_s.tr('_', ' ')
131
- end
132
- end
133
- end
134
- end
135
- end
136
- end