lib/config_result.rb



module Statsig
  class ConfigResult

    attr_accessor :name
    attr_accessor :gate_value
    attr_accessor :json_value
    attr_accessor :rule_id
    attr_accessor :secondary_exposures
    attr_accessor :undelegated_sec_exps
    attr_accessor :config_delegate
    attr_accessor :explicit_parameters
    attr_accessor :is_experiment_group
    attr_accessor :evaluation_details
    attr_accessor :group_name
    attr_accessor :id_type
    attr_accessor :target_app_ids
    attr_accessor :disable_evaluation_details
    attr_accessor :disable_exposures
    attr_accessor :config_version
    attr_accessor :include_local_overrides
    attr_accessor :forward_all_exposures
    attr_accessor :sampling_rate
    attr_accessor :has_seen_analytical_gates

    def initialize(
      name:,
      gate_value: false,
      json_value: nil,
      rule_id: nil,
      secondary_exposures: [],
      config_delegate: nil,
      explicit_parameters: nil,
      is_experiment_group: false,
      evaluation_details: nil,
      group_name: nil,
      id_type: nil,
      target_app_ids: nil,
      disable_evaluation_details: false,
      disable_exposures: false,
      config_version: nil,
      include_local_overrides: true,
      forward_all_exposures: false,
      sampling_rate: nil,
      has_seen_analytical_gates: false
    )
      @name = name
      @gate_value = gate_value
      @json_value = json_value
      @rule_id = rule_id
      @secondary_exposures = secondary_exposures
      @undelegated_sec_exps = @secondary_exposures
      @config_delegate = config_delegate
      @explicit_parameters = explicit_parameters
      @is_experiment_group = is_experiment_group
      @evaluation_details = evaluation_details
      @group_name = group_name
      @id_type = id_type
      @target_app_ids = target_app_ids
      @disable_evaluation_details = disable_evaluation_details
      @disable_exposures = disable_exposures
      @config_version = config_version
      @include_local_overrides = include_local_overrides
      @forward_all_exposures = forward_all_exposures
      @sampling_rate = sampling_rate
      @has_seen_analytical_gates = has_seen_analytical_gates
    end

    def self.from_user_persisted_values(config_name, user_persisted_values)
      sticky_values = user_persisted_values[config_name]
      return nil if sticky_values.nil?

      from_hash(config_name, sticky_values)
    end

    def to_hash
      {
        json_value: @json_value,
        gate_value: @gate_value,
        rule_id: @rule_id,
        secondary_exposures: @secondary_exposures,
        config_sync_time: @evaluation_details.config_sync_time,
        init_time: @init_time,
        group_name: @group_name,
        id_type: @id_type,
        target_app_ids: @target_app_ids
      }
    end
  end
end