Commit 7144810

mo khan <mo@mokhan.ca>
2015-05-30 19:09:08
pass program through when parsing the backup file.
1 parent 2bfec3c
app/controllers/training_sessions_controller.rb
@@ -7,7 +7,10 @@ class TrainingSessionsController < ApplicationController
   end
 
   def upload
-    ProcessBackupJob.perform_later(current_user, storage.store(params[:backup]))
+    ProcessBackupJob.perform_later(current_user,
+                                   storage.store(params[:backup]),
+                                   Program.stronglifts
+                                  )
     redirect_to dashboard_path, notice: t(".success")
   end
 
app/jobs/process_backup_job.rb
@@ -2,12 +2,12 @@ class ProcessBackupJob < ActiveJob::Base
   WORKOUTS_SQL = "select * from workouts"
   queue_as :default
 
-  def perform(user, backup_file)
+  def perform(user, backup_file, program)
     tmp_dir do |dir|
       `unzip #{backup_file} -d #{dir}`
       database(dir) do |db|
         db.execute(WORKOUTS_SQL) do |row|
-          user.training_sessions.create_workout_from(map_from(row))
+          user.training_sessions.create_workout_from(map_from(row), program)
         end
       end
     end
app/models/program.rb
@@ -1,4 +1,5 @@
 class Program < ActiveRecord::Base
+  STRONG_LIFTS="StrongLifts 5×5"
   has_many :exercises, through: :workouts
   has_many :workouts
   before_save :save_slug
@@ -9,7 +10,7 @@ class Program < ActiveRecord::Base
 
   class << self
     def stronglifts
-      @stronglifts ||= Program.find_by(name: "StrongLifts 5×5")
+      Program.find_by(name: STRONG_LIFTS)
     end
   end
 
app/models/training_session.rb
@@ -3,7 +3,7 @@ class TrainingSession < ActiveRecord::Base
   belongs_to :workout
   has_many :exercise_sessions
 
-  def self.create_workout_from(workout_row, program: Program.stronglifts)
+  def self.create_workout_from(workout_row, program)
     transaction do
       workout = program.workouts.find_by(name: workout_row.workout)
       matching_workouts = where(occurred_at: workout_row.date)
spec/controllers/training_sessions_controller_spec.rb
@@ -19,6 +19,7 @@ describe TrainingSessionsController do
   end
 
   describe "#upload" do
+    include_context "stronglifts_program"
     let(:backup_file) { fixture_file_upload("android-backup.stronglifts") }
 
     before :each do
spec/jobs/process_backup_job_spec.rb
@@ -9,7 +9,7 @@ describe ProcessBackupJob, type: :job do
       let(:backup_file) { Rails.root.join("spec", "fixtures", "android-backup.stronglifts").to_s }
 
       it "adds each workout to the list of training sessions for the user" do
-        subject.perform(user, backup_file)
+        subject.perform(user, backup_file, program)
 
         expect(user.training_sessions.count).to eql(31)
       end
spec/models/program_spec.rb
@@ -1,9 +1,9 @@
-require 'rails_helper'
+require "rails_helper"
 
 describe Program do
-  it 'saves a slug' do
-    program = create(:program, name: 'Strong Lifts 5x5')
-    expect(program.slug).to eql('strong-lifts-5x5')
+  it "saves a slug" do
+    program = create(:program, name: "Strong Lifts 5x5")
+    expect(program.slug).to eql("strong-lifts-5x5")
   end
 
   describe ".stronglifts" do
spec/models/training_session_spec.rb
@@ -35,7 +35,7 @@ describe TrainingSession, type: :model do
     end
 
     it 'creates a new workout' do
-      training_session = user.training_sessions.create_workout_from(workout_row)
+      training_session = user.training_sessions.create_workout_from(workout_row, program)
 
       expect(training_session).to be_persisted
       expect(training_session.occurred_at).to eql(workout_row.date)
@@ -70,8 +70,8 @@ describe TrainingSession, type: :model do
     end
 
     it 'excludes items that have already been imported' do
-      training_session = user.training_sessions.create_workout_from(workout_row)
-      expect(user.training_sessions.create_workout_from(workout_row)).to eql(training_session)
+      training_session = user.training_sessions.create_workout_from(workout_row, program)
+      expect(user.training_sessions.create_workout_from(workout_row, program)).to eql(training_session)
     end
   end
 end