rabarber 4.1.2 → 4.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73050af26c88e78f295c489ee5fc49c782b3950157db2ecd1dd48cdda5b10045
4
- data.tar.gz: '08f7da98672774c2198c155be4fb6f795c23e7da72e565631ef0f08207cd2cb9'
3
+ metadata.gz: ed0e1d5cc00bc6f410b2a677afb591fa4bb1acd21a7674729edc91e7c5b72cc1
4
+ data.tar.gz: 7dd9ded3179f7aef89f36a0983f28fe6f4695cd7e535cdeeba4d208053f8d53f
5
5
  SHA512:
6
- metadata.gz: d1482714aa484c800970ea77a081388a0df4b8945e8fc0931b76e8d6415ed9f88c01ad8834e873d9161a20c7a5f2208b10782fe95857024b1a6069919f83dd47
7
- data.tar.gz: '06383d81e91f872419fb567b2ef18991abf6a32263297645725e52b70a9c383a769c72d3657fb9f61a6cc11fb30b2129d813ca63e1a352761f99795f287c86b7'
6
+ metadata.gz: 99920a8e65cd953f2ddac63083628680b92f89195a65759b64e25d5619099517ad332b8821d2c681a2c0503286617aff0a26f41d5f5f99623fc678a33a028c93
7
+ data.tar.gz: ce9ddfa4d718ac7d2b2533c3c87ad9cc5d3658cb1b23aa4ae1f0e75fe544186a37fb30bbea97b14c0fc9623cdb94ef9bb41c75ae0ea6b27d5a6a72dd62250d17
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## v4.1.3
2
+
3
+ ### Bugs:
4
+
5
+ - Fixed an issue where role presence checking did not work correctly if `must_have_roles` configuration option was enabled
6
+
7
+ ### Misc:
8
+
9
+ - Added caching for `Rabarber::HasRoles#all_roles` method to improve performance
10
+
1
11
  ## v4.1.2
2
12
 
3
13
  ### Misc:
@@ -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(key, &)
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(key), expires_in: 1.hour, race_condition_ttl: 5.seconds, &)
17
14
  end
18
15
 
19
- def delete(*roleable_ids, context:)
16
+ def delete(*keys)
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(keys.map { prepare_key(_1) }) if keys.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(key)
31
+ "#{CACHE_PREFIX}:#{Digest::SHA2.hexdigest(Marshal.dump(key))}"
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,7 @@ 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
+ Rabarber::Core::Cache.delete(*assigned_to_roleables(role).flat_map { [[_1, context], [_1, :all]] })
71
71
  end
72
72
 
73
73
  def assigned_to_roleables(role)
@@ -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.3"
5
5
  end
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: 4.1.2
4
+ version: 4.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - enjaku4
8
8
  - trafium
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-21 00:00:00.000000000 Z
11
+ date: 2025-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails