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 %>
-
- <% slice.each do |player| %>
- - <%= player.name %>
- <% end %>
-
-<% 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 %>
+
+ <% slice.each do |player| %>
+ - <%= link_to player.name, edit_player_path(player) %>
+ <% end %>
+
+<% 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
<% @players.each do |player| %>
-
- <%= link_to player.name, player %>
+ <%= link_to player.name, edit_player_path(player) %>
<% end %>
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