Commit 1475d22

mo khan <mo@mokhan.ca>
2016-06-26 03:36:11
extract timer class and backbone model.
1 parent 281f834
app/assets/javascripts/models/repository.js.coffee
@@ -0,0 +1,12 @@
+class Stronglifters.Repository
+  patch: (url, payload) ->
+    $.ajax
+      url: url,
+      dataType: 'json',
+      type: 'patch',
+      contentType: 'application/json',
+      data: JSON.stringify(payload),
+      success: (data, statux, xhr) ->
+        console.log("Saved: #{data}")
+      error: (xhr, status, error) ->
+        console.log(error)
app/assets/javascripts/models/set.js.coffee
@@ -0,0 +1,2 @@
+class Stronglifters.Set extends Backbone.Model
+  urlRoot: '/sets'
app/assets/javascripts/models/timer.js.coffee
@@ -0,0 +1,22 @@
+class Stronglifters.Timer
+  @ONE_SECOND=1000
+  constructor: (view) ->
+    @view = view
+
+  start: ->
+    @stop()
+
+    @view.set('timer', 0)
+    @intervalId = setInterval @refreshTimer, @ONE_SECOND
+
+  refreshTimer: =>
+    @view.add('timer', @ONE_SECOND)
+    @view.set('clock', moment.utc(@view.get('timer')).format('mm:ss'))
+
+  stop: =>
+    if @running()
+      clearTimeout @intervalId
+      @intervalId = null
+
+  running: ->
+    @intervalId?
app/assets/javascripts/views/workout_view.js.coffee
@@ -1,3 +1,5 @@
+#= require models/timer
+#= require models/set
 class Stronglifters.WorkoutView extends Ractive
   template: RactiveTemplates["templates/workout_view"]
 
@@ -6,9 +8,9 @@ class Stronglifters.WorkoutView extends Ractive
     @observe 'workout.exercises.*.sets.*', (newValue, oldValue, keypath) ->
       @refreshStatus(newValue, oldValue, keypath)
     @set('message', "Let's do this!")
+    @clock = new Stronglifters.Timer(@)
 
   updateProgress: (event) ->
-    @stopTimer()
     completed = @get("#{event.keypath}.actual_repetitions")
     if completed == null || completed == 0
       @set("#{event.keypath}.actual_repetitions", @get("#{event.keypath}.target_repetitions"))
@@ -22,35 +24,11 @@ class Stronglifters.WorkoutView extends Ractive
     else
       @set('alertStatus', 'alert')
       @set('message', "Take a 5:00 break.")
-    @startTimer()
-
-  startTimer: ->
-    @set('timer', 0)
-    @intervalId = setInterval @refreshTimer, 1000
-
-  refreshTimer: =>
-    @add('timer', 1000)
-    @set('clock', moment.utc(@get('timer')).format('mm:ss'))
-
-  stopTimer: =>
-    clearTimeout @intervalId
+    @clock.start()
 
   saveSet: (set) ->
-    @patch "/sets/#{set.id}",
-      set:
-        actual_repetitions: set.actual_repetitions
-
-  patch: (url, payload) ->
-    $.ajax
-      url: url,
-      dataType: 'json',
-      type: 'patch',
-      contentType: 'application/json',
-      data: JSON.stringify(payload),
-      success: (data, statux, xhr) ->
-        console.log("Saved: #{data}")
-      error: (xhr, status, error) ->
-        console.log(error)
+    model = new Stronglifters.Set(set)
+    model.save
 
   successful: (keypath) ->
     @get("#{keypath}.target_repetitions") == @get("#{keypath}.actual_repetitions")
app/controllers/sets_controller.rb
@@ -1,8 +1,7 @@
 class SetsController < ApplicationController
   def update
-    set = current_user.sets.find(params[:id])
-    set.update!(secure_params)
-    render json: {}
+    @set = current_user.sets.find(params[:id])
+    @set.update!(secure_params)
   end
 
   private
app/views/sets/_set.jbuilder
@@ -0,0 +1,4 @@
+json.id set.id
+json.target_weight set.target_weight
+json.target_repetitions set.target_repetitions
+json.actual_repetitions set.actual_repetitions
app/views/sets/update.json.jbuilder
@@ -0,0 +1,1 @@
+json.partial! 'set', set: @set
app/views/workouts/_workout.jbuilder
@@ -5,9 +5,6 @@ json.exercises workout.sets.order(:created_at).group_by(&:exercise) do |exercise
   json.id exercise.id
   json.name exercise.name
   json.sets sets.sort_by(&:created_at) do |set|
-    json.id set.id
-    json.target_weight set.target_weight
-    json.target_repetitions set.target_repetitions
-    json.actual_repetitions set.actual_repetitions
+    json.partial! 'sets/set', set: set
   end
 end
app/views/workouts/update.json.jbuilder
@@ -1,3 +0,0 @@
-json.workout do
-  json.partial! 'workout', workout: @workout
-end