module Toggleable::Base::ClassMethods

it will generate these methods into included class.

Public Instance Methods

activate!(actor: nil) click to toggle source
# File lib/toggleable/base.rb, line 28
def activate!(actor: nil)
  toggle_key(true, actor)
end
active?() click to toggle source
# File lib/toggleable/base.rb, line 20
def active?
  return to_bool(toggle_active.to_s) unless toggle_active.nil?

  # Lazily register the key
  Toggleable.configuration.storage.set_if_not_exist(key, DEFAULT_VALUE, namespace: Toggleable.configuration.namespace)
  DEFAULT_VALUE
end
deactivate!(actor: nil) click to toggle source
# File lib/toggleable/base.rb, line 32
def deactivate!(actor: nil)
  toggle_key(false, actor)
end
description() click to toggle source
# File lib/toggleable/base.rb, line 40
def description
  name
end
key() click to toggle source
# File lib/toggleable/base.rb, line 36
def key
  @key ||= name.underscore
end
process() { || ... } click to toggle source

should we encourage proxy classes

# File lib/toggleable/base.rb, line 45
def process
  yield if active?
end

Private Instance Methods

read_expired?() click to toggle source
# File lib/toggleable/base.rb, line 62
def read_expired?
  @_last_read_at < Time.now.localtime - Toggleable.configuration.expiration_time
end
to_bool(value) click to toggle source
# File lib/toggleable/base.rb, line 66
def to_bool(value)
  return true if value =~ /^(true|t|yes|y|1)$/i
  return false if value.empty? || value =~ /^(false|f|no|n|0)$/i
  raise ArgumentError, "invalid value for Boolean: \"#{value}\""
end
toggle_active() click to toggle source
# File lib/toggleable/base.rb, line 56
def toggle_active
  return @_toggle_active if defined?(@_toggle_active) && !read_expired? && Toggleable.configuration.use_memoization
  @_last_read_at = Time.now.localtime
  @_toggle_active = Toggleable.configuration.storage.get(key, namespace: Toggleable.configuration.namespace)
end
toggle_key(value, actor) click to toggle source
# File lib/toggleable/base.rb, line 51
def toggle_key(value, actor)
  Toggleable.configuration.logger&.log(key: key, value: value, actor: actor)
  Toggleable.configuration.storage.set(key, value, namespace: Toggleable.configuration.namespace)
end