From 5cbc48b9a0ed933e64f646e648a5c1726516cd8d Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Mon, 23 Aug 2021 00:52:23 -0400 Subject: [PATCH] add team picker --- app/controllers/pages_controller.rb | 33 +++++++++++++++++-- app/models/player.rb | 5 +++ app/views/layouts/application.html.erb | 3 +- app/views/pages/index.html.erb | 14 +------- app/views/pages/teampicker.html.erb | 10 ++++++ app/views/players/edit.html.erb | 2 +- app/views/players/index.html.erb | 3 +- config/routes.rb | 1 + ...0916_set_player_strikes_default_to_zero.rb | 5 +++ 9 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 app/views/pages/teampicker.html.erb create mode 100644 db/migrate/20210823030916_set_player_strikes_default_to_zero.rb diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 8801654..e3838d2 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -1,8 +1,35 @@ class PagesController < ApplicationController def index @players = Player.all - - group_size = Player.count - @groups = Player.order(Arel.sql("RANDOM()")).each_slice end + + def teampicker + @groups = maketeams + end + + private + def random + Player.where("strikes < 4").order(Arel.sql("RANDOM()")) + end + + def maketeams + r = random.to_a + + case Player.count { |p| p.active? } + when 5 + [r.shift(3), r.shift(2)] + when 6 + r.each_slice(3) + when 9 + r.each_slice(3) + when 10 + [r.shift(4), r.shift(3), r.shift(3)] + when 13 + [r.shift(4), r.shift(3), r.shift(3), r.shift(3)] + when 14 + [r.shift(4), r.shift(4), r.shift(3), r.shift(3)] + else + r.each_slice(4) + end + end end diff --git a/app/models/player.rb b/app/models/player.rb index 1bc55b4..fe3ffcb 100644 --- a/app/models/player.rb +++ b/app/models/player.rb @@ -1,2 +1,7 @@ class Player < ApplicationRecord + validates :name, presence: true + + def active? + self.strikes < 4 && self.paid + end end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index f5f0f2b..48b1f4f 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -15,7 +15,8 @@ <%= link_to "Home", root_path %> ~ <%= link_to "Tables", machines_path %> ~ <%= link_to "Players", players_path %> ~ - <%= link_to "Pick Random", controller: "machines", action: "random" %> + <%= link_to "Pick Table", controller: "machines", action: "random" %> ~ + <%= link_to "Pick Teams", controller: "pages", action: "teampicker" %>
diff --git a/app/views/pages/index.html.erb b/app/views/pages/index.html.erb index e53eece..7bac76b 100644 --- a/app/views/pages/index.html.erb +++ b/app/views/pages/index.html.erb @@ -10,22 +10,10 @@ <% @players.order("strikes").each do |player| %> - <%= player.name %> + <%= link_to player.name, edit_player_path(player) %> <%= player.paid %> <%= player.strikes %> <% end %> - -

teampicker

- -<% @players.order(Arel.sql("RANDOM()")).each_slice(@players.count % 4 == 0 ? 4 : 3).each.with_index(1) do |slice, i| %> -

Team <%= i %>

- -<% end %> - diff --git a/app/views/pages/teampicker.html.erb b/app/views/pages/teampicker.html.erb new file mode 100644 index 0000000..b0066cb --- /dev/null +++ b/app/views/pages/teampicker.html.erb @@ -0,0 +1,10 @@ +

teampicker

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

Team <%= i %>

+ +<% end %> diff --git a/app/views/players/edit.html.erb b/app/views/players/edit.html.erb index 4c30fc1..797c846 100644 --- a/app/views/players/edit.html.erb +++ b/app/views/players/edit.html.erb @@ -1,4 +1,4 @@ -

Edit Player

+

Edit <%= @player.name %>

<%= render "form", machine: @player %> diff --git a/app/views/players/index.html.erb b/app/views/players/index.html.erb index cedaad3..67717e0 100644 --- a/app/views/players/index.html.erb +++ b/app/views/players/index.html.erb @@ -1,9 +1,10 @@

Pinball Players

+

<%= @players.count %> available players

diff --git a/config/routes.rb b/config/routes.rb index 895a87c..11ba12b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,6 @@ Rails.application.routes.draw do root 'pages#index' + get 'teampicker', to: 'pages#teampicker' get 'random', to: 'machines#random' resources :machines resources :players diff --git a/db/migrate/20210823030916_set_player_strikes_default_to_zero.rb b/db/migrate/20210823030916_set_player_strikes_default_to_zero.rb new file mode 100644 index 0000000..ed0648c --- /dev/null +++ b/db/migrate/20210823030916_set_player_strikes_default_to_zero.rb @@ -0,0 +1,5 @@ +class SetPlayerStrikesDefaultToZero < ActiveRecord::Migration[6.0] + def change + change_column_default :players, :strikes, from: nil, to: 0 + end +end