rabarber 4.1.2 → 4.1.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: 73050af26c88e78f295c489ee5fc49c782b3950157db2ecd1dd48cdda5b10045
4
- data.tar.gz: '08f7da98672774c2198c155be4fb6f795c23e7da72e565631ef0f08207cd2cb9'
3
+ metadata.gz: 5152a05ff663a5216b2fc2f546bf3b111f3e78a4c44c0088e72f2f73ac89464f
4
+ data.tar.gz: f6f24ff379055cfd5f4f7e93377a548289fd8f7b30b2f06053fd958f6ab8e5a3
5
5
  SHA512:
6
- metadata.gz: d1482714aa484c800970ea77a081388a0df4b8945e8fc0931b76e8d6415ed9f88c01ad8834e873d9161a20c7a5f2208b10782fe95857024b1a6069919f83dd47
7
- data.tar.gz: '06383d81e91f872419fb567b2ef18991abf6a32263297645725e52b70a9c383a769c72d3657fb9f61a6cc11fb30b2129d813ca63e1a352761f99795f287c86b7'
6
+ metadata.gz: e31e2c7fa58d42096203d1f8027acea031a720fafe21fd44b179a8c2e66818686ebd55abf2ec0d3229c93fc7e04b514a68fa20feebef25b7e11048caac4e58e7
7
+ data.tar.gz: 6b7143de48cc95ead0caf5256c9e3d28a54a515f4ea50cf33fc87271d5d13071782fad1926dda698e7842047f7bbed4a2cfe8254be3390af0ab1fde2608a9b30
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## v4.1.4
2
+
3
+ ### Misc:
4
+
5
+ - Deprecated `must_have_roles` configuration option
6
+ - Optimized cache invalidation
7
+
8
+ ## v4.1.3
9
+
10
+ ### Bugs:
11
+
12
+ - Fixed an issue where role presence checking did not work correctly if `must_have_roles` configuration option was enabled
13
+
14
+ ### Misc:
15
+
16
+ - Added caching for `Rabarber::HasRoles#all_roles` method to improve performance
17
+
1
18
  ## v4.1.2
2
19
 
3
20
  ### Misc:
@@ -20,6 +20,7 @@ module Rabarber
20
20
  instance_variable_set(:"@#{method_name}", Rabarber::Input::Types::Boolean.new(
21
21
  value, Rabarber::ConfigurationError, "Configuration '#{method_name}' must be a Boolean"
22
22
  ).process)
23
+ ActiveSupport::Deprecation.new("5.0.0", "rabarber").warn("Rabarber’s ‘must_have_roles’ configuration option is deprecated and will be removed in the next major version!") if method_name == :must_have_roles
23
24
  end
24
25
  end
25
26
 
@@ -5,22 +5,18 @@ require "digest/sha2"
5
5
  module Rabarber
6
6
  module Core
7
7
  module Cache
8
- CACHE_PREFIX = "rabarber"
9
- private_constant :CACHE_PREFIX
10
-
11
8
  module_function
12
9
 
13
- def fetch(roleable_id, context:, &block)
10
+ def fetch(uid, &)
14
11
  return yield unless enabled?
15
12
 
16
- Rails.cache.fetch(key_for(roleable_id, context), expires_in: 1.hour, race_condition_ttl: 5.seconds, &block)
13
+ Rails.cache.fetch(prepare_key(uid), expires_in: 1.hour, race_condition_ttl: 5.seconds, &)
17
14
  end
18
15
 
19
- def delete(*roleable_ids, context:)
16
+ def delete(*uids)
20
17
  return unless enabled?
21
18
 
22
- keys = roleable_ids.map { |roleable_id| key_for(roleable_id, context) }
23
- Rails.cache.delete_multi(keys) if keys.any?
19
+ Rails.cache.delete_multi(uids.map { prepare_key(_1) }) if uids.any?
24
20
  end
25
21
 
26
22
  def enabled?
