shoulda-matchers 4.5.1 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +15 -13
  4. data/lib/shoulda/matchers/action_controller/callback_matcher.rb +0 -87
  5. data/lib/shoulda/matchers/action_controller/flash_store.rb +2 -4
  6. data/lib/shoulda/matchers/action_controller/permit_matcher.rb +3 -6
  7. data/lib/shoulda/matchers/active_model/helpers.rb +1 -1
  8. data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +13 -34
  9. data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +3 -5
  10. data/lib/shoulda/matchers/active_model/numericality_matchers/range_matcher.rb +71 -0
  11. data/lib/shoulda/matchers/active_model/numericality_matchers/submatchers.rb +43 -0
  12. data/lib/shoulda/matchers/active_model/qualifiers/allow_blank.rb +26 -0
  13. data/lib/shoulda/matchers/active_model/qualifiers.rb +1 -0
  14. data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +14 -2
  15. data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +2 -2
  16. data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +6 -4
  17. data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +1 -1
  18. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +47 -1
  19. data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +31 -6
  20. data/lib/shoulda/matchers/active_model/validator.rb +1 -6
  21. data/lib/shoulda/matchers/active_model.rb +2 -1
  22. data/lib/shoulda/matchers/active_record/association_matcher.rb +20 -22
  23. data/lib/shoulda/matchers/active_record/association_matchers/join_table_matcher.rb +1 -1
  24. data/lib/shoulda/matchers/active_record/association_matchers/required_matcher.rb +1 -1
  25. data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +125 -22
  26. data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +21 -3
  27. data/lib/shoulda/matchers/rails_shim.rb +14 -39
  28. data/lib/shoulda/matchers/util/word_wrap.rb +2 -2
  29. data/lib/shoulda/matchers/version.rb +1 -1
  30. data/shoulda-matchers.gemspec +3 -3
  31. metadata +10 -8
  32. data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +0 -161
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: 4.5.1
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tammer Saleh
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2021-01-22 00:00:00.000000000 Z
17
+ date: 2022-12-16 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activesupport
@@ -22,14 +22,14 @@ dependencies:
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 4.2.0
25
+ version: 5.2.0
26
26
  type: :runtime
27
27
  prerelease: false
28
28
  version_requirements: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 4.2.0
32
+ version: 5.2.0
33
33
  description: 'Shoulda Matchers provides RSpec- and Minitest-compatible one-liners
34
34
  to test common Rails functionality that, if written by hand, would be much longer,
35
35
  more complex, and error-prone. '
@@ -60,7 +60,6 @@ files:
60
60
  - lib/shoulda/matchers/action_controller/set_session_matcher.rb
61
61
  - lib/shoulda/matchers/action_controller/set_session_or_flash_matcher.rb
62
62
  - lib/shoulda/matchers/active_model.rb
63
- - lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb
64
63
  - lib/shoulda/matchers/active_model/allow_value_matcher.rb
65
64
  - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_changed_value_error.rb
66
65
  - lib/shoulda/matchers/active_model/allow_value_matcher/attribute_does_not_exist_error.rb
@@ -80,7 +79,10 @@ files:
80
79
  - lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb
81
80
  - lib/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher.rb
82
81
  - lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb
82
+ - lib/shoulda/matchers/active_model/numericality_matchers/range_matcher.rb
83
+ - lib/shoulda/matchers/active_model/numericality_matchers/submatchers.rb
83
84
  - lib/shoulda/matchers/active_model/qualifiers.rb
85
+ - lib/shoulda/matchers/active_model/qualifiers/allow_blank.rb
84
86
  - lib/shoulda/matchers/active_model/qualifiers/allow_nil.rb
85
87
  - lib/shoulda/matchers/active_model/qualifiers/ignore_interference_by_writer.rb
86
88
  - lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb
@@ -174,7 +176,7 @@ licenses:
174
176
  - MIT
175
177
  metadata:
176
178
  bug_tracker_uri: https://github.com/thoughtbot/shoulda-matchers/issues
177
- changelog_uri: https://github.com/thoughtbot/shoulda-matchers/blob/master/CHANGELOG.md
179
+ changelog_uri: https://github.com/thoughtbot/shoulda-matchers/blob/main/CHANGELOG.md
178
180
  documentation_uri: https://matchers.shoulda.io/docs
179
181
  homepage_uri: https://matchers.shoulda.io
180
182
  source_code_uri: https://github.com/thoughtbot/shoulda-matchers
@@ -186,14 +188,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
188
  requirements:
187
189
  - - ">="
188
190
  - !ruby/object:Gem::Version
189
- version: 2.4.0
191
+ version: 2.6.0
190
192
  required_rubygems_version: !ruby/object:Gem::Requirement
191
193
  requirements:
192
194
  - - ">="
193
195
  - !ruby/object:Gem::Version
194
196
  version: '0'
195
197
  requirements: []
196
- rubygems_version: 3.1.4
198
+ rubygems_version: 3.3.7
197
199
  signing_key:
