module Schaltroom

Feature Toggle library

Attributes

calls[RW]

Public Class Methods

[](item) click to toggle source
# File lib/schaltroom.rb, line 29
def self.[](item)
  handle_caller(caller, __method__, item)
  feature = Schaltroom.find_feature(item)
  raise ArgumentError, "Feature: #{item} is unknown. Please add it to your Schaltroom.config" if feature.nil?
  if feature[:type] == :boolean
    return feature[:value]
  else
    Feature.new(feature)
  end
end
active?(name) click to toggle source
# File lib/schaltroom.rb, line 73
def self.active?(name)
  handle_caller(caller, __method__, name)
  feature = find_feature(name)
  return false unless feature
  feature[:value]
end
active_before?(name, version) click to toggle source
# File lib/schaltroom.rb, line 95
def self.active_before?(name, version)
  handle_caller(caller, __method__, name)
  Gem::Version.new(version) > Gem::Version.new(find_feature(name)[:value])
end
active_between?(name, first_version, last_version) click to toggle source
# File lib/schaltroom.rb, line 105
def self.active_between?(name, first_version, last_version)
  handle_caller(caller, __method__, name)
  Gem::Version.new(first_version) <= Gem::Version.new(find_feature(name)[:value]) && Gem::Version.new(last_version) >= Gem::Version.new(find_feature(name)[:value])
end
active_since?(name, version) click to toggle source
# File lib/schaltroom.rb, line 85
def self.active_since?(name, version)
  handle_caller(caller, __method__, name)
  Gem::Version.new(version) <= Gem::Version.new(find_feature(name)[:value])
end
add_feature(name, type, value) click to toggle source
# File lib/schaltroom.rb, line 17
def self.add_feature(name, type, value)
 @repository.add_feature(name, type, value)
end
add_gem(gem) click to toggle source
# File lib/schaltroom.rb, line 54
def self.add_gem(gem)
  @repository.add_feature(gem.to_s.to_sym, :version, gem::VERSION::STRING)
end
config() { |config| ... } click to toggle source
# File lib/schaltroom.rb, line 21
def self.config
  if block_given?
    yield @config
  else
    @config
  end
end
delete_feature(name) click to toggle source
# File lib/schaltroom.rb, line 64
def self.delete_feature(name)
  sym = name.is_a?(Symbol) ? name : name.to_s.to_sym
  self.repository.delete(sym)
end
features() click to toggle source
# File lib/schaltroom.rb, line 69
def self.features
  self.repository if block_given?
end
find_feature(name) click to toggle source
# File lib/schaltroom.rb, line 58
def self.find_feature(name)
  return self.repository[name] if name.is_a?(Symbol)

  self.repository[name.to_s.to_sym]
end
gem_version() click to toggle source
# File lib/schaltroom/version.rb, line 4
def self.gem_version
  Gem::Version.new VERSION::STRING
end
handle_caller(caller_stack, method, feature_name) click to toggle source
# File lib/schaltroom.rb, line 110
def self.handle_caller(caller_stack, method, feature_name)
  return unless @config.monitoring == :enabled

  @calls << { feature_name: feature_name, method: method.to_sym, caller: caller_stack[0] }
  @calls = @calls.uniq
end
inactive?(name) click to toggle source
# File lib/schaltroom.rb, line 80
def self.inactive?(name)
  handle_caller(caller, __method__, name)
  !active?(name)
end
inactive_before?(name, version) click to toggle source
# File lib/schaltroom.rb, line 100
def self.inactive_before?(name, version)
  handle_caller(caller, __method__, name)
  Gem::Version.new(version) <= Gem::Version.new(find_feature(name)[:value])
end
inactive_since?(name, version) click to toggle source
# File lib/schaltroom.rb, line 90
def self.inactive_since?(name, version)
  handle_caller(caller, __method__, name)
  Gem::Version.new(version) > Gem::Version.new(find_feature(name)[:value])
end
repository() { |repository| ... } click to toggle source
# File lib/schaltroom.rb, line 40
def self.repository
  if block_given?
    yield @repository
  else
    @repository
  end
end
reset() click to toggle source
# File lib/schaltroom.rb, line 48
def self.reset
  @config = Config.new
  @repository = Repository.new
  @calls = []
end
with_config_and_repository(config, repository) { || ... } click to toggle source
# File lib/schaltroom.rb, line 117
def self.with_config_and_repository(config, repository)
  return unless block_given?
  current_config = @config
  current_repository = @repository
  @config = config
  @repository = @repository.merge(repository)
  yield
  @config = current_config
  @repository = current_repository
end