permission_settings 1.0.1 → 1.0.4

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: 61eff56994b0ce8636338745c41a4dea22ff170d2b91ed6a86d56cc229811fa2
4
- data.tar.gz: 7fe0d16b4f7ff151a45248b4911d7235d8281f68eba85c45561642e68242ea8f
3
+ metadata.gz: 8e3d221f8775059aa809aa4d2f1209859688005a8019da2729b0d9c153ec2cb2
4
+ data.tar.gz: 5464c88c540fc443cbeb3da665c8d973688274920693f25c555b0bef646e8467
5
5
  SHA512:
6
- metadata.gz: 49ad1fcf08773eab5b57e56ea59620ebd29f3f6f66580c9b64c72e7df910e168bc0854702651a58f043855f764e029bc22beaf728f00b85dc1b77f078e869044
7
- data.tar.gz: 9bf5facf503f0ba85d7043db831fed4672de19e37800899f478e2d216d0db786330a16eb7ea26610cfb7c244c5bfcaadf33eac87e3f6eae22186cf9bfa65681f
6
+ metadata.gz: 82fd496bbd08ff3cd48657cc86cfccade0b187bf51a313265daae5304d1839c7b62b610d9dba676cbc4870ac005c4170d294a85b85ff4105e3bcaad72e0ecca9
7
+ data.tar.gz: b34b702372daf1b6c2b1cc9386c0e4ac7503833eb316ad8795523b73b6c92814b6047dfb8548a7476549c08f664b3623a62de61ed3085b9bc9ccfb8a86574ee3
data/.rubocop.yml CHANGED
@@ -15,7 +15,7 @@ Style/StringLiteralsInInterpolation:
15
15
  EnforcedStyle: double_quotes
16
16
 
17
17
  Layout/LineLength:
18
- Max: 120
18
+ Max: 150
19
19
 
20
20
  Style/Documentation:
21
21
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,4 +1,18 @@
1
- ## [Unreleased]
1
+ ## [1.0.3] - 2024-02-19
2
+
3
+ - Readme update
4
+ - Better PermissionsDirNotFound error message and handling
5
+ - Added `permissions` method to get permissions of the calling instance
6
+ - Added test core coverage
7
+
8
+
9
+ ## [1.0.2] - 2024-02-19
10
+
11
+ - Commented out `byebug` in the code
12
+
13
+ ## [1.0.1] - 2024-02-01
14
+
15
+ - Changes in gemspec metadata
2
16
 
3
17
  ## [1.0.0] - 2024-01-30
4
18
 
data/README.md CHANGED
@@ -24,7 +24,7 @@ Generate and run the migration to create the settings table that is used to stor
24
24
 
25
25
  ```shell
26
26
  rails g rails_settings:migration
27
- rake db:migrate
27
+ rails db:migrate
28
28
  ```
29
29
 
30
30
  ## Usage
@@ -36,7 +36,7 @@ You can configure the gem by calling `PermissionSettings.configure` method in an
36
36
  ```ruby
37
37
  # config/initializers/permission_settings.rb
38
38
 
39
- PermissionSettings.configure do |_config|
39
+ PermissionSettings.configure do |config|
40
40
  config.permissions_dir_path = 'config/permissions'
41
41
  config.role_access_method = :role
42
42
  end
@@ -98,7 +98,7 @@ end
98
98
 
99
99
  In order to check permissions of the resource instance you need to pass it as a named argument `resource` to the `#can?` method.
100
100
 
101
- Take into account that the resource model should have a `role` filed or method that returns a role name of the calling instance or you can configure the gem to use another method name by setting `role_access_method` configuration option.
101
+ Take into account that the resource model should have a `role` field or method that returns a role name of the calling instance or you can configure the gem to use another method name by setting `role_access_method` configuration option.
102
102
 
103
103
  ### Checking permissions
104
104
 
@@ -111,8 +111,8 @@ user.can?(:read, :notifications, resource: person) # => true
111
111
  ```
112
112
 
113
113
  Method `can?` accepts 2 arguments:
114
- * `*permission_keys` - this keys will be used to find permissions in the settings. It can be a string or an array of strings. Required argument.
115
- * `*resource` - Named argument resource. Instance towards which the permissions will be checked. Required argument.
114
+ * `*permission_keys` - this keys will be used to find permissions in the settings. It can be a string or an array of strings. `Required argument`.
115
+ * `*resource` - Named argument resource. Instance towards which the permissions will be checked. `Required argument`.
116
116
 
117
117
  ### Accessing permissions
118
118
 
@@ -120,7 +120,7 @@ You can also access permissions of the resource or calling instance by calling `
120
120
 
