rabarber 1.0.3 → 1.0.4

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
  SHA256:
3
- metadata.gz: f83c97e518621ea7749eab381d5e1e4f84785c8197036e923220fa0d29fcc43e
4
- data.tar.gz: 9fe75afecf6c3066c0cbf779ffdf79a2e67716a8acdc0f15c72e85008528f5ab
3
+ metadata.gz: 2df45030b2e771a3825eb72a544575fce977253f77ce26673f65372c9d03c06e
4
+ data.tar.gz: 3538bc9bc309f5715cdf25426d21b9353be873b2e7c25bc135403b4382342678
5
5
  SHA512:
6
- metadata.gz: 407ed9c374cbe8dafd964aa939f342d47a307bd101e2932bf8ae12c526f48a75524df6eb6f6f35a6a3fb4a023f7db5e50a7c04b580f56fde06ccfcc09f431df8
7
- data.tar.gz: 4cfcde7d7b6ed23faff8d0e6f8f036c641ecf6dfb18e1b075dbdfd6aaa5f8391dfdf13ea7e25b70b7881489fc3b292791f663c6c70b1a32a634e7caf681a2355
6
+ metadata.gz: 50a7e4d76a49010af472916c1dfea7fd59bfc882ca67f1fd1a3742f2357e112d8fab112a75af6baf404fc02155128f928c3637ca1d7e9c71ecc238bdbe648b62
7
+ data.tar.gz: f020edd72b93678b25761df692bd3b1d361ec9caad9872952d8df79f4e21948ca46e20de2e1dbe41270a8a26d989d7394b79000429d086923dc94b1173b3a166
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 1.0.4
2
+
3
+ - Allow to use strings as role names
4
+
1
5
  ## 1.0.3
2
6
 
3
7
  - Enhance clarity by improving error types and messages
@@ -21,19 +21,21 @@ module Rabarber
21
21
  end
22
22
 
23
23
  def current_user_method=(method_name)
24
- raise ConfigurationError, "current_user_method must be a symbol" unless method_name.is_a?(Symbol)
24
+ unless (method_name.is_a?(Symbol) || method_name.is_a?(String)) && method_name.present?
25
+ raise ConfigurationError, "Configuration 'current_user_method' must be a Symbol or a String"
26
+ end
25
27
 
26
28
  @current_user_method = method_name.to_sym
27
29
  end
28
30
 
29
31
  def must_have_roles=(value)
30
- raise ConfigurationError, "must_have_roles must be a boolean" unless [true, false].include?(value)
32
+ raise ConfigurationError, "Configuration 'must_have_roles' must be a Boolean" unless [true, false].include?(value)
31
33
 
32
34
  @must_have_roles = value
33
35
  end
34
36
 
35
37
  def when_unauthorized=(callable)
36
- raise ConfigurationError, "when_unauthorized must be a proc" unless callable.is_a?(Proc)
38
+ raise ConfigurationError, "Configuration 'when_unauthorized' must be a Proc" unless callable.is_a?(Proc)
37
39
 
38
40
  @when_unauthorized = callable
39
41
  end
@@ -19,36 +19,23 @@ module Rabarber
19
19
  end
20
20
 
21
21
  def has_role?(*role_names)
22
- validate_role_names(role_names)
23
-
24
- (roles & role_names).any?
22
+ (roles & RoleNames.pre_process(role_names)).any?
25
23
  end
26
24
 
27
25
  def assign_roles(*role_names, create_new: true)
28
- validate_role_names(role_names)
26
+ roles_to_assign = RoleNames.pre_process(role_names)
29
27
 
30
- create_new_roles(role_names) if create_new
28
+ create_new_roles(roles_to_assign) if create_new
31
29
 
32
- rabarber_roles << Role.where(name: role_names) - rabarber_roles
30
+ rabarber_roles << Role.where(name: roles_to_assign) - rabarber_roles
33
31
  end
34
32
 
35
33
  def revoke_roles(*role_names)
36
- validate_role_names(role_names)
37
-
38
- self.rabarber_roles = rabarber_roles - Role.where(name: role_names)
34
+ self.rabarber_roles = rabarber_roles - Role.where(name: RoleNames.pre_process(role_names))
39
35
  end
40
36
 
41
37
  private
42
38
 
43
- def validate_role_names(role_names)
44
- return if role_names.all? { |role_name| role_name.is_a?(Symbol) && role_name.to_s.match?(Role::NAME_REGEX) }
45
-
46
- raise(
47
- InvalidArgumentError,
48
- "Role names must be symbols and may only contain lowercase letters, numbers and underscores"
49
- )
50
- end
51
-
52
39
  def create_new_roles(role_names)
53
40
  new_roles = role_names - Role.names
54
41
  new_roles.each { |role_name| Role.create!(name: role_name) }
