you_shall_not_pass 0.2.1 → 0.3.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
  SHA1:
3
- metadata.gz: ff264efe0dc106fb920967bfa713da23337f8c2b
4
- data.tar.gz: 53289da65c93a55c9e54e26eecf1073c8366f9c1
3
+ metadata.gz: e20c5005c72aeb739cd71a80056cf3dd04db7364
4
+ data.tar.gz: a2d58f582174be34a55deaf1ccce28a13d446b7b
5
5
  SHA512:
6
- metadata.gz: 88c5decdaf3f6accef1fbfab7311185cdd8f8b9b5a20228f9c80f503d580a8f1fe252faa30712723e488229ef50c1db68844c5667d9be5b4087bbb6c94b7f3cf
7
- data.tar.gz: 4cc68aad2573c7360cb30c041c277405f509cc4abde5ff7814da8dcdd52cbf6def61475baecabd5bf3a7434dfe6a14ee1efb2e7e9aaf3bc268707d6f32e2aeef
6
+ metadata.gz: 7b8a0d94504f61cb291fa8b82887d1451cbc9b70bdda75c34514ce127d430ffc9a3f7b37c29bf198d1973707b1b38ba7c47a081e1950970b70a813d691523c41
7
+ data.tar.gz: c02af7ba490bdc94d797905d58232bb8ca06a3b713ac50c9504ebf10d804a551ed1bc955e53058646378e08e8dbf848eb7003f89020e0e223db3cd966a1c85b0
@@ -17,6 +17,14 @@ module YouShallNotPass
17
17
  break_down_can(permission, exception, **args)
18
18
  end
19
19
 
20
+ def can_all?(*permissions, **args)
21
+ permissions.all? { |permission| can?(permission, **args)}
22
+ end
23
+
24
+ def can_any?(*permissions, **args)
25
+ permissions.any? { |permission| can?(permission, **args)}
26
+ end
27
+
20
28
  def break_down_can(permission, exception, **args)
21
29
  case permission
22
30
  when /_and_/
@@ -39,6 +47,22 @@ module YouShallNotPass
39
47
  yield unless can?(permission, **args)
40
48
  end
41
49
 
50
+ def perform_if_all(*permissions, **args)
51
+ yield if can_all?(*permissions, **args)
52
+ end
53
+
54
+ def perform_unless_all(*permissions, **args)
55
+ yield unless can_all?(*permissions, **args)
56
+ end
57
+
58
+ def perform_if_any(*permissions, **args)
59
+ yield if can_any?(*permissions, **args)
60
+ end
61
+
62
+ def perform_unless_any(*permissions, **args)
63
+ yield unless can_any?(*permissions, **args)
64
+ end
65
+
42
66
  def policies
43
67
  @policies ||= __set_policies__
44
68
  end
@@ -1,3 +1,3 @@
1
1
  module YouShallNotPass
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -2,6 +2,20 @@ require "spec_helper"
2
2
  require "you_shall_not_pass/authorizator"
3
3
 
4
4
  scope YouShallNotPass::Authorizator do
5
+
6
+ class BasicAuthorizator < YouShallNotPass::Authorizator
7
+ def policies
8
+ {
9
+ can: true,
10
+ can2: true,
11
+ cant: false,
12
+ cant2: false,
13
+
14
+ use_args: -> (**args) { args.all? { |k, v| k == v } }
15
+ }
16
+ end
17
+ end
18
+
5
19
  scope "#can?" do
6
20
  scope "no policies" do
7
21
  spec "no policies defined" do
@@ -13,6 +27,46 @@ scope YouShallNotPass::Authorizator do
13
27
  end
14
28
  end
15
29
 
