From 082c1b308b0dc76c5dfbcf262e61cf15de1b6ef9 Mon Sep 17 00:00:00 2001 From: yummy Date: Sun, 29 Mar 2026 00:19:59 +0500 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=20=D0=9A=D0=BE=D0=BB=D0=BE=D0=B4=20Beta=201.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/actions/decks/generate.rb | 2 + app/actions/home/index.rb | 3 +- app/templates/layouts/app.html.erb | 212 ++++++++++++++++++++++++++++- config/app.rb | 3 + config/db/seeds/champion.rb | 14 +- config/db/seeds/evo.rb | 40 +++--- config/db/seeds/rare.rb | 24 ++-- 7 files changed, 251 insertions(+), 47 deletions(-) diff --git a/app/actions/decks/generate.rb b/app/actions/decks/generate.rb index ad7ba48..8feadec 100644 --- a/app/actions/decks/generate.rb +++ b/app/actions/decks/generate.rb @@ -7,6 +7,8 @@ module ClashDeckGenerator2 include Deps[view: "views.home.index"] def handle(_req, res) + res.headers.delete("Content-Security-Policy") + roles_repo = ClashDeckGenerator2::Services::CardRolesRepository.new cards_repo = ClashDeckGenerator2::Repos::CardsRepo.new diff --git a/app/actions/home/index.rb b/app/actions/home/index.rb index ee78d0d..0af8231 100644 --- a/app/actions/home/index.rb +++ b/app/actions/home/index.rb @@ -4,7 +4,8 @@ module ClashDeckGenerator2 module Actions module Home class Index < ClashDeckGenerator2::Action - def handle(_req, _res) + def handle(_req, res) + res.headers.delete("Content-Security-Policy") end end end diff --git a/app/templates/layouts/app.html.erb b/app/templates/layouts/app.html.erb index b27c83f..6f830e3 100644 --- a/app/templates/layouts/app.html.erb +++ b/app/templates/layouts/app.html.erb @@ -1,11 +1,209 @@ - + - - - Clash deck generator2 + + + <%= content_for(:title) { "Генератор колод — Clash Royale" } %> + + <%# Tailwind CSS v4 via CDN %> + + + <%# Monrope font via CDN %> + + + + + - - <%= yield %> + + + + <%# ── Верхняя строка с вкладками (имитация VS Code) ── %> +
+
+
+ + + + + deck_builder.rb +
+
+ + + + cards.json +
+
+
+ + <%# ── Основная область ── %> +
+ <%= yield %> +
+ + <%# ── Строка состояния ── %> +
+
+ + + + + Clash Royale + + UTF-8 + ERB +
+
+ Hanami 2.3 + Tailwind 4 +
+
+ - \ No newline at end of file + diff --git a/config/app.rb b/config/app.rb index 75462d1..361782e 100644 --- a/config/app.rb +++ b/config/app.rb @@ -4,5 +4,8 @@ require "hanami" module ClashDeckGenerator2 class App < Hanami::App + config do + config.actions.content_security_policy = false + end end end \ No newline at end of file diff --git a/config/db/seeds/champion.rb b/config/db/seeds/champion.rb index 3cfea14..a1c112f 100644 --- a/config/db/seeds/champion.rb +++ b/config/db/seeds/champion.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true CHAMPION_CARDS = [ - { name: "Little Prince", elixir_cost: 3, rarity: "champion", type: "troop", is_meta: 1 }, - { name: "Golden Knight", elixir_cost: 4, rarity: "champion", type: "troop", is_meta: 1 }, + { name: "Little Prince", elixir_cost: 3, rarity: "champion", type: "troop", is_meta: 0 }, + { name: "Golden Knight", elixir_cost: 4, rarity: "champion", type: "troop", is_meta: 0 }, { name: "Skeleton King", elixir_cost: 4, rarity: "champion", type: "troop", is_meta: 1 }, - { name: "Mighty Miner", elixir_cost: 4, rarity: "champion", type: "troop", is_meta: 1 }, - { name: "Archer Queen", elixir_cost: 5, rarity: "champion", type: "troop", is_meta: 1 }, - { name: "Goblinstein", elixir_cost: 5, rarity: "champion", type: "troop", is_meta: 0 }, - { name: "Monk", elixir_cost: 5, rarity: "champion", type: "troop", is_meta: 1 }, + { name: "Mighty Miner", elixir_cost: 4, rarity: "champion", type: "troop", is_meta: 0 }, + { name: "Archer Queen", elixir_cost: 5, rarity: "champion", type: "troop", is_meta: 0 }, + { name: "Goblinstein", elixir_cost: 5, rarity: "champion", type: "troop", is_meta: 1 }, + { name: "Monk", elixir_cost: 5, rarity: "champion", type: "troop", is_meta: 0 }, { name: "Boss Bandit", elixir_cost: 6, rarity: "champion", type: "troop", is_meta: 0 } -].freeze \ No newline at end of file + ].freeze \ No newline at end of file diff --git a/config/db/seeds/evo.rb b/config/db/seeds/evo.rb index 688d82b..aa2c622 100644 --- a/config/db/seeds/evo.rb +++ b/config/db/seeds/evo.rb @@ -4,38 +4,38 @@ EVOLUTION_CARDS = [ { name: "Archers Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 1 }, { name: "Baby Dragon Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 1 }, { name: "Barbarians Evolution", elixir_cost: 5, rarity: "evolution", type: "troop", is_meta: 0 }, - { name: "Battle Ram Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 0 }, + { name: "Battle Ram Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 1 }, { name: "Bats Evolution", elixir_cost: 2, rarity: "evolution", type: "troop", is_meta: 0 }, - { name: "Bomber Evolution", elixir_cost: 2, rarity: "evolution", type: "troop", is_meta: 1 }, + { name: "Bomber Evolution", elixir_cost: 2, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Cannon Evolution", elixir_cost: 3, rarity: "evolution", type: "building", is_meta: 0 }, { name: "Dart Goblin Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 0 }, - { name: "Electro Dragon Evolution", elixir_cost: 5, rarity: "evolution", type: "troop", is_meta: 1 }, + { name: "Electro Dragon Evolution", elixir_cost: 5, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Executioner Evolution", elixir_cost: 5, rarity: "evolution", type: "troop", is_meta: 0 }, - { name: "Firecracker Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 1 }, + { name: "Firecracker Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Furnace Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 0 }, { name: "Giant Snowball Evolution", elixir_cost: 2, rarity: "evolution", type: "spell", is_meta: 0 }, - { name: "Goblin Barrel Evolution", elixir_cost: 3, rarity: "evolution", type: "spell", is_meta: 1 }, - { name: "Goblin Cage Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 0 }, - { name: "Goblin Drill Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 1 }, + { name: "Goblin Barrel Evolution", elixir_cost: 3, rarity: "evolution", type: "spell", is_meta: 0 }, + { name: "Goblin Cage Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 1 }, + { name: "Goblin Drill Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 0 }, { name: "Goblin Giant Evolution", elixir_cost: 6, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Hunter Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 0 }, - { name: "Ice Spirit Evolution", elixir_cost: 1, rarity: "evolution", type: "troop", is_meta: 1 }, + { name: "Ice Spirit Evolution", elixir_cost: 1, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Inferno Dragon Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 1 }, - { name: "Knight Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 1 }, - { name: "Lumberjack Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 0 }, - { name: "Mega Knight Evolution", elixir_cost: 7, rarity: "evolution", type: "troop", is_meta: 1 }, - { name: "Mortar Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 0 }, - { name: "Musketeer Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 1 }, - { name: "P.E.K.K.A Evolution", elixir_cost: 7, rarity: "evolution", type: "troop", is_meta: 1 }, - { name: "Royal Ghost Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 1 }, + { name: "Knight Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 0 }, + { name: "Lumberjack Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 1 }, + { name: "Mega Knight Evolution", elixir_cost: 7, rarity: "evolution", type: "troop", is_meta: 0 }, + { name: "Mortar Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 1 }, + { name: "Musketeer Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 0 }, + { name: "P.E.K.K.A Evolution", elixir_cost: 7, rarity: "evolution", type: "troop", is_meta: 0 }, + { name: "Royal Ghost Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Royal Giant Evolution", elixir_cost: 6, rarity: "evolution", type: "troop", is_meta: 1 }, { name: "Royal Hogs Evolution", elixir_cost: 5, rarity: "evolution", type: "troop", is_meta: 0 }, - { name: "Royal Recruits Evolution", elixir_cost: 7, rarity: "evolution", type: "troop", is_meta: 0 }, + { name: "Royal Recruits Evolution", elixir_cost: 7, rarity: "evolution", type: "troop", is_meta: 1 }, { name: "Skeleton Army Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 1 }, - { name: "Skeleton Barrel Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 0 }, - { name: "Skeletons Evolution", elixir_cost: 1, rarity: "evolution", type: "troop", is_meta: 1 }, - { name: "Tesla Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 1 }, - { name: "Valkyrie Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 1 }, + { name: "Skeleton Barrel Evolution", elixir_cost: 3, rarity: "evolution", type: "troop", is_meta: 1 }, + { name: "Skeletons Evolution", elixir_cost: 1, rarity: "evolution", type: "troop", is_meta: 0 }, + { name: "Tesla Evolution", elixir_cost: 4, rarity: "evolution", type: "building", is_meta: 0 }, + { name: "Valkyrie Evolution", elixir_cost: 4, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Wall Breakers Evolution", elixir_cost: 2, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Witch Evolution", elixir_cost: 5, rarity: "evolution", type: "troop", is_meta: 0 }, { name: "Wizard Evolution", elixir_cost: 5, rarity: "evolution", type: "troop", is_meta: 0 }, diff --git a/config/db/seeds/rare.rb b/config/db/seeds/rare.rb index 25aed0d..eb13e6c 100644 --- a/config/db/seeds/rare.rb +++ b/config/db/seeds/rare.rb @@ -2,37 +2,37 @@ RARE_CARDS = [ # Юниты - { name: "Heal Spirit", elixir_cost: 1, rarity: "rare", type: "troop", is_meta: 0 }, + { name: "Heal Spirit", elixir_cost: 1, rarity: "rare", type: "troop", is_meta: 1 }, { name: "Ice Golem", elixir_cost: 2, rarity: "rare", type: "troop", is_meta: 0 }, - { name: "Suspicious Bush", elixir_cost: 2, rarity: "rare", type: "troop", is_meta: 0 }, + { name: "Suspicious Bush", elixir_cost: 2, rarity: "rare", type: "troop", is_meta: 1 }, { name: "Mega Minion", elixir_cost: 3, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Dart Goblin", elixir_cost: 3, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Elixir Golem", elixir_cost: 3, rarity: "rare", type: "troop", is_meta: 0 }, - { name: "Mini P.E.K.K.A", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 1 }, - { name: "Musketeer", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 1 }, - { name: "Valkyrie", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 1 }, + { name: "Mini P.E.K.K.A", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, + { name: "Musketeer", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, + { name: "Valkyrie", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Battle Ram", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, - { name: "Hog Rider", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 1 }, + { name: "Hog Rider", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Battle Healer", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Goblin Demolisher", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Giant", elixir_cost: 5, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Wizard", elixir_cost: 5, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Royal Hogs", elixir_cost: 5, rarity: "rare", type: "troop", is_meta: 0 }, { name: "Three Musketeers", elixir_cost: 9, rarity: "rare", type: "troop", is_meta: 0 }, - { name: "Zappies", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, + { name: "Zappies", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 1 }, { name: "Furnace", elixir_cost: 4, rarity: "rare", type: "troop", is_meta: 0 }, # Заклинания - { name: "Earthquake", elixir_cost: 3, rarity: "rare", type: "spell", is_meta: 1 }, + { name: "Earthquake", elixir_cost: 3, rarity: "rare", type: "spell", is_meta: 0 }, { name: "Fireball", elixir_cost: 4, rarity: "rare", type: "spell", is_meta: 1 }, { name: "Rocket", elixir_cost: 6, rarity: "rare", type: "spell", is_meta: 0 }, # Здания - { name: "Tombstone", elixir_cost: 3, rarity: "rare", type: "building", is_meta: 0 }, + { name: "Tombstone", elixir_cost: 3, rarity: "rare", type: "building", is_meta: 1 }, { name: "Goblin Cage", elixir_cost: 4, rarity: "rare", type: "building", is_meta: 0 }, - { name: "Goblin Hut", elixir_cost: 5, rarity: "rare", type: "building", is_meta: 0 }, + { name: "Goblin Hut", elixir_cost: 5, rarity: "rare", type: "building", is_meta: 1 }, { name: "Bomb Tower", elixir_cost: 4, rarity: "rare", type: "building", is_meta: 0 }, - { name: "Inferno Tower", elixir_cost: 5, rarity: "rare", type: "building", is_meta: 1 }, + { name: "Inferno Tower", elixir_cost: 5, rarity: "rare", type: "building", is_meta: 0 }, { name: "Barbarian Hut", elixir_cost: 6, rarity: "rare", type: "building", is_meta: 0 }, - { name: "Elixir Collector", elixir_cost: 6, rarity: "rare", type: "building", is_meta: 0 } + { name: "Elixir Collector", elixir_cost: 6, rarity: "rare", type: "building", is_meta: 1 } ].freeze \ No newline at end of file