Добавил генерацию колоды и улучшил бд
This commit is contained in:
36
app/services/deck_generator.rb
Normal file
36
app/services/deck_generator.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user