class Flipflop::Strategies::AbstractStrategy

Attributes

description[R]
key[R]
name[R]
title[R]

Public Class Methods

default_description() click to toggle source
# File lib/flipflop/strategies/abstract_strategy.rb, line 34
def default_description
end
default_name() click to toggle source
# File lib/flipflop/strategies/abstract_strategy.rb, line 29
def default_name
  return "anonymous" unless name
  name.split("::").last.gsub(/Strategy$/, "").underscore
end
new(**options) click to toggle source
# File lib/flipflop/strategies/abstract_strategy.rb, line 40
def initialize(**options)
  # Generate key before setting instance that should be excluded from
  # unique key generation.
  @key = OptionsHasher.new(self).generate

  @name = (options.delete(:name) || self.class.default_name).freeze
  @title = @name.humanize.freeze
  @description = (options.delete(:description) || self.class.default_description).freeze
  @hidden = !!options.delete(:hidden) || false

  if options.any?
    raise StrategyError.new(name, "did not understand option #{options.keys.map(&:inspect) * ', '}")
  end
end

Public Instance Methods

clear!(feature) click to toggle source

Remove the feature symbol from this strategy. It should no longer be recognized afterwards: enabled?(feature) will return nil.

# File lib/flipflop/strategies/abstract_strategy.rb, line 79
def clear!(feature)
  raise NotImplementedError
end
enabled?(feature) click to toggle source

Return true iff the given feature symbol is explicitly enabled. Return false iff the given feature symbol is explicitly disabled. Return nil iff the given feature symbol is unknown by this strategy.

# File lib/flipflop/strategies/abstract_strategy.rb, line 68
def enabled?(feature)
  raise NotImplementedError
end
hidden?() click to toggle source
# File lib/flipflop/strategies/abstract_strategy.rb, line 55
def hidden?
  @hidden
end
reset!() click to toggle source

Optional. Remove all features, so that no feature is known.

# File lib/flipflop/strategies/abstract_strategy.rb, line 84
def reset!
  raise NotImplementedError
end
switch!(feature, enabled) click to toggle source

Enable/disable (true/false) the given feature symbol explicitly.

# File lib/flipflop/strategies/abstract_strategy.rb, line 73
def switch!(feature, enabled)
  raise NotImplementedError
end
switchable?() click to toggle source

Return true iff this strategy is able to switch features on/off. Return false otherwise.

# File lib/flipflop/strategies/abstract_strategy.rb, line 61
def switchable?
  false
end

Protected Instance Methods

request() click to toggle source

Returns the request. Raises if no request is available, for example if the strategy was used outside of a request context.

# File lib/flipflop/strategies/abstract_strategy.rb, line 92
def request
  RequestInterceptor.request or
    raise StrategyError.new(name, "required request, but was used outside request context")
end
request?() click to toggle source

Returns true iff a request is available.

# File lib/flipflop/strategies/abstract_strategy.rb, line 98
def request?
  !RequestInterceptor.request.nil?
end