Commit 9c79f5e

mo khan <mo@mokhan.ca>
2016-06-11 17:18:09
extract exercise set model.
1 parent 2c60c73
app/assets/javascripts/templates/training_session_view.ractive
@@ -1,17 +1,7 @@
 <div class="row">
   {{#each training_session.exercises}}
   <div class="panel small-12 columns">
-    <div class="row">
-      <div class="small-6 columns">
-        {{name}}
-      </div>
-      <div class="small-6 columns">
-        <p class="text-right">
-        {{sets}}x{{repetitions}} {{target_weight}}lb
-        </p>
-      </div>
-    </div>
-
+    {{name}}
     {{#if completed}}
       <div class="row">
         <div class="small-12 columns">
@@ -23,7 +13,10 @@
         <div class="small-12 columns">
           <p class="text-center">
             {{#each reps}}
-              <button on-click="updateProgress" class="button small round {{status}}">{{completed}}</button>
+              <button on-click="updateProgress" class="button small round {{status}}">
+                {{completed}}
+              </button>
+              @ {{weight}} lb
             {{/each}}
           </p>
         </div>
app/models/exercise_session.rb
@@ -2,4 +2,10 @@ class ExerciseSession < ActiveRecord::Base
   belongs_to :training_session
   belongs_to :exercise_workout
   has_one :exercise, through: :exercise_workout
+  has_many :exercise_sets, dependent: :destroy
+  delegate :name, to: :exercise
+
+  def sets
+    exercise_sets
+  end
 end
app/models/exercise_set.rb
@@ -0,0 +1,3 @@
+class ExerciseSet < ActiveRecord::Base
+  belongs_to :exercise_session
+end
app/models/training_session.rb
@@ -2,7 +2,7 @@ class TrainingSession < ActiveRecord::Base
   belongs_to :user
   belongs_to :workout
   has_one :program, through: :workout
-  has_many :exercise_sessions, dependent: :destroy
+  has_many :exercise_sessions, -> { order(:created_at) }, dependent: :destroy
   has_many :exercises, through: :exercise_sessions
   accepts_nested_attributes_for :exercise_sessions
 
app/views/training_sessions/_training_session.jbuilder
@@ -1,14 +1,13 @@
 json.id training_session.id
 json.body_weight training_session.body_weight
 json.workout_name training_session.workout.name
-json.exercises training_session.workout.exercise_workouts do |exercise|
+json.exercises training_session.exercise_sessions do |exercise|
   json.id exercise.exercise.id
   json.name exercise.name
-  json.sets exercise.sets
-  json.repetitions exercise.repetitions
-  json.reps training_session.progress_for(exercise.exercise).try(:sets) || exercise.sets.times.map { |x| 0 } do |completed_reps|
-    json.target exercise.repetitions
-    json.completed completed_reps.to_i
+  json.reps exercise.sets do |set|
+    json.weight set.target_weight
+    json.target set.target_repetitions
+    json.completed set.actual_repetitions
   end
   json.target_weight current_user.next_weight_for(exercise.exercise)
 end
db/migrate/20160611165128_create_exercise_sets.rb
@@ -0,0 +1,12 @@
+class CreateExerciseSets < ActiveRecord::Migration
+  def change
+    create_table :exercise_sets, id: :uuid do |t|
+      t.uuid :exercise_session_id, null: false
+      t.integer :target_repetitions
+      t.integer :actual_repetitions
+      t.float :target_weight
+
+      t.timestamps null: false
+    end
+  end
+end
db/migrate/20160611165543_migrate_to_exercise_sets.rb
@@ -0,0 +1,19 @@
+class MigrateToExerciseSets < ActiveRecord::Migration
+  def up
+    ExerciseSession.find_each do |exercise_session|
+      target_reps = exercise_session.exercise_workout.repetitions
+      exercise_session.actual_sets.each do |n|
+        say "Creating set for: #{exercise_session.name}: set: #{n}"
+        exercise_session.exercise_sets.create!(
+          actual_repetitions: n,
+          target_repetitions: target_reps,
+          target_weight: exercise_session.target_weight,
+        )
+      end
+    end
+  end
+
+  def down
+    ExerciseSet.delete_all
+  end
+end
db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20160611152357) do
+ActiveRecord::Schema.define(version: 20160611165543) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -28,6 +28,15 @@ ActiveRecord::Schema.define(version: 20160611152357) do
     t.integer  "target_repetitions",  default: 5,  null: false
   end
 
+  create_table "exercise_sets", id: :uuid, default: "uuid_generate_v4()", force: :cascade do |t|
+    t.uuid     "exercise_session_id", null: false
+    t.integer  "target_repetitions"
+    t.integer  "actual_repetitions"
+    t.float    "target_weight"
+    t.datetime "created_at",          null: false
+    t.datetime "updated_at",          null: false
+  end
+
   create_table "exercise_workouts", id: :uuid, default: "uuid_generate_v4()", force: :cascade do |t|
     t.uuid     "exercise_id", null: false
     t.uuid     "workout_id",  null: false