Class: Togls::FeatureToggleRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/togls/feature_toggle_registry.rb

Overview

Feature Toggle Registry

The Feature Toggle Registry conceptually houses a registry of toggles. It accomplishes this by technically housing a toggle repository, rule repository, and feature repository which is uses to store and retrieve the respective entities. This plays a significant portion in the primary DSL as well.

Direct Known Subclasses

TestToggleRegistry

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFeatureToggleRegistry

Returns a new instance of FeatureToggleRegistry.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/togls/feature_toggle_registry.rb', line 10

def initialize
  @toggle_repository_drivers = [
    Togls::ToggleRepositoryDrivers::InMemoryDriver.new,
    Togls::ToggleRepositoryDrivers::EnvOverrideDriver.new]
  @feature_repository_drivers =
    [Togls::FeatureRepositoryDrivers::InMemoryDriver.new]
  @rule_repository_drivers =
    [Togls::RuleRepositoryDrivers::InMemoryDriver.new]
  @feature_repository = Togls::FeatureRepository.new(
    @feature_repository_drivers)
  @rule_repository = Togls::RuleRepository.new(@rule_repository_drivers)
  @toggle_repository = Togls::ToggleRepository.new(
    @toggle_repository_drivers, @feature_repository, @rule_repository)
  @rule_repository.store(Togls::Rules::Boolean.new(true))
  @rule_repository.store(Togls::Rules::Boolean.new(false))
end

Class Method Details

.create(&block) ⇒ Object



27
28
29
30
31
# File 'lib/togls/feature_toggle_registry.rb', line 27

def self.create(&block)
  feature_toggle_registry = new
  feature_toggle_registry.instance_eval(&block)
  feature_toggle_registry
end

Instance Method Details

#allObject



53
54
55
# File 'lib/togls/feature_toggle_registry.rb', line 53

def all
  @toggle_repository.all
end

#expand(&block) ⇒ Object



33
34
35
36
# File 'lib/togls/feature_toggle_registry.rb', line 33

def expand(&block)
  instance_eval(&block)
  self
end

#feature(key, desc) ⇒ Object



38
39
40
41
42
43
# File 'lib/togls/feature_toggle_registry.rb', line 38

def feature(key, desc)
  feature = Togls::Feature.new(key, desc)
  toggle = Togls::Toggle.new(feature)
  @toggle_repository.store(toggle)
  Togls::Toggler.new(@toggle_repository, toggle)
end

#get(key) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/togls/feature_toggle_registry.rb', line 45

def get(key)
  toggle = @toggle_repository.get(key.to_s)
  if toggle.is_a?(Togls::NullToggle)
    Togls.logger.warn("Feature identified by '#{key}' has not been defined")
  end
  toggle
end