Commit 42c8575

mo khan <mo@mokhan.ca>
2015-05-22 04:03:18
add seed data and use multipart form to upload backup file.
1 parent f2ad4cd
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