class Unleash::Strategy::FlexibleRollout

Public Instance Methods

is_enabled?(params = {}, context = nil) click to toggle source

need: params

# File lib/unleash/strategy/flexible_rollout.rb, line 11
def is_enabled?(params = {}, context = nil)
  return false unless params.is_a?(Hash)
  return false unless context.class.name == 'Unleash::Context'

  stickiness = params.fetch('stickiness', 'default')
  stickiness_id = resolve_stickiness(stickiness, context)

  begin
    percentage = Integer(params.fetch('rollout', 0))
    percentage = 0 if percentage > 100 || percentage.negative?
  rescue ArgumentError
    return false
  end

  group_id = params.fetch('groupId', '')
  normalized_number = Util.get_normalized_number(stickiness_id, group_id)

  return false if stickiness_id.nil?

  (percentage.positive? && normalized_number <= percentage)
end
name() click to toggle source
# File lib/unleash/strategy/flexible_rollout.rb, line 6
def name
  'flexibleRollout'
end

Private Instance Methods

random() click to toggle source
# File lib/unleash/strategy/flexible_rollout.rb, line 35
def random
  Random.rand(0..100)
end
resolve_stickiness(stickiness, context) click to toggle source
# File lib/unleash/strategy/flexible_rollout.rb, line 39
def resolve_stickiness(stickiness, context)
  case stickiness
  when 'userId'
    context.user_id
  when 'sessionId'
    context.session_id
  when 'random'
    random
  when 'default'
    context.user_id || context.session_id || random
  else
    nil
  end
end