class Rox::Core::RoxString

Attributes

client_experiment[RW]
condition[RW]
default_value[RW]
impression_invoker[RW]
name[RW]
options[RW]
parser[RW]

Public Class Methods

new(default_value, options = []) click to toggle source
# File lib/rox/core/entities/rox_string.rb, line 11
def initialize(default_value, options = [])
  @default_value = default_value
  @options = options.clone
  raise ArgumentError, 'options should be an array' unless options.is_a?(Array)
  if options.length > 0 && options.any? { |x| x.class != default_value.class }
    raise ArgumentError, 'options should be the same type as default value'
  end
  @options << default_value unless options.include?(default_value)

  @condition = nil
  @parser = nil
  @impression_invoker = nil
  @client_experiment = nil
  @name = nil
end

Public Instance Methods

internal_value(context, nil_instead_of_default, evaluated_type = String) click to toggle source
# File lib/rox/core/entities/rox_string.rb, line 49
def internal_value(context, nil_instead_of_default, evaluated_type = String)
  return_value = nil_instead_of_default ? nil : @default_value
  merged_context = MergedContext.new(@parser&.global_context, context)

  unless @parser.nil? || @condition.nil? || @condition.empty?
    evaluation_result = @parser.evaluate_expression(@condition, merged_context)
    unless evaluation_result.nil?
      value = evaluated_type == String ? evaluation_result.string_value : evaluation_result.value
      is_empty = value.is_a?(String) && value.empty?
      return_value = value if !value.nil? && !is_empty
    end
  end

  send_impressions(return_value, merged_context)
  return_value
end
send_impressions(return_value, merged_context) click to toggle source
# File lib/rox/core/entities/rox_string.rb, line 27
def send_impressions(return_value, merged_context)
  reporting_value = ReportingValue.new(@name, return_value, @client_experiment)
  @impression_invoker&.invoke(reporting_value, @client_experiment, merged_context)
end
set_for_evaluation(parser, experiment, impression_invoker) click to toggle source
# File lib/rox/core/entities/rox_string.rb, line 32
def set_for_evaluation(parser, experiment, impression_invoker)
  if experiment.nil?
    @client_experiment = nil
    @condition = ''
  else
    @client_experiment = Experiment.new(experiment)
    @condition = experiment.condition
  end

  @parser = parser
  @impression_invoker = impression_invoker
end
value(context = nil) click to toggle source
# File lib/rox/core/entities/rox_string.rb, line 45
def value(context = nil)
  internal_value(context, false)
end