passpartu 1.0.2 → 1.0.3
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 +4 -4
- data/README.md +6 -1
- data/lib/passpartu/patcher.rb +3 -2
- data/lib/passpartu/validate_result.rb +2 -1
- data/lib/passpartu/verify.rb +2 -1
- data/lib/passpartu/version.rb +1 -1
- data/lib/passpartu.rb +28 -25
- data/passpartu.gemspec +6 -3
- metadata +54 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ff6ec8f5f35ec4a606df7c651868203f755d0d6f5b6152d23a152fa91d45126
|
4
|
+
data.tar.gz: 4ed57d9ced50f0c8ab11725835be3cc2ecb37a9309433146429312d22417dd13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c55101f249104c06a591cffa4df5126e3bf01a0f81a1bcd96d766b91d657f7997cfaebc81ae22e4da56265951ec47b751565c97a220ec17042945b9ba3e0fbb7
|
7
|
+
data.tar.gz: 5618f1ecf4e1b8ad3b27f802cefd2213e65ee08125e840aa32aab603b1ca85868fc4d79464bcacf4d9be75103174cff9474c05ef8d6d3058d0fd56381cc86f69
|
data/README.md
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
# Passpartu v1.0.
|
1
|
+
# Passpartu v1.0.3 - [changelog](https://github.com/coaxsoft/passpartu/blob/master/CHANGELOG.md)
|
2
2
|
|
3
3
|
Passpartu makes policies great again (works awesome with [Pundit](https://rubygems.org/gems/pundit)).
|
4
4
|
|
5
|
+
### Tested with ruby:
|
6
|
+
- 2.7.3
|
7
|
+
- 3.0.0
|
8
|
+
- 3.1.1
|
9
|
+
|
5
10
|
Instead of this:
|
6
11
|
|
7
12
|
```ruby
|
data/lib/passpartu/patcher.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
module Passpartu
|
4
4
|
class Patcher
|
5
5
|
attr_reader :klass
|
6
|
+
|
6
7
|
def initialize(klass)
|
7
8
|
raise PolicyYmlNotFoundError if Passpartu.policy.nil?
|
8
9
|
|
@@ -15,11 +16,11 @@ module Passpartu
|
|
15
16
|
|
16
17
|
def call
|
17
18
|
klass.class_eval do
|
18
|
-
define_method(
|
19
|
+
define_method(:can?) do |*keys, only: nil, except: nil, skip: nil, &block|
|
19
20
|
Passpartu::BlockVerify.call(role, keys, only: only, except: except, skip: skip, &block)
|
20
21
|
end
|
21
22
|
|
22
|
-
Passpartu.policy.
|
23
|
+
Passpartu.policy.each_key do |policy_role|
|
23
24
|
define_method("#{policy_role}_can?") do |*keys, only: nil, except: nil, skip: nil, &block|
|
24
25
|
role.to_s == policy_role && Passpartu::BlockVerify.call(role, keys,
|
25
26
|
only: only,
|
@@ -5,6 +5,7 @@ module Passpartu
|
|
5
5
|
class PolicyMissedError < StandardError; end
|
6
6
|
|
7
7
|
attr_reader :result
|
8
|
+
|
8
9
|
def initialize(result)
|
9
10
|
@result = result
|
10
11
|
end
|
@@ -23,7 +24,7 @@ module Passpartu
|
|
23
24
|
private
|
24
25
|
|
25
26
|
def boolean?
|
26
|
-
[
|
27
|
+
[true, false].include?(result)
|
27
28
|
end
|
28
29
|
|
29
30
|
def raise_error?
|
data/lib/passpartu/verify.rb
CHANGED
@@ -31,7 +31,8 @@ module Passpartu
|
|
31
31
|
validate_result
|
32
32
|
rescue StandardError => e
|
33
33
|
if ['TrueClass does not have #dig method', 'FalseClass does not have #dig method'].include?(e.message)
|
34
|
-
raise WaterfallError
|
34
|
+
raise WaterfallError,
|
35
|
+
"Looks like you want to use check_waterfall feature, but it's set to 'false'. Otherwise check your #{Passpartu.config.policy_file} for validness"
|
35
36
|
else
|
36
37
|
raise e
|
37
38
|
end
|
data/lib/passpartu/version.rb
CHANGED
data/lib/passpartu.rb
CHANGED
@@ -13,21 +13,21 @@ module Passpartu
|
|
13
13
|
class PolicyYmlNotFoundError < StandardError; end
|
14
14
|
class WaterfallError < StandardError; end
|
15
15
|
|
16
|
-
def self.included(policy_class)
|
17
|
-
Passpartu::Patcher.call(policy_class)
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.policy
|
21
|
-
config.policy
|
22
|
-
end
|
23
|
-
|
24
16
|
class << self
|
25
17
|
attr_accessor :config
|
26
|
-
end
|
27
18
|
|
28
|
-
|
29
|
-
|
30
|
-
|
19
|
+
def included(policy_class)
|
20
|
+
Passpartu::Patcher.call(policy_class)
|
21
|
+
end
|
22
|
+
|
23
|
+
def policy
|
24
|
+
config.policy
|
25
|
+
end
|
26
|
+
|
27
|
+
def configure
|
28
|
+
self.config ||= Config.new
|
29
|
+
yield(config)
|
30
|
+
end
|
31
31
|
end
|
32
32
|
|
33
33
|
class Config
|
@@ -38,7 +38,7 @@ module Passpartu
|
|
38
38
|
|
39
39
|
def initialize
|
40
40
|
@policy_file = DEFAULT_POLICY_FILE
|
41
|
-
|
41
|
+
self.policy = load_policy_file(policy_file) if File.exist?(policy_file)
|
42
42
|
@raise_policy_missed_error = true
|
43
43
|
@check_waterfall = false
|
44
44
|
end
|
@@ -48,23 +48,27 @@ module Passpartu
|
|
48
48
|
|
49
49
|
raise PolicyYmlNotFoundError unless File.exist?(policy_file)
|
50
50
|
|
51
|
-
|
51
|
+
self.policy = load_policy_file(policy_file)
|
52
52
|
end
|
53
53
|
|
54
54
|
def check_waterfall=(value)
|
55
55
|
@check_waterfall = value
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
@check_waterfall.tap do |check_waterfall|
|
58
|
+
if check_waterfall
|
59
|
+
@raise_policy_missed_error = false
|
60
|
+
self.policy = @policy
|
61
|
+
end
|
60
62
|
end
|
61
|
-
|
62
|
-
@check_waterfall
|
63
63
|
end
|
64
64
|
|
65
65
|
private
|
66
66
|
|
67
|
-
def
|
67
|
+
def load_policy_file(path)
|
68
|
+
RUBY_VERSION.to_f >= 3.1 ? YAML.load_file(path, aliases: true) : YAML.load_file(path)
|
69
|
+
end
|
70
|
+
|
71
|
+
def policy=(value)
|
68
72
|
@policy = patch_policy_booleans_if(value)
|
69
73
|
end
|
70
74
|
|
@@ -73,11 +77,12 @@ module Passpartu
|
|
73
77
|
return hash unless @check_waterfall
|
74
78
|
|
75
79
|
hash.transform_values! do |value|
|
76
|
-
|
80
|
+
case value
|
81
|
+
when true
|
77
82
|
value.define_singleton_method(:dig) { |*_keys| true }
|
78
|
-
|
83
|
+
when false
|
79
84
|
value.define_singleton_method(:dig) { |*_keys| false }
|
80
|
-
|
85
|
+
else
|
81
86
|
patch_policy_booleans_if(value)
|
82
87
|
end
|
83
88
|
|
@@ -93,8 +98,6 @@ module Passpartu
|
|
93
98
|
!blank?(item)
|
94
99
|
end
|
95
100
|
end
|
96
|
-
|
97
|
-
configure {}
|
98
101
|
end
|
99
102
|
|
100
103
|
initializer = './config/initializers/passpartu.rb'
|
data/passpartu.gemspec
CHANGED
@@ -38,7 +38,10 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.require_paths = ['lib']
|
39
39
|
spec.files = Dir['README.md', 'lib/**/*', 'lib/*', 'passpartu.gemspec']
|
40
40
|
|
41
|
-
spec.add_development_dependency 'bundler', '~> 2.
|
42
|
-
spec.add_development_dependency 'rake', '~>
|
43
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
41
|
+
spec.add_development_dependency 'bundler', '~> 2.3'
|
42
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
43
|
+
spec.add_development_dependency 'rspec', '~> 3.11'
|
44
|
+
spec.add_development_dependency 'codecov', '~> 0.6'
|
45
|
+
spec.add_development_dependency 'dotenv', '~> 2.7'
|
46
|
+
spec.add_development_dependency 'simplecov', '~> 0.21'
|
44
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: passpartu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OrestF
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,42 +16,84 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
19
|
+
version: '2.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '2.
|
26
|
+
version: '2.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
47
|
+
version: '3.11'
|
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: '3.
|
54
|
+
version: '3.11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: codecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.6'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.6'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: dotenv
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.7'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.7'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.21'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.21'
|
55
97
|
description: |-
|
56
98
|
Passpartu is a great tool to manage your policies.
|
57
99
|
Keep all your policy rules in one file - passpartu.yml.
|
@@ -74,7 +116,7 @@ homepage: https://github.com/coaxsoft/passpartu
|
|
74
116
|
licenses:
|
75
117
|
- MIT
|
76
118
|
metadata: {}
|
77
|
-
post_install_message:
|
119
|
+
post_install_message:
|
78
120
|
rdoc_options: []
|
79
121
|
require_paths:
|
80
122
|
- lib
|
@@ -89,8 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
131
|
- !ruby/object:Gem::Version
|
90
132
|
version: '0'
|
91
133
|
requirements: []
|
92
|
-
rubygems_version: 3.
|
93
|
-
signing_key:
|
134
|
+
rubygems_version: 3.1.6
|
135
|
+
signing_key:
|
94
136
|
specification_version: 4
|
95
137
|
summary: Passpartu makes policies great again
|
96
138
|
test_files: []
|