you_shall_not_pass 0.3.1 → 0.4.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: 0ebad4de4047910ba8bc2684832012f9669ad584
4
- data.tar.gz: 644514d9430543ac82fc12156b1c788e7742b806
3
+ metadata.gz: 7e812f579e8e53dd88d7baf6709a796ca5fb5789
4
+ data.tar.gz: 1afa8fbd75a3860ab0c177dd7b1bcbb02d48e225
5
5
  SHA512:
6
- metadata.gz: c3f670c878377f76dd39e58971eace445b2f176ffc59160c41d526d2799e6922f95f06b2e8cf14e9e653defc1da346ec31172f41947e9bc352575d63297e9138
7
- data.tar.gz: b3a1b8c9c9a550372727581bdafe217c58be3930d2db122a1e1ad1c54267be948cd59a92f913881b2d6a7f523f6dc607077338101802f9ec4e5ea01d4abb3e8d
6
+ metadata.gz: c57d8fdbc4e21e840b1254c982e281d6eca84cb697a7357002b5048acfce92a99beb13df5ef9ee63b7859db037e01f02d6b4a018a6f6153e9ab24abdc7fff05f
7
+ data.tar.gz: bf93d4ac763e4d5437a51c70966a5ff78bfb95f4b172d25d99978ef04fc76a934682e5cff24cdf5cd4d900ac0692cc5b9c56ea7266a4a9ffb480d9537ccd2864
@@ -2,4 +2,5 @@ rvm:
2
2
  - 2.0.0
3
3
  - 2.1.1
4
4
  - 2.2.0
5
+ - 2.3.0
5
6
  - ruby-head
@@ -13,8 +13,6 @@ module YouShallNotPass
13
13
  Array(policies.fetch(permission)).all? do |policy|
14
14
  Callable(policy).call(**args) == true
15
15
  end
16
- rescue KeyError => exception
17
- break_down_can(permission, exception, **args)
18
16
  end
19
17
 
20
18
  def can_all?(*permissions, **args)
@@ -25,20 +23,6 @@ module YouShallNotPass
25
23
  permissions.any? { |permission| can?(permission, **args)}
26
24
  end
27
25
 
28
- def break_down_can(permission, exception, **args)
29
- case permission
30
- when /_and_/
31
- permission.to_s.split("_and_").all? { |policy| can?(policy.to_sym, **args)}
32
- when /_or_/
33
- permission.to_s.split("_or_").any? { |policy| can?(policy.to_sym, **args)}
34
- when /\Anot_/
35
- policy = permission.to_s.gsub(/\Anot_/, "")
36
- ! can?(policy.to_sym, **args)
37
- else
38
- raise exception
39
- end
40
- end
41
-
42
26
  def perform_if(permission, **args)
43
27
  yield if can?(permission, **args)
44
28
  end
@@ -68,31 +52,32 @@ module YouShallNotPass
68
52
  end
69
53
 
70
54
  private
55
+ def self.policy(name, &block)
56
+ __dsl_policies__[name] = proc { block }
57
+ end
71
58
 
72
- def __set_policies__
73
- the_policies = methods.grep(/_policies\z/).map {|name| send(name)}.each_with_object({}) do |curr, res|
74
- res.merge!(curr)
75
- end
76
-
77
- the_policies.merge!( self.class.__dsl_policies__.each_with_object({}) { |policy, h|
78
- block = policy.last
79
- h[policy.first] = instance_eval(&block)
80
- })
59
+ def self.attribute(attr)
60
+ fattr attr
61
+ end
62
+ private_class_method :attribute
81
63
 
82
- the_policies
64
+ def __set_policies__
65
+ __method_policies__.merge!(__dsl_policies__)
83
66
  end
84
67
 
85
- def self.__dsl_policies__
86
- @__dsl_policies__ ||= {}
68
+ def __method_policies__
69
+ methods.grep(/_policies\z/).
70
+ each_with_object({}) { |name, res| res.merge!(send(name)) }
87
71
  end
88
72
 
89
- def self.policy(name, &block)
90
- __dsl_policies__[name] = proc { block }
73
+ def __dsl_policies__
74
+ self.class.__dsl_policies__. each_with_object({}) { |(name, value), res|
75
+ res[name] = instance_eval(&value)
76
+ }
91
77
  end
92
78
 
93
- def self.attribute(attr)
94
- fattr attr
79
+ def self.__dsl_policies__
80
+ @__dsl_policies__ ||= {}
95
81
  end
96
- private_class_method :attribute
97
82
  end
98
83
  end
@@ -1,3 +1,3 @@
1
1
  module YouShallNotPass
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -90,9 +90,13 @@ scope YouShallNotPass::Authorizator do
90
90
  can_action: Action.new(true),
91
91
  cant_action: Action.new(false),
92
92
 
93
+ can_true_or_false: true || false,
94
+ cant_true_and_false: true && false,
95
+
93
96
  can_true: true,
94
97
  cant_false: false,
95
98
 
99
+
96
100
  can_array: [ true, proc { true }, true ],
97
101
  cant_array: [ true, false, true ],
98
102
  }
@@ -133,6 +137,18 @@ scope YouShallNotPass::Authorizator do
133
137
  ! authorizator.can?(:cant_false)
134
138
  end
135
139
 
140
+ spec "reject false" do
141
+ ! authorizator.can?(:cant_false)
142
+ end
143
+
144
+ spec "allow true or false" do
145
+ authorizator.can?(:can_true_or_false)
146
+ end
147
+
148
+ spec "reject true and false" do
149
+ ! authorizator.can?(:cant_true_and_false)
150
+ end
151
+
136
152
  spec "allow array" do
137
153
  authorizator.can?(:can_array)
138
154
  end
@@ -323,38 +339,6 @@ scope YouShallNotPass::Authorizator do
323
339
 
324
340
  let(:authorizator) { NumberAuthorizator.new }
325
341
 
326
- spec "allow _and_" do
327
- authorizator.can?(:one_and_two)
328
- end
329
-
330
- spec "reject _and_" do
331
- ! authorizator.can?(:one_and_three)
332
- end
333
-
334
- spec "allow _or_" do
335
- authorizator.can?(:one_or_two)
336
- end
337
-
338
- spec "reject _or_" do
339
- ! authorizator.can?(:three_or_four)
340
- end
341
-
342
- spec "allow not_" do
343
- authorizator.can?(:not_three)
344
- end
345
-
346
- spec "reject not_" do
347
- ! authorizator.can?(:not_one)
348
- end
349
-
350
- spec "allow _and_or_" do
351
- authorizator.can?(:one_and_two_or_three)
352
- end
353
-
354
- spec "reject _and_or_" do
355
- ! authorizator.can?(:one_and_three_or_four)
356
- end
357
-
358
342
  scope "regular policies vs conditional policies" do
359
343
  class ConditionalAuthorizator < YouShallNotPass::Authorizator
360
344
  def policies
@@ -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.2"
23
+ spec.add_development_dependency "matest", "~> 1.7.4"
24
24
 
25
25
  spec.add_dependency "callable", "~> 0.0.5"
26
26
  spec.add_dependency "fattr", "~> 2.2.2"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: you_shall_not_pass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Federico Iachetti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-26 00:00:00.000000000 Z
11
+ date: 2017-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.7.2
47
+ version: 1.7.4
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.2
54
+ version: 1.7.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: callable
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  version: '0'
121
121
  requirements: []
122
122
  rubyforge_project:
123
- rubygems_version: 2.4.8
123
+ rubygems_version: 2.6.10
124
124
  signing_key:
125
125
  specification_version: 4
126
126
  summary: Simple authorization library.