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