Class: FeatureToggles::Mechatronic

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/feature_toggles/mechatronic.rb

Constant Summary collapse

POSSIBLE_ENABLING_VALUES =

Which env variables should be considered truthy

%w[true on yes 1].freeze

Instance Method Summary collapse

Constructor Details

#initialize(definition_file_paths = nil, &block) ⇒ Mechatronic

Returns a new instance of Mechatronic.



13
14
15
16
17
18
19
20
21
# 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

Instance Method Details

#eachObject



57
58
59
60
61
62
63
# 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) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# 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) ⇒ Object



23
24
25
# File 'lib/feature_toggles/mechatronic.rb', line 23

def env(val)
  @env_prefix = val
end

#feature(name, **metadata, &block) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
# File 'lib/feature_toggles/mechatronic.rb', line 27

def feature(name, **, &block)
  raise(ArgumentError, "Flag #{name} already exists") if @features.key?(name)

  features[name] = Feature.new(name, block, **)
end

#for(*args, **kwargs) ⇒ Object



41
42
43
# File 'lib/feature_toggles/mechatronic.rb', line 41

def for(*args, **kwargs)
  Proxy.new(self, *args, **kwargs)
end

#namesObject



33
34
35
# File 'lib/feature_toggles/mechatronic.rb', line 33

def names
  features.keys
end

#to_a(*args, **kwargs) ⇒ Object



45
46
47
48
49
# 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) ⇒ Object



51
52
53
54
55
# 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