pundit-matchers 3.0.1 → 3.1.0

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