summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gay <eapoems@riseup.net>2023-10-30 02:26:25 -0400
committerDavid Gay <eapoems@riseup.net>2023-10-30 02:26:25 -0400
commit4c4b9b78e2a88b20680f3bf7b4cfcbc3da8de533 (patch)
treee385302e16d5da1b54c162860af4f3a7346c7d1e
parent13df3e5aadae04b322bff4cb0279b299e2c92a41 (diff)
Checkpoint creation
-rw-r--r--app/controllers/checkpoints_controller.rb27
-rw-r--r--app/helpers/checkpoints_helper.rb2
-rw-r--r--app/views/checkpoints/new.html.erb31
-rw-r--r--app/views/runs/show.html.erb11
-rw-r--r--config/routes.rb4
-rw-r--r--test/controllers/checkpoints_controller_test.rb7
6 files changed, 81 insertions, 1 deletions
diff --git a/app/controllers/checkpoints_controller.rb b/app/controllers/checkpoints_controller.rb
new file mode 100644
index 0000000..94df2c3
--- /dev/null
+++ b/app/controllers/checkpoints_controller.rb
@@ -0,0 +1,27 @@
+class CheckpointsController < ApplicationController
+ before_action :set_run
+
+ def new
+ @checkpoint = @run.checkpoints.build
+ end
+
+ def create
+ @checkpoint = @run.checkpoints.build(checkpoint_params)
+ @checkpoint.user = current_user
+ if @checkpoint.save
+ redirect_to run_path(@run), notice: "Saved checkpoint."
+ else
+ render :new, status: :unprocessable_entity
+ end
+ end
+
+protected
+
+ def checkpoint_params
+ params.require(:checkpoint).permit(:title, :description, :save_file)
+ end
+
+ def set_run
+ @run = Run.find(params[:run_id])
+ end
+end
diff --git a/app/helpers/checkpoints_helper.rb b/app/helpers/checkpoints_helper.rb
new file mode 100644
index 0000000..421e4aa
--- /dev/null
+++ b/app/helpers/checkpoints_helper.rb
@@ -0,0 +1,2 @@
+module CheckpointsHelper
+end
diff --git a/app/views/checkpoints/new.html.erb b/app/views/checkpoints/new.html.erb
new file mode 100644
index 0000000..fc61e9f
--- /dev/null
+++ b/app/views/checkpoints/new.html.erb
@@ -0,0 +1,31 @@
+<%= form_with model: [@run, @checkpoint] do |f| %>
+ <div>
+ <%= f.label :title %>
+ <%= f.text_field :title %>
+ </div>
+
+ <div>
+ <%= f.label :description %>
+ <%= f.text_area :description %>
+ </div>
+
+ <div>
+ <%= f.label :save_file %>
+ <%= f.file_field :save_file %>
+ </div>
+
+ <div>
+ <%= f.submit "Submit checkpoint" %>
+ </div>
+
+ <% if @checkpoint.errors.any? %>
+ <div>
+ <p><%= pluralize(@checkpoint.errors.count, "error") %> prohibited this checkpoint from being saved:</p>
+ <ul>
+ <% @checkpoint.errors.full_messages.each do |message| %>
+ <li><%= message %></li>
+ <% end %>
+ </ul>
+ </div>
+ <% end %>
+<% end %>
diff --git a/app/views/runs/show.html.erb b/app/views/runs/show.html.erb
index adb41e4..11fdd12 100644
--- a/app/views/runs/show.html.erb
+++ b/app/views/runs/show.html.erb
@@ -2,3 +2,14 @@
<p class="subtitle"><%= @run.game.title %></p>
<p>Run started by: <%= @run.user.email %></p>
+
+<%= link_to "New checkpoint", new_run_checkpoint_path(@run) %>
+
+<h2 class="text-xl">Checkpoints</h2>
+
+<ul class="list-disc">
+ <% @run.checkpoints.each do |checkpoint| %>
+ <li><%= checkpoint.created_at %>
+ <%= link_to "[save file]", rails_blob_path(checkpoint.save_file, disposition: "attachment") %></li>
+ <% end %>
+</ul>
diff --git a/config/routes.rb b/config/routes.rb
index a267aa8..c601180 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -9,5 +9,7 @@ Rails.application.routes.draw do
# Defines the root path route ("/")
root "home#index"
- resources :runs
+ resources :runs do
+ resources :checkpoints
+ end
end
diff --git a/test/controllers/checkpoints_controller_test.rb b/test/controllers/checkpoints_controller_test.rb
new file mode 100644
index 0000000..c4459d2
--- /dev/null
+++ b/test/controllers/checkpoints_controller_test.rb
@@ -0,0 +1,7 @@
+require "test_helper"
+
+class CheckpointsControllerTest < ActionDispatch::IntegrationTest
+ # test "the truth" do
+ # assert true
+ # end
+end