198
200
  specification_version: 4
199
201
  summary: Simple one-liner tests for common Rails functionality
@@ -1,161 +0,0 @@
1
- module Shoulda
2
- module Matchers
3
- module ActiveModel
4
- # The `allow_mass_assignment_of` matcher tests usage of Rails 3's
5
- # `attr_accessible` and `attr_protected` macros, asserting that an
6
- # attribute in your model is contained in either the whitelist or
7
- # blacklist and thus can or cannot be set via mass assignment.
8
- #
9
- # class Post
10
- # include ActiveModel::Model
11
- # include ActiveModel::MassAssignmentSecurity
12
- # attr_accessor :title
13
- #
14
- # attr_accessible :title
15
- # end
16
- #
17
- # class User
18
- # include ActiveModel::Model
19
- # include ActiveModel::MassAssignmentSecurity
20
- # attr_accessor :encrypted_password
21
- #
22
- # attr_protected :encrypted_password
23
- # end
24
- #
25
- # # RSpec
26
- # RSpec.describe Post, type: :model do
27
- # it { should allow_mass_assignment_of(:title) }
28
- # end
29
- #
30
- # RSpec.describe User, type: :model do
31
- # it { should_not allow_mass_assignment_of(:encrypted_password) }
32
- # end
33
- #
34
- # # Minitest (Shoulda)
35
- # class PostTest < ActiveSupport::TestCase
36
- # should allow_mass_assignment_of(:title)
37
- # end
38
- #
39
- # class UserTest < ActiveSupport::TestCase
40
- # should_not allow_mass_assignment_of(:encrypted_password)
41
- # end
42
- #
43
- # #### Optional qualifiers
44
- #
45
- # ##### as
46
- #
47
- # Use `as` if your mass-assignment rules apply only under a certain role
48
- # *(Rails >= 3.1 only)*.
49
- #
50
- # class Post
51
- # include ActiveModel::Model
52
- # include ActiveModel::MassAssignmentSecurity
53
- # attr_accessor :title
54
- #
55
- # attr_accessible :title, as: :admin
56
- # end
57
- #
58
- # # RSpec
59
- # RSpec.describe Post, type: :model do
60
- # it { should allow_mass_assignment_of(:title).as(:admin) }
61
- # end
62
- #
63
- # # Minitest (Shoulda)
64
- # class PostTest < ActiveSupport::TestCase
65
- # should allow_mass_assignment_of(:title).as(:admin)
66
- # end
67
- #
68
- # @return [AllowMassAssignmentOfMatcher]
69
- #
70
- def allow_mass_assignment_of(value)
71
- AllowMassAssignmentOfMatcher.new(value)
72
- end
73
-
74
- # @private
75
- class AllowMassAssignmentOfMatcher
76
- attr_reader :failure_message, :failure_message_when_negated
77
-
78
- def initialize(attribute)
79
- @attribute = attribute.to_s
80
- @options = {}
81
- end
82
-
83
- def as(role)
84
- @options[:role] = role
85
- self
86
- end
87
-
88
- def matches?(subject)
89
- @subject = subject
90
- if attr_mass_assignable?
91
- if whitelisting?
92
- @failure_message_when_negated = "#{@attribute} was made "\
93
- 'accessible'
94
- elsif protected_attributes.empty?
95
- @failure_message_when_negated = 'no attributes were protected'
96
- else
97
- @failure_message_when_negated =
98
- "#{class_name} is protecting " <<
99
- "#{protected_attributes.to_a.to_sentence}, " <<
100
- "but not #{@attribute}."
101
- end
102
- true
103
- else
104
- @failure_message =
105
- if whitelisting?
106
- "Expected #{@attribute} to be accessible"
107
- else
108
- "Did not expect #{@attribute} to be protected"
109
- end
110
- false
111
- end
112
- end
113
-
114
- def description
115
- [base_description, role_description].compact.join(' ')
116
- end
117
-
118
- private
119
-
120
- def base_description
121
- "allow mass assignment of #{@attribute}"
122
- end
123
-
124
- def role_description
125
- if role != :default
126
- "as #{role}"
127
- end
128
- end
129
-
130
- def role
131
- @options[:role] || :default
132
- end
133
-
134
- def protected_attributes
135
- @_protected_attributes ||= (@subject.class.protected_attributes || [])
136
- end
137
-
138
- def accessible_attributes
139
- @_accessible_attributes ||=
140
- (@subject.class.accessible_attributes || [])
141
- end
142
-
143
- def whitelisting?
144
- authorizer.is_a?(::ActiveModel::MassAssignmentSecurity::WhiteList)
145
- end
146
-
147
- def attr_mass_assignable?
148
- !authorizer.deny?(@attribute)
149
- end
150
-
151
- def authorizer
152
- @subject.class.active_authorizer[role]
153
- end
154
-
155
- def class_name
156
- @subject.class.name
157
- end
158
- end
159
- end
160
- end
161
- end