pundit-matchers 3.0.1 → 3.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: deb38560b2277878e0a13f7f7a6fb510e257c5f84b625a387424e08cb5e8708b
4
- data.tar.gz: '084e0cb2b93b0e27f1bb710666b3d9c1aadd9fac71ffef0ca178b025a531cafe'
3
+ metadata.gz: 379030415885d5cd2557f7540639e6c835f53cfa5a88895fd3e5f7cbbdf1b88f
4
+ data.tar.gz: 5a5e5f7586d31f4328e3e0b5bf722d3465a681ef77340a90d44b6517f04eb700
5
5
  SHA512:
6
- metadata.gz: b219dfc3fbc0a1283f0c87627b5615947f97b449ce299d65be5106e0a46b06d9a0ed40f1f86a84830cc567a74d75da9b597136f1c563cebcce3752eb2a581d45
7
- data.tar.gz: ce6b7c6a259a6a4e22f673985c3154e334f87acf2f856b9340f97dd62d5d56945cfc16191bfb503bbce24b12c002394e0994554a29376bbe82849a690926fb19
6
+ metadata.gz: 5c513efb4f063cd3bd15d43c0a68d001bb4ca4ef806861b27cc0de39f7102d6aab8be0ee2b64213b83f8991d38d9e3f62ae6f7b0c03f0ae87f2f1f71fba87b0c
7
+ data.tar.gz: a32970e872d608219955154cdd43812b36a4d0d37363e09d0e17e341f297c23afb0e947756711b1df3d1c0aad3bcc48a43935663072b87656f196bfdb049afab
@@ -8,6 +8,8 @@ module Pundit
8
8
  class AttributesMatcher < BaseMatcher
9
9
  # Error message to be raised when no attributes are specified.
10
10
  ARGUMENTS_REQUIRED_ERROR = 'At least one attribute must be specified'
11
+ # Error message to be raised when only one attribute may be specified.
12
+ ONE_ARGUMENT_REQUIRED_ERROR = 'Only one attribute may be specified'
11
13
 
12
14
  # Initializes a new instance of the AttributesMatcher class.
13
15
  #
@@ -29,6 +31,17 @@ module Pundit
29
31
  self
30
32
  end
31
33
 
34
+ # Ensures that only one attribute is specified.
35
+ #
36
+ # @raise [ArgumentError] If more than one attribute is specified.
37
+ #
38
+ # @return [AttributesMatcher] The object itself.
39
+ def ensure_single_attribute!
40
+ raise ArgumentError, ONE_ARGUMENT_REQUIRED_ERROR if expected_attributes.size > 1
41
+
42
+ self
43
+ end
44
+
32
45
  private
33
46
 
34
47
  attr_reader :expected_attributes, :options
@@ -152,15 +152,32 @@ module Pundit
152
152
  ForbidOnlyActionsMatcher.new(*actions)
153
153
  end
154
154
 
155
+ # Creates a matcher that tests if the policy permits mass assignment of an attribute.
156
+ #
157
+ # @param [String, Symbol, Hash] attribute the attribute to be tested.
158
+ # @return [PermitAttributesMatcher] the matcher object.
159
+ def permit_attribute(attribute)
160
+ PermitAttributesMatcher.new(attribute).ensure_single_attribute!
161
+ end
162
+
163
+ RSpec::Matchers.define_negated_matcher :forbid_attribute, :permit_attribute, &NEGATED_DESCRIPTION
164
+
155
165
  # Creates a matcher that tests if the policy permits mass assignment of a set of attributes.
156
166
  #
157
167
  # @param [Array<String, Symbol, Hash>] attributes the attributes to be tested.
158
168
  # @return [PermitAttributesMatcher] the matcher object.
159
- def permit_mass_assignment_of(*attributes)
169
+ def permit_attributes(*attributes)
160
170
  PermitAttributesMatcher.new(*attributes)
161
171
  end
162
172
 
163
- RSpec::Matchers.define_negated_matcher :forbid_mass_assignment_of, :permit_mass_assignment_of, &NEGATED_DESCRIPTION
173
+ RSpec::Matchers.define_negated_matcher :forbid_attributes, :permit_attributes, &NEGATED_DESCRIPTION
174
+
175
+ # @!macro [attach] RSpec::Matchers.alias_matcher
176
+ # @!method $1
177
+ #
178
+ # An alias matcher for {$2}.
179
+ RSpec::Matchers.alias_matcher :permit_mass_assignment_of, :permit_attributes
180
+ RSpec::Matchers.alias_matcher :forbid_mass_assignment_of, :forbid_attributes
164
181
  end
165
182
  end
166
183
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pundit-matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Alley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-16 00:00:00.000000000 Z
11
+ date: 2023-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-core