From c5b9fe77a8a0e1c2e6a051b700c5a5d4b98ff6fb Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Sat, 15 Jan 2022 14:08:29 -0500 Subject: add randomizer --- app/controllers/machines_controller.rb | 4 ++-- app/controllers/pages_controller.rb | 35 ++++++++++++++++++++++++++++++++++ app/controllers/players_controller.rb | 4 ++-- app/helpers/pages_helper.rb | 3 +++ app/views/layouts/application.html.erb | 6 ++++-- app/views/machines/index.html.erb | 3 ++- app/views/machines/show.html.erb | 4 +--- app/views/pages/index.html.erb | 2 ++ app/views/pages/randomize.html.erb | 10 ++++++++++ app/views/players/index.html.erb | 3 ++- app/views/players/show.html.erb | 4 +--- 11 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 app/controllers/pages_controller.rb create mode 100644 app/helpers/pages_helper.rb create mode 100644 app/views/pages/index.html.erb create mode 100644 app/views/pages/randomize.html.erb (limited to 'app') diff --git a/app/controllers/machines_controller.rb b/app/controllers/machines_controller.rb index 3ef5893..33dcd3b 100644 --- a/app/controllers/machines_controller.rb +++ b/app/controllers/machines_controller.rb @@ -25,7 +25,7 @@ class MachinesController < ApplicationController respond_to do |format| if @machine.save - format.html { redirect_to machines_url, notice: 'Machine was successfully created.' } + format.html { redirect_to machines_url, notice: "Added #{@machine.name} #{@machine.edition}." } format.json { render :show, status: :created, location: @machine } else format.html { render :new, status: :unprocessable_entity } @@ -38,7 +38,7 @@ class MachinesController < ApplicationController def update respond_to do |format| if @machine.update(machine_params) - format.html { redirect_to machines_url, notice: 'Machine was successfully updated.' } + format.html { redirect_to machines_url, notice: "Updated #{@machine.name} #{@machine.edition}." } format.json { render :show, status: :ok, location: @machine } else format.html { render :show, status: :unprocessable_entity } diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb new file mode 100644 index 0000000..91b5ebc --- /dev/null +++ b/app/controllers/pages_controller.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class PagesController < ApplicationController + def index; end + + def randomize + @groups = make_teams + @machines = Machine.limit(@groups.size).order(Arel.sql('RANDOM()')) + end + + private + + def make_teams + r = Player.order(Arel.sql('RANDOM()')).to_a + + teams = [] + until r.empty? + if (r.size % 4).zero? + teams << r.shift(4) + elsif r.size.even? && (r.size > 2) + teams << r.shift(3) + teams << r.shift(3) + elsif (r.size % 3).zero? + teams << r.shift(3) + elsif r.size == 5 + teams << r.shift(3) + teams << r.shift(2) + else + teams << r.shift(4) + end + end + + teams.sort { |a, b| b.length <=> a.length } + end +end diff --git a/app/controllers/players_controller.rb b/app/controllers/players_controller.rb index 44034e5..cebe2a1 100644 --- a/app/controllers/players_controller.rb +++ b/app/controllers/players_controller.rb @@ -22,7 +22,7 @@ class PlayersController < ApplicationController respond_to do |format| if @player.save - format.html { redirect_to players_url, notice: 'Player was successfully created.' } + format.html { redirect_to players_url, notice: "Added #{@player.name}." } format.json { render :show, status: :created, location: @player } else format.html { render :new, status: :unprocessable_entity } @@ -35,7 +35,7 @@ class PlayersController < ApplicationController def update respond_to do |format| if @player.update(player_params) - format.html { redirect_to players_url, notice: 'Player was successfully updated.' } + format.html { redirect_to players_url, notice: "Updated #{@player.name}." } format.json { render :show, status: :ok, location: @player } else format.html { render :show, status: :unprocessable_entity } diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb new file mode 100644 index 0000000..b7429d2 --- /dev/null +++ b/app/helpers/pages_helper.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true +module PagesHelper +end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index a21e612..cc2f6c2 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -12,8 +12,10 @@ <%= yield %> diff --git a/app/views/machines/index.html.erb b/app/views/machines/index.html.erb index 2c99524..8237518 100644 --- a/app/views/machines/index.html.erb +++ b/app/views/machines/index.html.erb @@ -8,4 +8,5 @@ <% end %> -<%= link_to "New machine", new_machine_path %> +
+<%= link_to "Add a pin", new_machine_path %> diff --git a/app/views/machines/show.html.erb b/app/views/machines/show.html.erb index 7870783..19e5f19 100644 --- a/app/views/machines/show.html.erb +++ b/app/views/machines/show.html.erb @@ -3,7 +3,5 @@ <%= render "form", machine: @machine %>
- <%= link_to "Back to machines", machines_path %> - - <%= button_to "Destroy this machine", @machine, method: :delete %> + <%= button_to "Delete #{@machine.name}", @machine, method: :delete %>
diff --git a/app/views/pages/index.html.erb b/app/views/pages/index.html.erb new file mode 100644 index 0000000..809ea04 --- /dev/null +++ b/app/views/pages/index.html.erb @@ -0,0 +1,2 @@ +

Knockout

+

To start the tournament, add players and make sure that the pins are up to date. Then hit randomize to automatically pick teams!

diff --git a/app/views/pages/randomize.html.erb b/app/views/pages/randomize.html.erb new file mode 100644 index 0000000..1505ab5 --- /dev/null +++ b/app/views/pages/randomize.html.erb @@ -0,0 +1,10 @@ +

Randomize

+ +<% @groups.each.with_index do |slice, i| %> +

<%= @machines[i].name %> <%= @machines[i].edition %>

+
    + <% slice.each do |player| %> +
  1. <%= link_to player.name, player_path(player) %>
  2. + <% end %> +
+<% end %> diff --git a/app/views/players/index.html.erb b/app/views/players/index.html.erb index 5a2b9ef..c067483 100644 --- a/app/views/players/index.html.erb +++ b/app/views/players/index.html.erb @@ -8,4 +8,5 @@ <% end %> -<%= link_to "New player", new_player_path %> +
+<%= link_to "Add a player", new_player_path %> diff --git a/app/views/players/show.html.erb b/app/views/players/show.html.erb index 42dce9c..e031050 100644 --- a/app/views/players/show.html.erb +++ b/app/views/players/show.html.erb @@ -3,7 +3,5 @@ <%= render "form", player: @player %>
- <%= link_to "Back to players", players_path %> - - <%= button_to "Destroy this player", @player, method: :delete %> + <%= button_to "Delete #{@player.name}", @player, method: :delete %>
-- cgit 1.4.1