Commit 42c8575
Changed files (7)
app
controllers
views
training_sessions
db
spec
controllers
app/controllers/training_sessions_controller.rb
@@ -1,10 +1,13 @@
+require 'temporary_storage'
+
class TrainingSessionsController < ApplicationController
def index
@training_sessions = current_user.training_sessions
end
def upload
- ProcessBackupJob.perform_later(current_user, params[:backup])
+ temporary_storage = TemporaryStorage.new
+ ProcessBackupJob.perform_later(current_user, temporary_storage.store(params[:backup]))
redirect_to dashboard_path, notice: t('.success')
end
end
app/jobs/process_backup_job.rb
@@ -1,5 +1,5 @@
class ProcessBackupJob < ActiveJob::Base
- WORKOUTS_SQL="SELECT * FROM WORKOUTS;"
+ WORKOUTS_SQL="select * from workouts"
queue_as :default
def perform(user, backup_file)
app/views/training_sessions/index.html.erb
@@ -3,7 +3,7 @@
<div class="large-4 small-12 columns">
<div class="hide-for-small panel">
<div class="row">
- <%= form_tag(upload_training_sessions_path, method: :post) do %>
+ <%= form_tag(upload_training_sessions_path, method: :post, multipart: true) do %>
<div class="small-12 columns">
<label><%= t('.backup_file') %>
<%= file_field_tag :backup %>
db/seeds.rb
@@ -5,3 +5,19 @@
#
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
# Mayor.create(name: 'Emanuel', city: cities.first)
+program = Program.create!(name: "StrongLifts 5×5")
+squat = Exercise.create!(name: "Squat")
+bench_press = Exercise.create!(name: "Bench Press")
+barbell_row = Exercise.create!(name: "Barbell Row")
+overhead_press = Exercise.create!(name: "Overhead Press")
+deadlift = Exercise.create!(name: "Deadlift")
+
+workout_a = program.workouts.create(name: "A")
+workout_a.add_exercise(squat, sets: 5, repetitions: 5)
+workout_a.add_exercise(bench_press, sets: 5, repetitions: 5)
+workout_a.add_exercise(barbell_row, sets: 5, repetitions: 5)
+
+workout_b = program.workouts.create(name: "B")
+workout_b.add_exercise(squat, sets: 5, repetitions: 5)
+workout_b.add_exercise(overhead_press, sets: 5, repetitions: 5)
+workout_b.add_exercise(deadlift, sets: 1, repetitions: 5)
lib/temporary_storage.rb
@@ -0,0 +1,15 @@
+class TemporaryStorage
+ def store(file)
+ "#{tmp_dir}/#{file.original_filename}".tap do |new_path|
+ FileUtils.mv(file.path, new_path)
+ end
+ end
+
+ private
+
+ def tmp_dir
+ Rails.root.join("tmp/uploads/#{SecureRandom.uuid}").tap do |directory|
+ system "mkdir -p #{directory}"
+ end
+ end
+end
spec/controllers/training_sessions_controller_spec.rb
@@ -19,7 +19,7 @@ describe TrainingSessionsController do
end
describe "#upload" do
- let(:backup_file) { Rails.root.join("spec", "fixtures", "stronglifts.backup").to_s }
+ let(:backup_file) { fixture_file_upload("backup.stronglifts") }
before :each do
allow(ProcessBackupJob).to receive(:perform_later)
@@ -27,7 +27,7 @@ describe TrainingSessionsController do
it "uploads a new backup" do
post :upload, backup: backup_file
- expect(ProcessBackupJob).to have_received(:perform_later).with(user, backup_file)
+ expect(ProcessBackupJob).to have_received(:perform_later)
end
it "redirects to the dashboard" do
spec/lib/temporary_storage_spec.rb