36 lines
768 B
Ruby
36 lines
768 B
Ruby
# frozen_string_literal: true
|
|
|
|
module ClashDeckGenerator2
|
|
module Services
|
|
class DeckGenerator
|
|
DECK_SIZE = 8
|
|
|
|
def initialize(cards_repo:)
|
|
@cards_repo = cards_repo
|
|
end
|
|
|
|
def call(only_meta: true)
|
|
pool = only_meta ? @cards_repo.meta_cards : @cards_repo.all_cards
|
|
deck = sample_unique(pool, DECK_SIZE)
|
|
|
|
{
|
|
cards: deck,
|
|
avg_elixir: average_elixir(deck)
|
|
}
|
|
end
|
|
|
|
private
|
|
|
|
def sample_unique(pool, n)
|
|
raise "Not enough cards in pool (need #{n}, have #{pool.size})" if pool.size < n
|
|
|
|
pool.sample(n)
|
|
end
|
|
|
|
def average_elixir(deck)
|
|
sum = deck.sum { |c| c[:elixir_cost].to_i }
|
|
sum.fdiv(deck.size).round(2)
|
|
end
|
|
end
|
|
end
|
|
end |