passpartu 0.5.0 → 0.5.5

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: cd628d50b6e52acefe4f503c5ada9cec0b224b70be8791fa07f8c5586f93def4
4
- data.tar.gz: 5314cf52de8c7cf581768ed8842edb1164b3a57c9aa56456a5ed8e5f0dbfd1e9
3
+ metadata.gz: 34188ab985989f3022e6fdcefa8ebdae5140e954e3e92ae59483cf29e523b30d
4
+ data.tar.gz: 8268980e9fe35799d4409205d902691c9a7127e33f1a8638138d82a53612a01a
5
5
  SHA512:
6
- metadata.gz: 7ddafd099269680b9f05dbe140fdd9ebae94eff8072e81073cd5db3840bc8d87d4a8171db637de242df0f19c16043123972f9a8b518228d2e2712aab6559385c
7
- data.tar.gz: 3f3cab407da0abde8da14764df233c625020d12f8c0d631912d6d009c90bc6fb69d23024aa7d272dc3247009824160df64b816561ec05be43d0fc630b5687d7d
6
+ metadata.gz: 97826c98b5cb98587b30fe29bedb5c7e8c20ee6e2de9c76f3d7ab198ba5fd25e5cb7b68f2b4848f8b50e6447ca4463eebf3988e3339931c91dd87ddc01a0b9a1
7
+ data.tar.gz: 5383f59ecb8aca48eb483670cb051428c529845891c26e5f45534cb550e4db761cde0f6a894945b695314c5f418ea2a33fe10333598c64cd7e5ee51d3df4ac49
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Passpartu
1
+ # Passpartu v0.5.5 - [changelog](https://github.com/coaxsoft/passpartu/blob/master/CHANGELOG.md)
2
2
 
3
- Passpartu makes policies great again (works awesome with Pundit).
3
+ Passpartu makes policies great again (works awesome with [Pundit](https://rubygems.org/gems/pundit)).
4
4
 
5
5
  Instead of this:
6
6
  ```ruby
@@ -31,11 +31,22 @@ NOTE: Your `User` model must respond to `role` method that returns a string or a
31
31
  Keep all your policies in one place.
32
32
  Create `./config/passpartu.yml` and start writing your policies.
33
33
 
34
- #### Example
34
+ #### Example of `passpartu.yml`
35
35
  ```yml
36
36
  # ./config/passpartu.yml
37
+ manager: &manager
38
+ order:
39
+ create: true
40
+ edit: true
41
+ delete: false
42
+ product:
43
+ create: true
44
+ edit: true
45
+ delete: false
37
46
 
47
+ # yaml files supports inheritance!
38
48
  admin:
49
+ <<: *manager
39
50
  post:
40
51
  create: false
41
52
  update: true
@@ -51,25 +62,17 @@ admin:
51
62
  items:
52
63
  crud: true
53
64
  delete: false
54
- manager:
55
- order:
56
- create: true
57
- edit: true
58
- delete: false
59
- product:
60
- create: true
61
- edit: true
62
- delete: false
63
-
64
65
  ```
65
- #### Crud
66
+
67
+ ## Features
68
+ #### CRUD
66
69
  It's possible to use `crud` key to set values for `create`, `read`, `update`, `delete` at once.
67
70
  `create`, `read`, `update`, `delete` has higher priority than `crud`
68
71
  In case `crud: true` and `delete: false` - result `false`
69
72
 
70
73
 
71
- #### Except
72
- It's possible to exclude role from checks
74
+ #### Skip (except)
75
+ It's possible to exclude roles from checks
73
76
  ```ruby
74
77
  user_admin.can?(:orders, :edit) # check policy for admin and returns true if policy true
75
78
  user_admin.can?(:orders, :edit, except: :admin) # returns false because user is admin and we excluded admin
@@ -82,6 +85,15 @@ It's possible to give an array as except attribute
82
85
  user_manager.can?(:orders, :edit, except: [:admin, :manager]) # returns false
83
86
  ```
84
87
 
88
+ `skip` alias to `except`
89
+
90
+ Note: `expect` has higher priority than `skip`. Do not use both.
91
+ ```ruby
92
+ user_agent.can?(:orders, :edit, except: [:admin, :manager]) { user_agent.orders.include?(order) }
93
+ # equals to
94
+ user_agent.can?(:orders, :edit, skip: [:admin, :manager]) { user_agent.orders.include?(order) }
95
+ ```
96
+
85
97
  #### Per role methods
86
98
  Check user roles AND policy rule
87
99
  ```ruby
@@ -11,13 +11,13 @@ module Passpartu
11
11
 
12
12
  def call
13
13
  klass.class_eval do
14
- define_method('can?') do |*keys, except: nil, &block|
15
- Passpartu::BlockVerify.call(role, keys, except: except, &block)
14
+ define_method('can?') do |*keys, except: nil, skip: nil, &block|
15
+ Passpartu::BlockVerify.call(role, keys, except: except, skip: skip, &block)
16
16
  end
17
17
 
18
18
  Passpartu.policy.keys.each do |policy_role|
19
- define_method("#{policy_role}_can?") do |*keys, except: nil, &block|
20
- role.to_s == policy_role && Passpartu::BlockVerify.call(role, keys, except: except, &block)
19
+ define_method("#{policy_role}_can?") do |*keys, except: nil, skip: nil, &block|
20
+ role.to_s == policy_role && Passpartu::BlockVerify.call(role, keys, except: except, skip: skip, &block)
21
21
  end
22
22
  end
23
23
  end
@@ -3,15 +3,17 @@ module Passpartu
3
3
  CRUD_KEY = 'crud'.freeze
4
4
 
5
5
  attr_reader :role, :keys, :result, :except, :block
6
- def initialize(role, keys, except, block)
6
+ def initialize(role, keys, except, skip, block)
7
+ exclusion = except || skip # alias
8
+
7
9
  @role = role.to_s
8
10
  @keys = keys.map(&:to_s)
9
- @except = Array(except).map(&:to_s) if present?(except)
11
+ @except = Array(exclusion).map(&:to_s) if present?(exclusion)
10
12
  @block = block
11
13
  end
12
14
 
13
- def self.call(role, keys, except: nil, &block)
14
- new(role, keys, except, block).call
15
+ def self.call(role, keys, except: nil, skip: nil, &block)
16
+ new(role, keys, except, skip, block).call
15
17
  end
16
18
 
17
19
  def call
@@ -1,3 +1,3 @@
1
1
  module Passpartu
2
- VERSION = '0.5.0'.freeze
2
+ VERSION = '0.5.5'.freeze
3
3
  end
@@ -17,8 +17,8 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
19
19
  # to allow pushing to a single host or delete this section to allow pushing to any host.
20
- # if spec.respond_to?(:metadata)
21
20
  # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
21
+ # if spec.respond_to?(:metadata)
22
22
 
23
23
  # spec.metadata["homepage_uri"] = spec.homepage
24
24
  # spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
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: 0.5.0
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - OrestF
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-20 00:00:00.000000000 Z
11
+ date: 2019-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -90,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  version: '0'
91
91
  requirements: []
92
92
  rubyforge_project:
93
- rubygems_version: 2.7.3
93
+ rubygems_version: 2.7.7
94
94
  signing_key:
95
95
  specification_version: 4
96
96
  summary: Passpartu makes policies great again