class Sorare::Rewards::Allocations::ComputeForQuality

ComputeForQuality computes the reward allocations for a given quality supply between the divisions of a league

Public Instance Methods

allocate!() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 28
def allocate!
  allocate_cards
  allocate_pct if has?('pct')
  allocate_extra if has?('pct')
  allocate_loop if has?('cards_per_loop')
end
allocate_cards() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 39
def allocate_cards
  allocate_divisions do |division_config, division|
    count = [remaining_supply, division_config['cards'] || 0].min

    allocated[division] += count
  end
end
allocate_divisions(&block) click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 35
def allocate_divisions(&block)
  config.each_with_index(&block)
end
allocate_extra() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 63
def allocate_extra
  allocate_divisions do |division_config, division|
    count = pick_extra_supply((supply * (division_config['pct'] || 0)).modulo(1))

    allocated[division] += count
  end
end
allocate_loop() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 55
def allocate_loop
  while remaining_supply.positive?
    allocate_divisions do |division_config, division|
      allocated[division] += [division_config['cards_per_loop'] || 0, remaining_supply].min
    end
  end
end
allocate_pct() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 47
def allocate_pct
  allocate_divisions do |division_config, division|
    count = [remaining_supply, (supply * (division_config['pct'] || 0)).floor].min

    allocated[division] += count
  end
end
allocations() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 22
def allocations
  config.length.times.map do |division|
    [Sorare::Rewards.configuration.transform_division.call(division + 1), allocated[division]]
  end.to_h
end
call() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 14
def call
  check_config!

  context.allocated = Array.new(config.length, 0)
  allocate!
  context.quality_allocations = allocations
end
check_config!() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 87
def check_config!
  return if config

  context.fail!(error: 'Invalid config')
end
has?(key) click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 83
def has?(key)
  !config.first[key].nil?
end
pick_extra_supply(probability) click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 75
def pick_extra_supply(probability)
  reward_probability = randomizer.rand
  return 0 unless remaining_supply.positive?
  return 0 unless reward_probability < probability

  1
end
remaining_supply() click to toggle source
# File lib/sorare/rewards/interactors/allocations/compute_for_quality.rb, line 71
def remaining_supply
  supply - allocated.sum
end