Добавил генерацию колоды и улучшил бд
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module ClashDeckGenerator2
|
||||
module Relations
|
||||
class Cards < DB::Relation
|
||||
schema :cards, infer: true
|
||||
|
||||
def meta
|
||||
def meta_cards_scope
|
||||
where(is_meta: 1)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,9 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module ClashDeckGenerator2
|
||||
module Repos
|
||||
class CardsRepo < DB::Repo[:cards]
|
||||
commands :create
|
||||
|
||||
def meta_cards
|
||||
cards.meta.to_a
|
||||
cards.meta_cards_scope.to_a
|
||||
end
|
||||
|
||||
def all_cards
|
||||
cards.to_a
|
||||
end
|
||||
def all
|
||||
cards.to_a
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
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