class FeatureGuard::Guard

Attributes

feature_name[R]

Public Class Methods

new(_feature_name) click to toggle source
# File lib/feature_guard/guard.rb, line 4
def initialize(_feature_name)
  @feature_name = _feature_name
end

Public Instance Methods

allow?(val = nil) click to toggle source

ramp methods (0.0 .. 100.0)

# File lib/feature_guard/guard.rb, line 28
def allow?(val = nil)
  val = val.nil? ? random_val : hashed_val(val)
  val < ramp_val
end
bump_ramp(amount = 10.0) click to toggle source
# File lib/feature_guard/guard.rb, line 33
def bump_ramp(amount = 10.0)
  set_ramp(ramp_val + amount)
end
disable() click to toggle source

binary flag methods (enabled/disabled)

# File lib/feature_guard/guard.rb, line 9
def disable
  redis.hset(FeatureGuard.flags_hkey, feature_name, 0)
end
enable() click to toggle source
# File lib/feature_guard/guard.rb, line 13
def enable
  redis.hset(FeatureGuard.flags_hkey, feature_name, 1)
end
enabled?() click to toggle source
# File lib/feature_guard/guard.rb, line 17
def enabled?
  redis.hget(FeatureGuard.flags_hkey, feature_name).tap { |v| return (!v.nil? && v.to_i > 0) }
rescue
  false
end
ramp_val() click to toggle source
# File lib/feature_guard/guard.rb, line 37
def ramp_val
  redis.hget(FeatureGuard.ramps_hkey, feature_name).to_f
end
set_ramp(new_val) click to toggle source
# File lib/feature_guard/guard.rb, line 41
def set_ramp(new_val)
  new_val = new_val.to_f
  new_val = 100.0 if new_val > 100.0
  new_val = 0.0   if new_val < 0.0

  redis.hset(FeatureGuard.ramps_hkey, feature_name, new_val)
  new_val
end
toggle() click to toggle source
# File lib/feature_guard/guard.rb, line 23
def toggle
  enabled? ? disable : enable
end

Private Instance Methods

hashed_val(s) click to toggle source
# File lib/feature_guard/guard.rb, line 52
def hashed_val(s)
  (Digest::MD5.hexdigest("#{feature_name}_#{s}").to_i(16) % 10000).to_f / 100.0
end
random_val() click to toggle source
# File lib/feature_guard/guard.rb, line 56
def random_val
  rand * 100.0
end
redis() click to toggle source
# File lib/feature_guard/guard.rb, line 60
def redis
  FeatureGuard.redis
end