about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2021-08-23 00:52:23 -0400
committerBen Harris <ben@tilde.team>2021-08-23 00:52:23 -0400
commit5cbc48b9a0ed933e64f646e648a5c1726516cd8d (patch)
treea2900001dd1072165ae470964dc799555a9ff9c6 /app
parent9a2d1bbf9c07506b4de3b34788111e7c30fb262c (diff)
add team picker
Diffstat (limited to 'app')
-rw-r--r--app/controllers/pages_controller.rb31
-rw-r--r--app/models/player.rb5
-rw-r--r--app/views/layouts/application.html.erb3
-rw-r--r--app/views/pages/index.html.erb14
-rw-r--r--app/views/pages/teampicker.html.erb10
-rw-r--r--app/views/players/edit.html.erb2
-rw-r--r--app/views/players/index.html.erb3
7 files changed, 50 insertions, 18 deletions
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
+  end
 
-    group_size = Player.count
-    @groups = Player.order(Arel.sql("RANDOM()")).each_slice
+  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" %>
       </nav>
       <hr>
 
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 @@
   <tbody>
     <% @players.order("strikes").each do |player| %>
       <tr>
-        <td><%= player.name %></td>
+        <td><%= link_to player.name, edit_player_path(player) %></td>
         <td><%= player.paid %></td>
         <td><%= player.strikes %></td>
       </tr>
     <% end %>
   </tbody>
 </table>
-
-<h2>teampicker</h2>
-
-<% @players.order(Arel.sql("RANDOM()")).each_slice(@players.count % 4 == 0 ? 4 : 3).each.with_index(1) do |slice, i| %>
-  <h3>Team <%= i %></h3>
-  <ul>
-  <% slice.each do |player| %>
-    <li><%= player.name %></li>
-  <% end %>
-  </ul>
-<% 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 @@
+<h2>teampicker</h2>
+
+<% @groups.each.with_index(1) do |slice, i| %>
+  <h3>Team <%= i %></h3>
+  <ul>
+  <% slice.each do |player| %>
+    <li><%= link_to player.name, edit_player_path(player) %></li>
+  <% end %>
+  </ul>
+<% 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 @@
-<h1>Edit Player</h1>
+<h1>Edit <%= @player.name %></h1>
 
 <%= 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 @@
 <h1>Pinball Players</h1>
 
+<p><%= @players.count %> available players</p>
 <ul>
   <% @players.each do |player| %>
     <li>
-      <%= link_to player.name, player %>
+      <%= link_to player.name, edit_player_path(player) %>
     </li>
   <% end %>
 </ul>