Commit 7144810
Changed files (8)
app
controllers
models
spec
controllers
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