30
+ scope "can multiple" do
31
+ let(:authorizator) { BasicAuthorizator.new }
32
+
33
+ spec "can_all? authorizes if all policies pass" do
34
+ authorizator.can_all?(:can, :can2)
35
+ end
36
+
37
+ spec "can_all? doesn't authorize unless all policies pass" do
38
+ authorizator.can_all?(:can, :cant) == false
39
+ end
40
+
41
+ spec "can_any? authorizes if any of the policies pass" do
42
+ authorizator.can_any?(:can, :cant)
43
+ end
44
+
45
+ spec "can_any? doesn't authorize if all the policies return false" do
46
+ authorizator.can_any?(:cant, :cant2) == false
47
+ end
48
+
49
+ scope "with arguments" do
50
+ let(:authorizator) { BasicAuthorizator.new }
51
+
52
+ spec do
53
+ authorizator.can_all?(:use_args, :can2, a: :a)
54
+ end
55
+
56
+ spec do
57
+ authorizator.can_all?(:use_args, :can, a: false) == false
58
+ end
59
+
60
+ spec do
61
+ authorizator.can_any?(:use_args, :can2, a: :a)
62
+ end
63
+
64
+ spec do
65
+ authorizator.can_all?(:use_args, :cant, a: false) == false
66
+ end
67
+ end
68
+ end
69
+
16
70
  scope "lambdas, procs and other callables" do
17
71
  class Action
18
72
  def initialize(val)
@@ -129,17 +183,6 @@ scope YouShallNotPass::Authorizator do
129
183
  end
130
184
 
131
185
  scope "performing" do
132
- class BasicAuthorizator < YouShallNotPass::Authorizator
133
- def policies
134
- {
135
- can: true,
136
- cant: false,
137
-
138
- use_args: -> (**args) { args.all? { |k, v| k == v } }
139
- }
140
- end
141
- end
142
-
143
186
  scope "#perform_if" do
144
187
  let(:authorizator) { BasicAuthorizator.new }
145
188
 
@@ -194,6 +237,76 @@ scope YouShallNotPass::Authorizator do
194
237
  ! defined? @i_can
195
238
  end
196
239
  end
240
+
241
+ scope "perform multiple" do
242
+ let(:authorizator) { BasicAuthorizator.new }
243
+
244
+ spec "#perform_if_all" do
245
+ authorizator.perform_if_all(:can, :can2) do
246
+ @i_can = true
247
+ end
248
+
249
+ !! defined? @i_can
250
+ end
251
+
252
+ spec "#perform_unless_all" do
253
+ authorizator.perform_unless_all(:can, :cant) do
254
+ @i_can = true
255
+ end
256
+
257
+ !! defined? @i_can
258
+ end
259
+
260
+ spec "not #perform_if_all" do
261
+ authorizator.perform_if_all(:can, :cant) do
262
+ @i_can = true
263
+ end
264
+
265
+ ! defined? @i_can
266
+ end
267
+
268
+ spec "not #perform_unless_all" do
269
+ authorizator.perform_unless_all(:can, :can2) do
270
+ @i_can = true
271
+ end
272
+
273
+ ! defined? @i_can
274
+ end
275
+
276
+ spec "#perform_if_any" do
277
+ authorizator.perform_if_any(:can, :can2) do
278
+ @i_can = true
279
+ end
280
+
281
+ !! defined? @i_can
282
+ end
283
+
284
+ spec "#perform_unless_any" do
285
+ authorizator.perform_unless_any(:cant, :cant2) do
286
+ @i_can = true
287
+ end
288
+
289
+ !! defined? @i_can
290
+ end
291
+
292
+ spec "not #perform_if_any" do
293
+ authorizator.perform_if_any(:cant, :cant2) do
294
+ @i_can = true
295
+ end
296
+
297
+ ! defined? @i_can
298
+ end
299
+
300
+ spec "not #perform_unless_any" do
301
+ authorizator.perform_unless_any(:can, :can2) do
302
+ @i_can = true
303
+ end
304
+
305
+ ! defined? @i_can
306
+ end
307
+
308
+
309
+ end
197
310
  end
198
311
 
199
312
  scope "conditional policies" do
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "matest", "~> 1.7.1"
23
+ spec.add_development_dependency "matest", "~> 1.7.2"
24
24
 
25
25
  spec.add_dependency "callable", "~> 0.0.5"
26
26
  spec.add_dependency "fattr", "~> 2.2.2"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: you_shall_not_pass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Federico Iachetti
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.7.1
47
+ version: 1.7.2
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.7.1
54
+ version: 1.7.2
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: callable
57
57
  requirement: !ruby/object:Gem::Requirement