121
121
  ```ruby
122
122
  person = Person.last # => #<Person id: 2, name: "Jane", role: "client">
123
- person.settings[PermissionSettings.configuration.scope_name].admin.notifications.read # => false
123
+ person.permissions[:admin][:notifications][:read] # => false
124
124
  ```
125
125
 
126
126
  More about settings you can read in [Rails Settings](https://github.com/ledermann/rails-settings) gem documentation.
@@ -167,7 +167,8 @@ custom_permissions = {
167
167
  admin = User.first # => #<User id: 1, name: "John", role: "admin">
168
168
  person = Person.last # => #<User id: 2, name: "Jane", role: "client">
169
169
 
170
- person.settings(PermissionSettings.configuration.scope_name).update(custom_permissions)
170
+ policy_scope = PermissionSettings.configuration.scope_name(User)
171
+ person.settings(policy_scope).update(custom_permissions)
171
172
 
172
173
  admin.can?(:read, :notifications, resource: person) # => false
173
174
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'byebug'
3
+ # require 'byebug'
4
4
 
5
5
  module PermissionSettings
6
6
  class Configuration
@@ -9,20 +9,13 @@ module PermissionSettings
9
9
  DEFAULT_PERMISSION_FILE_PATH = 'config/permissions'
10
10
  DEFAULT_ROLE_ACCESS_METHOD = :role
11
11
 
12
- attr_accessor :role_access_method
13
- attr_reader :permissions_dir_path
12
+ attr_accessor :role_access_method, :permissions_dir_path
14
13
 
15
14
  def initialize
16
15
  @permissions_dir_path = DEFAULT_PERMISSION_FILE_PATH
17
16
  @role_access_method = DEFAULT_ROLE_ACCESS_METHOD
18
17
  end
19
18
 
20
- def permissions_dir_path=(path)
21
- raise PermissionsDirNotFound, 'Permissions directory not found' unless Dir.exist?(path)
22
-
23
- @permissions_dir_path = path
24
- end
25
-
26
19
  def scope_name(klass)
27
20
  [klass.name.underscore, 'permissions'].join('_').to_sym
28
21
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'byebug'
3
+ # require 'byebug'
4
+ require 'active_record'
5
+ require 'rails-settings'
4
6
  require_relative 'verify_instance'
5
7
 
6
8
  module PermissionSettings
@@ -17,12 +19,25 @@ module PermissionSettings
17
19
  end
18
20
 
19
21
  def call
22
+ check_permissions_dir
20
23
  setup_settings_interface
21
24
  setup_instance_verification
25
+ setup_permissions_method
22
26
  end
23
27
 
24
28
  private
25
29
 
30
+ def check_permissions_dir
31
+ path = PermissionSettings.configuration.permissions_dir_path
32
+ return if Dir.exist?(path)
33
+
34
+ raise PermissionSettings::Configuration::PermissionsDirNotFound, dir_missing_message(path)
35
+ end
36
+
37
+ def dir_missing_message(path)
38
+ "Permissions config directory not found. Please create a directory at #{path} and add permission files there."
39
+ end
40
+
26
41
  def setup_settings_interface
27
42
  klass.class_eval do
28
43
  has_settings do |s|
@@ -44,5 +59,18 @@ module PermissionSettings
44
59
  end
45
60
  end
46
61
  end
62
+
63
+ def setup_permissions_method
64
+ klass.class_eval do
65
+ define_method(:permissions) do
66
+ scope = PermissionSettings.configuration.scope_name(self.class)
67
+ settings(scope).then do |permissions|
68
+ return ActiveSupport::HashWithIndifferentAccess.new(permissions.value) if permissions.value.present?
69
+
70
+ ActiveSupport::HashWithIndifferentAccess.new(default_settings[scope])
71
+ end
72
+ end
73
+ end
74
+ end
47
75
  end
48
76
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'byebug'
3
+ # require 'byebug'
4
4
  require 'active_support/hash_with_indifferent_access'
5
5
 
6
6
  module PermissionSettings
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PermissionSettings
4
- VERSION = '1.0.1'
4
+ VERSION = '1.0.4'
5
5
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'byebug'
3
+ # require 'byebug'
4
4
 
5
5
  require_relative 'permission_settings/version'
6
6
  require_relative 'permission_settings/patcher'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: permission_settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Misha Push
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-30 00:00:00.000000000 Z
11
+ date: 2024-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport