Sha256: c88036192598df29f42ee5480a68c383930e41958b2eea73e2f2f59927b83c05

Contents?: true

Size: 1.97 KB

Versions: 4

Compression:

Stored size: 1.97 KB

Contents

class TestTrack::Fake::SplitRegistry
  Split = Struct.new(:name, :registry)

  def self.instance
    @instance ||= new
  end

  def to_h
    @to_h ||= splits_with_deterministic_weights
  end

  def splits
    to_h.map do |split, registry|
      Split.new(split, registry)
    end
  end

  private

  def split_hash
    if schema_registry.present?
      schema_registry
    elsif legacy_test_track_schema_yml.present?
      legacy_test_track_schema_yml[:splits]
    else
      {}
    end
  end

  def schema_registry
    @schema_registry = _schema_registry unless instance_variable_defined?(:@schema_registry)
    @schema_registry
  end

  def _schema_registry
    file = File.exist?(schema_yml_path) &&
      YAML.load_file(schema_yml_path)
    file && file['splits'].each_with_object(ActiveSupport::HashWithIndifferentAccess.new) do |split, h|
      h[split['name']] = split['weights']
    end
  end

  def schema_yml_path
    base = ENV['TEST_TRACK_SCHEMA_ROOT'] || Rails.root
    File.join(base, 'testtrack', 'schema.yml')
  end

  def legacy_test_track_schema_yml
    unless instance_variable_defined?(:@legacy_test_track_schema_yml)
      @legacy_test_track_schema_yml = _legacy_test_track_schema_yml
    end
    @legacy_test_track_schema_yml
  end

  def _legacy_test_track_schema_yml
    File.exist?(legacy_test_track_schema_yml_path) &&
      YAML.load_file(legacy_test_track_schema_yml_path).with_indifferent_access
  rescue
    nil
  end

  def legacy_test_track_schema_yml_path
    ENV["TEST_TRACK_SCHEMA_FILE_PATH"] || Rails.root.join('db', 'test_track_schema.yml').to_s
  end

  def splits_with_deterministic_weights
    split_hash.each_with_object({}) do |(split_name, weighting_registry), split_registry|
      default_variant = weighting_registry.keys.sort.first

      adjusted_weights = { default_variant => 100 }
      weighting_registry.except(default_variant).each_key do |variant|
        adjusted_weights[variant] = 0
      end

      split_registry[split_name] = adjusted_weights
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
test_track_rails_client-4.0.0.alpha26 app/models/test_track/fake/split_registry.rb
test_track_rails_client-4.0.0.alpha25 app/models/test_track/fake/split_registry.rb
test_track_rails_client-4.0.0.alpha24 app/models/test_track/fake/split_registry.rb
test_track_rails_client-4.0.0.alpha23 app/models/test_track/fake/split_registry.rb