Class: Sorare::Rewards::Tiers::QualifyPlayers

Inherits:
Object
  • Object
show all
Includes:
Interactor
Defined in:
lib/sorare/rewards/interactors/tiers/qualify_players.rb

Overview

QualifyPlayers qualifies a list of sorted supply in tiers based on its rank or a provided tier Returns an array of tiers (array) containing the list of slugs for that tier

Instance Method Summary collapse

Instance Method Details

#by_rankObject



62
63
64
# File 'lib/sorare/rewards/interactors/tiers/qualify_players.rb', line 62

def by_rank
  @by_rank ||= sorted_supply.values.first&.dig('tier').nil?
end

#callObject



16
17
18
# File 'lib/sorare/rewards/interactors/tiers/qualify_players.rb', line 16

def call
  context.players = by_rank ? qualified_players_by_rank : qualified_players_by_tier
end

#nb_of_tiersObject



40
41
42
43
44
45
46
47
# File 'lib/sorare/rewards/interactors/tiers/qualify_players.rb', line 40

def nb_of_tiers
  @nb_of_tiers ||= begin
    default = Sorare::Rewards.configuration.tiers
    default -= 1 while ((default**2) - 1) > sorted_supply.keys.length

    default
  end
end

#qualified_players_by_rankObject

Use the rank in the array



30
31
32
33
34
# File 'lib/sorare/rewards/interactors/tiers/qualify_players.rb', line 30

def qualified_players_by_rank
  nb_of_tiers.times.map do |tier|
    sorted_supply.keys[tier_index(tier)..tier_index(tier + 1) - 1]
  end
end

#qualified_players_by_tierObject

Use the tier specified within the data



21
22
23
24
25
26
27
# File 'lib/sorare/rewards/interactors/tiers/qualify_players.rb', line 21

def qualified_players_by_tier
  Sorare::Rewards.configuration.tiers.times.map do |tier|
    sorted_supply.keys.filter do |slug|
      sorted_supply.dig(slug, 'tier') == tier
    end
  end
end

#tier_depthObject



36
37
38
# File 'lib/sorare/rewards/interactors/tiers/qualify_players.rb', line 36

def tier_depth
  @tier_depth ||= sorted_supply.keys.length / ((nb_of_tiers**2) - 1)
end

#tier_index(tier) ⇒ Object



49
50
51
52
53
54
# File 'lib/sorare/rewards/interactors/tiers/qualify_players.rb', line 49

def tier_index(tier)
  return 0 unless tier.positive?
  return sorted_supply.keys.length if tier == nb_of_tiers

  tier_index(tier - 1) + (tier_depth * tier_size(tier - 1))
end

#tier_size(tier) ⇒ Object



56
57
58
59
60
# File 'lib/sorare/rewards/interactors/tiers/qualify_players.rb', line 56

def tier_size(tier)
  return 1 unless tier.positive?

  tier_size(tier - 1) * 2
end