class FeatureToggles::Mechatronic

Constants

POSSIBLE_ENABLING_VALUES

Which env variables should be considered truthy

Attributes

env_prefix[R]
features[R]

Public Class Methods

new(definition_file_paths = nil, &block) click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 13
def initialize(definition_file_paths = nil, &block)
  @features = {}

  definition_file_paths&.each do |file|
    instance_eval(File.read(file), file)
  end

  instance_eval(&block) if block
end

Public Instance Methods

each() { |f| ... } click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 57
def each
  if block_given?
    features.values.each { |f| yield f }
  else
    features.values.to_enum
  end
end
enabled?(feature, *args, **kwargs) click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 37
def enabled?(feature, *args, **kwargs)
  enabled_globally?(feature) || !!features.fetch(feature).resolver.call(*args, **kwargs)
end
env(val) click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 23
def env(val)
  @env_prefix = val
end
feature(name, **metadata, &block) click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 27
def feature(name, **metadata, &block)
  raise(ArgumentError, "Flag #{name} already exists") if @features.key?(name)

  features[name] = Feature.new(name, block, **metadata)
end
for(*args, **kwargs) click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 41
def for(*args, **kwargs)
  Proxy.new(self, *args, **kwargs)
end
names() click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 33
def names
  features.keys
end
to_a(*args, **kwargs) click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 45
def to_a(*args, **kwargs)
  names.map do |feature|
    {feature: feature, enabled: enabled?(feature, *args, **kwargs)}
  end
end
to_h(*args, **kwargs) click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 51
def to_h(*args, **kwargs)
  features.map do |feature, _|
    [feature, enabled?(feature, *args, **kwargs)]
  end.to_h
end

Private Instance Methods

enabled_globally?(feature) click to toggle source
# File lib/feature_toggles/mechatronic.rb, line 69
def enabled_globally?(feature)
  env_prefix &&
    POSSIBLE_ENABLING_VALUES.include?(ENV["#{env_prefix}_#{feature.upcase}"])
end