@@ -4,9 +4,7 @@ module Rabarber
4
4
  class Role < ActiveRecord::Base
5
5
  self.table_name = "rabarber_roles"
6
6
 
7
- NAME_REGEX = /\A[a-z0-9_]+\z/
8
-
9
- validates :name, presence: true, uniqueness: true, format: { with: NAME_REGEX }
7
+ validates :name, presence: true, uniqueness: true, format: { with: RoleNames::REGEX }
10
8
 
11
9
  def self.names
12
10
  pluck(:name).map(&:to_sym)
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rabarber
4
+ module RoleNames
5
+ module_function
6
+
7
+ REGEX = /\A[a-z0-9_]+\z/
8
+
9
+ def pre_process(role_names)
10
+ return role_names.map(&:to_sym) if role_names.all? do |role_name|
11
+ (role_name.is_a?(Symbol) || role_name.is_a?(String)) && role_name.to_s.match?(REGEX)
12
+ end
13
+
14
+ raise(
15
+ InvalidArgumentError,
16
+ "Role names must be Symbols or Strings and may only contain lowercase letters, numbers and underscores"
17
+ )
18
+ end
19
+ end
20
+ end
data/lib/rabarber/rule.rb CHANGED
@@ -5,9 +5,9 @@ module Rabarber
5
5
  attr_reader :action, :roles, :custom
6
6
 
7
7
  def initialize(action, roles, custom)
8
- @action = validate_action(action)
9
- @roles = validate_roles(roles)
10
- @custom = validate_custom_rule(custom)
8
+ @action = pre_process_action(action)
9
+ @roles = RoleNames.pre_process(Array(roles))
10
+ @custom = pre_process_custom_rule(custom)
11
11
  end
12
12
 
13
13
  def verify_access(user_roles, custom_rule_receiver, action_name = nil)
@@ -38,29 +38,18 @@ module Rabarber
38
38
  end
39
39
  end
40
40
 
41
- def validate_action(action)
42
- return action if action.nil? || action.is_a?(Symbol)
41
+ def pre_process_action(action)
42
+ return action.to_sym if (action.is_a?(String) || action.is_a?(Symbol)) && action.present?
43
+ return action if action.nil?
43
44
 
44
- raise InvalidArgumentError, "Action name must be a symbol"
45
+ raise InvalidArgumentError, "Action name must be a Symbol or a String"
45
46
  end
46
47
 
47
- def validate_roles(roles)
48
- roles_array = Array(roles)
48
+ def pre_process_custom_rule(custom)
49
+ return custom.to_sym if (custom.is_a?(String) || custom.is_a?(Symbol)) && action.present?
50
+ return custom if custom.nil? || custom.is_a?(Proc)
49
51
 
50
- return roles_array if roles_array.empty? || roles_array.all? do |role|
51
- role.is_a?(Symbol) && role.match?(Role::NAME_REGEX)
52
- end
53
-
54
- raise(
55
- InvalidArgumentError,
56
- "Role names must be symbols and may only contain lowercase letters, numbers and underscores"
57
- )
58
- end
59
-
60
- def validate_custom_rule(custom)
61
- return custom if custom.nil? || custom.is_a?(Symbol) || custom.is_a?(Proc)
62
-
63
- raise InvalidArgumentError, "Custom rule must be a symbol or a proc"
52
+ raise InvalidArgumentError, "Custom rule must be a Symbol, a String, or a Proc"
64
53
  end
65
54
  end
66
55
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rabarber
4
- VERSION = "1.0.3"
4
+ VERSION = "1.0.4"
5
5
  end
data/lib/rabarber.rb CHANGED
@@ -6,13 +6,12 @@ require_relative "rabarber/configuration"
6
6
  require "active_record"
7
7
  require "active_support"
8
8
 
9
- require_relative "rabarber/controllers/concerns/authorization"
9
+ require_relative "rabarber/role_names"
10
10
 
11
+ require_relative "rabarber/controllers/concerns/authorization"
11
12
  require_relative "rabarber/helpers/helpers"
12
-
13
- require_relative "rabarber/models/role"
14
13
  require_relative "rabarber/models/concerns/has_roles"
15
-
14
+ require_relative "rabarber/models/role"
16
15
  require_relative "rabarber/permissions"
17
16
 
18
17
  module Rabarber
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabarber
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - enjaku4
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-01 00:00:00.000000000 Z
11
+ date: 2024-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -44,6 +44,7 @@ files:
44
44
  - lib/rabarber/models/concerns/has_roles.rb
45
45
  - lib/rabarber/models/role.rb
46
46
  - lib/rabarber/permissions.rb
47
+ - lib/rabarber/role_names.rb
47
48
  - lib/rabarber/rule.rb
48
49
  - lib/rabarber/version.rb
49
50
  - rabarber.gemspec