Commit b9daad6

mo khan <mo@mokhan.ca>
2016-06-23 04:25:40
WIP: hacking together js app.
1 parent 6738637
app/assets/javascripts/templates/exercise_view.ractive
@@ -1,3 +1,4 @@
+<!--
 <div class="panel small-12 columns">
   <div class="row">
     <div class="small-6 columns">
@@ -18,3 +19,4 @@
     </div>
   </div>
 </div>
+-->
app/assets/javascripts/templates/training_session_view.ractive
@@ -12,7 +12,7 @@
       <div class="row">
         <div class="small-12 columns">
           <p class="text-center">
-            {{#each reps}}
+            {{#each sets}}
               <button on-click="updateProgress" class="button small round {{status}}">
                 {{completed}}
               </button>
app/assets/javascripts/views/exercise_view.js.coffee
@@ -2,9 +2,5 @@
 class Stronglifters.ExerciseView extends Ractive
   template: RactiveTemplates["templates/exercise_view"]
   data:
-    name: ''
-    sets: 5
-    repeitions: 5
-    target_weight: 100
-    reps: [ ]
+    workout_name: ''
 
app/assets/javascripts/views/training_session_view.js.coffee
@@ -4,11 +4,12 @@ class Stronglifters.TrainingSessionView extends Ractive
   oninit: ->
     @on 'updateProgress', (event) -> @updateProgress(event)
     @on 'completeExercise', (event) -> @completeExercise(event.context)
-    @observe 'training_session.exercises.*.reps.*', (newValue, oldValue, keypath) ->
+    @observe 'training_session.exercises.*.sets.*', (newValue, oldValue, keypath) ->
       @refreshStatus(newValue, oldValue, keypath)
 
   updateProgress: (event) ->
-    if @get("#{event.keypath}.completed") == 0
+    completed = @get("#{event.keypath}.completed")
+    if completed == null || completed == 0
       @set("#{event.keypath}.completed", @get("#{event.keypath}.target"))
     else
       @subtract("#{event.keypath}.completed")
@@ -27,9 +28,10 @@ class Stronglifters.TrainingSessionView extends Ractive
     payload =
       training_session:
         exercise_id: exercise.id
-        weight: exercise.target_weight
-        sets: _.map exercise.reps, (rep) ->
-          rep.completed
+        sets: _.map exercise.sets, (set) ->
+          completed: set.completed
+          weight: exercise.target_weight
+    console.log(payload)
 
     $.ajax
       url: "/training_sessions/#{@get('training_session.id')}",
app/controllers/training_sessions_controller.rb
@@ -14,21 +14,23 @@ class TrainingSessionsController < ApplicationController
     @workout = current_user.next_workout
     @training_session = current_user.training_sessions.build(workout: @workout)
     @workout.exercise_workouts.each do |exercise|
-      @training_session.exercise_sessions.build(
-        exercise_workout: exercise,
-        #target_sets: exercise.sets,
-        #target_repetitions: exercise.repetitions,
-        #target_weight: current_user.next_weight_for(exercise.exercise)
-      )
+      exercise_session = @training_session.exercise_sessions.build(exercise_workout: exercise)
+      exercise.sets.times do
+        exercise_session.exercise_sets.build(
+          target_repetitions: exercise.repetitions,
+          target_weight: current_user.next_weight_for(exercise.exercise)
+        )
+      end
     end
   end
 
   def create
     secure_params = params.require(:training_session).permit(:workout_id, :body_weight, exercise_sessions_attributes: [
       :exercise_workout_id,
-      #:target_repetitions,
-      #:target_sets,
-      #:target_weight,
+      exercise_sets_attributes: [
+        :target_repetitions,
+        :target_weight,
+      ]
     ])
     workout = Workout.find(secure_params[:workout_id])
     training_session = current_user.begin_workout(
@@ -45,13 +47,18 @@ class TrainingSessionsController < ApplicationController
   end
 
   def update
-    secure_params = params.require(:training_session).permit(:exercise_id, :weight, sets: [])
+    #render json: params and return
+    secure_params = params.require(:training_session).permit(:exercise_id, :weight, sets: [
+      :weight,
+      :completed
+    ])
     @training_session = current_user.training_sessions.find(params[:id])
-    secure_params[:sets].each do |reps|
+    secure_params[:sets].each_with_index do |set, index|
       @training_session.train(
         Exercise.find(secure_params[:exercise_id]),
-        secure_params[:weight],
-        repetitions: reps,
+        set[:weight],
+        repetitions: set[:completed],
+        set: index
       )
     end
   end
app/models/exercise_session.rb
@@ -4,6 +4,7 @@ class ExerciseSession < ActiveRecord::Base
   has_one :exercise, through: :exercise_workout
   has_many :exercise_sets, dependent: :destroy
   delegate :name, to: :exercise
+  accepts_nested_attributes_for :exercise_sets
 
   def sets
     exercise_sets
app/views/training_sessions/_training_session.jbuilder
@@ -4,7 +4,7 @@ json.workout_name training_session.workout.name
 json.exercises training_session.exercise_sessions.order(:created_at) do |exercise|
   json.id exercise.exercise.id
   json.name exercise.name
-  json.reps exercise.sets do |set|
+  json.sets exercise.sets.order(:created_at) do |set|
     json.weight set.target_weight
     json.target set.target_repetitions
     json.completed set.actual_repetitions
app/views/training_sessions/edit.html.erb
@@ -1,5 +1,6 @@
 <div class="row">
   <div class="large-12 columns">
+<% render partial: 'edit.json.jbuilder', locals: { training_session: @training_session } %>;
     <div id="training-session-view"></div>
     <%= link_to t(:back_html), training_sessions_path %>
   </div>
app/views/training_sessions/new.html.erb
@@ -5,19 +5,32 @@
         <legend><%= TrainingSession.human_attribute_name(:body_weight) %></legend>
         <%= f.number_field :body_weight %>
       </fieldset>
-        <%= f.fields_for :exercise_sessions do |e| %>
+      <% @training_session.exercise_sessions.each do |exercise_session| %>
+        <%= f.fields_for :exercise_sessions, exercise_session do |e| %>
           <fieldset>
             <legend><%= e.object.exercise.name %></legend>
-            <%= e.label :target_sets %>
-            <%= e.number_field :target_sets %>
+            <% exercise_session.exercise_sets.each.with_index(1) do |set, index| %>
+              <%= e.fields_for :exercise_sets, set do |s| %>
+                <fieldset>
+                  <legend>Set <%= index %></legend>
+                  <div class="row">
+                    <div class="small-6 columns">
+                      <%= s.label :target_repetitions %>
+                      <%= s.number_field :target_repetitions %>
+                    </div>
 
-            <%= e.label :target_repetitions %>
-            <%= e.number_field :target_repetitions %>
+                    <div class="small-6 columns">
+                      <%= s.label :target_weight %>
+                      <%= s.number_field :target_weight %>
+                    </div>
+                  </div>
+                </fieldset>
+              <% end %>
+            <% end %>
 
-            <%= e.label :target_weight %>
-            <%= e.number_field :target_weight %>
             <%= e.hidden_field :exercise_workout_id %>
           </fieldset>
+        <% end %>
       <% end %>
       <%= f.hidden_field :workout_id %>
       <%= f.submit "Start", class: "button round right" %>