Class: LcpRuby::Permissions::Registry
- Inherits:
-
Object
- Object
- LcpRuby::Permissions::Registry
- Defined in:
- lib/lcp_ruby/permissions/registry.rb
Class Method Summary collapse
-
.all_definitions ⇒ Array<Metadata::PermissionDefinition>
Returns all active DB permission definitions (parsed).
-
.available? ⇒ Boolean
Whether the permission_config table is ready to query.
-
.clear! ⇒ Object
Full reset - called from LcpRuby.reset!.
-
.for_model(model_name) ⇒ Metadata::PermissionDefinition?
Returns cached PermissionDefinition for a given model name, or nil.
-
.mark_available! ⇒ Object
Mark registry as available (called after contract validation passes).
-
.reload!(model_name = nil) ⇒ Object
Clear cache for one model or all models.
Class Method Details
.all_definitions ⇒ Array<Metadata::PermissionDefinition>
Returns all active DB permission definitions (parsed). Used by impersonation to collect role names.
29 30 31 32 33 34 35 |
# File 'lib/lcp_ruby/permissions/registry.rb', line 29 def all_definitions return [] unless available? monitor.synchronize do load_all_definitions end end |
.available? ⇒ Boolean
Whether the permission_config table is ready to query.
59 60 61 |
# File 'lib/lcp_ruby/permissions/registry.rb', line 59 def available? @available == true end |
.clear! ⇒ Object
Full reset - called from LcpRuby.reset!
51 52 53 54 55 56 |
# File 'lib/lcp_ruby/permissions/registry.rb', line 51 def clear! monitor.synchronize do @available = false @cache = {} end end |
.for_model(model_name) ⇒ Metadata::PermissionDefinition?
Returns cached PermissionDefinition for a given model name, or nil.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/lcp_ruby/permissions/registry.rb', line 10 def for_model(model_name) return nil unless available? key = model_name.to_s result, operation = monitor.synchronize do if @cache.key?(key) [ @cache[key], :hit ] else @cache[key] = load_and_parse(key) [ @cache[key], :miss ] end end ActiveSupport::Notifications.instrument("cache.lcp_ruby", cache: "permissions", operation: operation.to_s) result end |
.mark_available! ⇒ Object
Mark registry as available (called after contract validation passes).
64 65 66 67 |
# File 'lib/lcp_ruby/permissions/registry.rb', line 64 def mark_available! @available = true @cache ||= {} end |
.reload!(model_name = nil) ⇒ Object
Clear cache for one model or all models.
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/lcp_ruby/permissions/registry.rb', line 39 def reload!(model_name = nil) monitor.synchronize do if model_name @cache.delete(model_name.to_s) else @cache = {} end end ActiveSupport::Notifications.instrument("cache.lcp_ruby", cache: "permissions", operation: "invalidate") end |