shoulda-matchers 5.3.0 → 6.2.0

Sign up to get free protection for your applications and to get access to all the features.
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