Class: Panda::Core::FeatureFlag

Inherits:
ApplicationRecord show all
Defined in:
app/models/panda/core/feature_flag.rb

Class Method Summary collapse

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.

Returns:

  • (Boolean)


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