Files
by/script/test_deck.rb

51 lines
1.9 KiB
Ruby

# frozen_string_literal: true
require_relative "../config/app"
Hanami.app.prepare
repo = ClashDeckGenerator2::Repos::CardsRepo.new
roles_repo = ClashDeckGenerator2::Services::CardRolesRepository.new
generator = ClashDeckGenerator2::Services::DeckGenerator.new(
cards_repo: repo,
roles_repo: roles_repo
)
deck = generator.call
deck = deck.last if deck.is_a?(Array) && deck.first == :cards
puts "========================================"
puts "DECK GENERATED SUCCESSFULLY"
puts "========================================"
deck.each_with_index do |card, index|
roles = roles_repo.roles_for(card.name)
meta_flag = card.is_meta == 1 ? "META" : "NON-META"
puts "#{index + 1}. #{card.name} | #{card.type} | #{card.rarity} | #{card.elixir_cost} | #{meta_flag}"
puts " roles: #{roles.join(', ')}"
end
puts "----------------------------------------"
puts "Cards count: #{deck.size}"
names = deck.map(&:name)
puts "Unique cards count: #{names.uniq.size}"
avg_elixir = deck.sum(&:elixir_cost).to_f / deck.size
puts "Average elixir: #{avg_elixir.round(2)}"
puts "Spells by type: #{deck.count { |c| c.type == 'spell' }}"
puts "Troops count: #{deck.count { |c| c.type == 'troop' }}"
puts "Buildings count: #{deck.count { |c| c.type == 'building' }}"
puts "Champions count: #{deck.count { |c| c.rarity == 'champion' }}"
puts "Heroes count: #{deck.count { |c| c.rarity == 'hero' }}"
puts "Evolutions count: #{deck.count { |c| c.rarity == 'evolution' }}"
puts "Meta cards count: #{deck.count { |c| c.is_meta == 1 }}"
all_roles = deck.flat_map { |card| roles_repo.roles_for(card.name) }.uniq.sort
puts "Deck roles coverage: #{all_roles.join(', ')}"
puts "Win conditions count: #{deck.count { |c| roles_repo.has_role?(c.name, 'win_condition') }}"
puts "Anti-air count: #{deck.count { |c| roles_repo.has_role?(c.name, 'anti_air') }}"
puts "Spell-role count: #{deck.count { |c| roles_repo.has_role?(c.name, 'spell') }}"
puts "========================================"