Class: Ffe::FeatureFlag

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.disabled?(flag) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
# File 'app/models/ffe/feature_flag.rb', line 19

def self.disabled?(flag)
  !enabled?(flag)
end

.enabled?(flag) ⇒ Boolean

the Flag functionality itself

main methods

Returns:

  • (Boolean)


13
14
15
16
17
# File 'app/models/ffe/feature_flag.rb', line 13

def self.enabled?(flag)
  feature = find_by(name: flag)

  feature.enabled? && feature.allowed_milieu?
end

.enabled_for?(flag, user: nil) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
26
27
28
29
30
# File 'app/models/ffe/feature_flag.rb', line 23

def self.enabled_for?(flag, user: nil)
  return enabled?(flag) if user.blank?

  feature = find_by(name: flag)
  return false unless feature.allowed_milieu?

  feature.enabled? && feature.user_ids.include?(user.id.to_s)
end

Instance Method Details

#allowed_milieu?Boolean

instance methods

Returns:

  • (Boolean)


34
35
36
37
38
39
40
# File 'app/models/ffe/feature_flag.rb', line 34

def allowed_milieu?
  actual_milieu = ENV.fetch(Ffe.config.env_variable, false)
  return false unless actual_milieu

  pos = Ffe.config.milieus[actual_milieu.to_sym]
  milieu[pos] == '1'
end

#readable_milieusObject

rubocop:disable Metrics/AbcSize



42
43
44
45
46
47
48
49
# File 'app/models/ffe/feature_flag.rb', line 42

def readable_milieus # rubocop:disable Metrics/AbcSize
  relevant = milieu.to_s.ljust(Ffe.config.milieus.length, '0').chars.first(Ffe.config.milieus.length)
  return 'all' if relevant.all? { |m| m == '1' }
  return 'no' if relevant.all? { |m| m == '0' }

  inverted = Ffe.config.milieus.invert
  relevant.each_with_index.filter_map { |m, i| inverted[i] if m == '1' }.join(', ')
end