class Featureflow::Evaluate

Public Class Methods

new(feature_key:, feature:, failover_variant:, user:, salt:, events_client: nil) click to toggle source
# File lib/featureflow/evaluate.rb, line 5
def initialize(feature_key:, feature:, failover_variant:, user:, salt:, events_client: nil)
  @key = feature_key
  @feature = feature
  @failover_variant = failover_variant
  @user = user
  @salt = salt
  @events_client = events_client

  @has_failover = @failover_variant.is_a?(String)
  @failover_variant = 'off' unless @has_failover

  @evaluated_variant = evaluate_variant
end

Public Instance Methods

is?(value) click to toggle source
# File lib/featureflow/evaluate.rb, line 19
def is?(value)
  @events_client.evaluate(@key, @evaluated_variant, value, @user) if @events_client
  @evaluated_variant == value
end
is_off?()
Alias for: off?
is_on?()
Alias for: on?
off?() click to toggle source
# File lib/featureflow/evaluate.rb, line 29
def off?
  is? 'off'
end
Also aliased as: is_off?
on?() click to toggle source
# File lib/featureflow/evaluate.rb, line 24
def on?
  is? 'on'
end
Also aliased as: is_on?
value() click to toggle source
# File lib/featureflow/evaluate.rb, line 34
def value
  @evaluated_variant
end

Private Instance Methods

evaluate_variant() click to toggle source
# File lib/featureflow/evaluate.rb, line 40
def evaluate_variant
  unless @feature
    Featureflow.logger.info "Evaluating nil feature '#{@feature_key}' using the "\
      "#{@has_failover ? 'provided' : 'default'} failover '#{@failover_variant}'"
    return @failover_variant
  end

  return @feature['offVariantKey'] unless @feature['enabled']

  @feature['rules'].each do |rule|
    next unless EvaluateHelpers.rule_matches(rule, @user)
    hash = EvaluateHelpers.calculate_hash(@salt, @feature['key'], @user['id'])
    variant_value = EvaluateHelpers.get_variant_value(hash)
    return EvaluateHelpers.get_variant_split_key(rule['variantSplits'], variant_value)
  end
end