Class: Panda::Core::FeatureFlag
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Panda::Core::FeatureFlag
- Defined in:
- app/models/panda/core/feature_flag.rb
Class Method Summary collapse
-
.disable!(key) ⇒ Object
Disable a feature flag by key.
-
.enable!(key) ⇒ Object
Enable a feature flag by key.
-
.enabled?(key) ⇒ Boolean
Check whether a feature flag is enabled.
-
.register(key, description: nil, enabled: false) ⇒ Object
Register a feature flag idempotently.
-
.toggle!(key) ⇒ Object
Toggle a feature flag by key.
Class Method Details
.disable!(key) ⇒ Object
Disable a feature flag by key.
27 28 29 30 31 |
# File 'app/models/panda/core/feature_flag.rb', line 27 def self.disable!(key) flag = find_by!(key: key) flag.update!(enabled: false) Rails.cache.write(cache_key_for(key), false, expires_in: 1.minute) end |
.enable!(key) ⇒ Object
Enable a feature flag by key.
20 21 22 23 24 |
# File 'app/models/panda/core/feature_flag.rb', line 20 def self.enable!(key) flag = find_by!(key: key) flag.update!(enabled: true) Rails.cache.write(cache_key_for(key), true, expires_in: 1.minute) end |
.enabled?(key) ⇒ Boolean
Check whether a feature flag is enabled. Returns false for unknown keys (safe default). Results are cached for 1 minute to avoid repeated DB lookups.
13 14 15 16 17 |
# File 'app/models/panda/core/feature_flag.rb', line 13 def self.enabled?(key) Rails.cache.fetch(cache_key_for(key), expires_in: 1.minute) do where(key: key, enabled: true).exists? end end |
.register(key, description: nil, enabled: false) ⇒ Object
Register a feature flag idempotently. Only sets description and enabled on initial creation — existing flags keep their current state so admin changes are preserved.
43 44 45 46 47 48 |
# File 'app/models/panda/core/feature_flag.rb', line 43 def self.register(key, description: nil, enabled: false) find_or_create_by(key: key) do |flag| flag.description = description flag.enabled = enabled end end |
.toggle!(key) ⇒ Object
Toggle a feature flag by key.
34 35 36 37 38 |
# File 'app/models/panda/core/feature_flag.rb', line 34 def self.toggle!(key) flag = find_by!(key: key) flag.update!(enabled: !flag.enabled) Rails.cache.write(cache_key_for(key), flag.enabled, expires_in: 1.minute) end |