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