@@ -31,9 +27,12 @@ module Rabarber
31
27
  Rails.cache.delete_matched(/^#{CACHE_PREFIX}/o)
32
28
  end
33
29
 
34
- def key_for(id, context)
35
- "#{CACHE_PREFIX}:#{Digest::SHA2.hexdigest("#{id}#{context.fetch(:context_type)}#{context.fetch(:context_id)}")}"
30
+ def prepare_key(uid)
31
+ "#{CACHE_PREFIX}:#{Digest::SHA2.hexdigest(Marshal.dump(uid))}"
36
32
  end
33
+
34
+ CACHE_PREFIX = "rabarber"
35
+ private_constant :CACHE_PREFIX
37
36
  end
38
37
  end
39
38
 
@@ -7,6 +7,10 @@ module Rabarber
7
7
  []
8
8
  end
9
9
 
10
+ def all_roles
11
+ {}
12
+ end
13
+
10
14
  def has_role?(*role_names, context: nil) # rubocop:disable Lint/UnusedMethodArgument
11
15
  false
12
16
  end
@@ -17,10 +17,9 @@ module Rabarber
17
17
  end
18
18
 
19
19
  def roles_permitted?(roleable, controller_instance)
20
- resolved_context = resolve_context(controller_instance)
21
- return false if Rabarber::Configuration.instance.must_have_roles && roleable.roles(context: resolved_context).empty?
20
+ return false if Rabarber::Configuration.instance.must_have_roles && roleable.all_roles.empty?
22
21
 
23
- roles.empty? || roleable.has_role?(*roles, context: resolved_context)
22
+ roles.empty? || roleable.has_role?(*roles, context: resolve_context(controller_instance))
24
23
  end
25
24
 
26
25
  def dynamic_rules_followed?(controller_instance)
@@ -16,11 +16,11 @@ module Rabarber
16
16
 
17
17
  def roles(context: nil)
18
18
  processed_context = process_context(context)
19
- Rabarber::Core::Cache.fetch(roleable_id, context: processed_context) { rabarber_roles.names(context: processed_context) }
19
+ Rabarber::Core::Cache.fetch([roleable_id, processed_context]) { rabarber_roles.names(context: processed_context) }
20
20
  end
21
21
 
22
22
  def all_roles
23
- rabarber_roles.all_names
23
+ Rabarber::Core::Cache.fetch([roleable_id, :all]) { rabarber_roles.all_names }
24
24
  end
25
25
 
26
26
  def has_role?(*role_names, context: nil)
@@ -102,7 +102,7 @@ module Rabarber
102
102
  end
103
103
 
104
104
  def delete_roleable_cache(context:)
105
- Rabarber::Core::Cache.delete(roleable_id, context:)
105
+ Rabarber::Core::Cache.delete([roleable_id, context], [roleable_id, :all])
106
106
  end
107
107
 
108
108
  def roleable_id
@@ -67,7 +67,9 @@ module Rabarber
67
67
  private
68
68
 
69
69
  def delete_roleables_cache(role, context:)
70
- Rabarber::Core::Cache.delete(*assigned_to_roleables(role), context:)
70
+ assigned_to_roleables(role).each_slice(1000) do |ids|
71
+ Rabarber::Core::Cache.delete(*ids.flat_map { [[_1, context], [_1, :all]] })
72
+ end
71
73
  end
72
74
 
73
75
  def assigned_to_roleables(role)
@@ -97,8 +99,6 @@ module Rabarber
97
99
  record
98
100
  end
99
101
 
100
- private
101
-
102
102
  def delete_assignments
103
103
  ActiveRecord::Base.connection.execute(
104
104
  ActiveRecord::Base.sanitize_sql(
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rabarber
4
- VERSION = "4.1.2"
4
+ VERSION = "4.1.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabarber
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.2
4
+ version: 4.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - enjaku4
8
8
  - trafium
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2025-02-21 00:00:00.000000000 Z
12
+ date: 2025-03-22 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rails
@@ -30,6 +31,7 @@ dependencies:
30
31
  - - "<"
31
32
  - !ruby/object:Gem::Version
32
33
  version: '8.1'
34
+ description:
33
35
  email:
34
36
  - rabarber_gem@icloud.com
35
37
  executables: []
@@ -80,6 +82,7 @@ metadata:
80
82
  source_code_uri: https://github.com/enjaku4/rabarber
81
83
  changelog_uri: https://github.com/enjaku4/rabarber/blob/main/CHANGELOG.md
82
84
  rubygems_mfa_required: 'true'
85
+ post_install_message:
83
86
  rdoc_options: []
84
87
  require_paths:
85
88
  - lib
@@ -97,7 +100,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
100
  - !ruby/object:Gem::Version
98
101
  version: '0'
99
102
  requirements: []
100
- rubygems_version: 3.6.2
103
+ rubygems_version: 3.4.19
104
+ signing_key:
101
105
  specification_version: 4
102
106
  summary: Simple role-based authorization library for Ruby on Rails
103
107
  test_files: []