Commit 0c2d106
Changed files (10)
app
assets
javascripts
views
workouts
config
spec
controllers
javascripts
app/assets/javascripts/models/startup.js.coffee
@@ -1,4 +1,3 @@
class Stronglifters.Startup
start: ->
- Ractive.DEBUG = false
new Clipboard('.clipboard-button')
app/assets/javascripts/views/google_map.js.coffee
@@ -3,7 +3,6 @@ class Stronglifters.GoogleMap
@div = document.getElementById(div)
present: (options) ->
- console.log("presenting")
coordinates = new google.maps.LatLng(options.latitude, options.longitude)
map = new google.maps.Map(@div, {
center: coordinates,
app/assets/javascripts/views/workout_view.js.coffee
@@ -1,89 +0,0 @@
-#= require models/timer
-#= require models/set
-class Stronglifters.WorkoutView extends Ractive
- template: RactiveTemplates["templates/workout_view"]
-
- oninit: ->
- @clock = new Stronglifters.Timer
- databag: this
- key: 'clock'
-
- @timers = { }
- @on 'updateProgress', (event) ->
- @withModel event.keypath, (model) =>
- @updateProgress(model)
-
- @observe 'workout.exercises.*.sets.*', (newValue, oldValue, keypath) ->
- @withModel keypath, (model) =>
- @refreshStatus model, keypath
-
- withModel: (keypath, callback) ->
- model = new Stronglifters.Set(@get(keypath))
- model.set 'keypath', keypath
- callback(model)
- prefix = (x, key) ->
- x["#{keypath}.#{key}"] = model.changed[key]
- x
- @set(_.reduce(_.keys(model.changed), prefix, {}))
-
- updateProgress: (model) ->
- @set('clock', null)
- @clock.stop()
-
- if model.timed()
- @startTimerFor(model)
- return
-
- if !model.started()
- model.complete()
- else
- model.decrement()
- model.save()
-
- if model.successful()
- if model.workSet()
- message = "If it was easy break for 1:30, otherwise rest for 3:00."
- else
- message = "No rest for the wicked. Let's do this!"
- @displayMessage message, 'is-success'
- else
- @displayMessage "Take a 5:00 break.", 'is-danger'
-
- @clock.start()
-
- refreshStatus: (model, keypath) ->
- if model.timed()
- return
-
- if !model.started()
- @set "#{keypath}.status", "secondary hollow"
- return
-
- if model.successful()
- @set "#{keypath}.status", "is-success"
- else
- @set "#{keypath}.status", "is-danger"
-
- displayMessage: (message, status) ->
- @set 'message', message
- @set 'alertStatus', status
-
- startTimerFor: (model) ->
- keypath = model.get('keypath')
- timer = @timers[keypath]
- if timer?
- timer.stop()
- model.save()
- else
- targetMilliseconds = model.get('target_duration') * 1000
- timer = new Stronglifters.Timer
- databag: this
- format: (timer) ->
- (moment.utc(timer).minutes() * 60) + moment.utc(timer).seconds()
- key: "#{keypath}.actual_duration"
- maxMilliseconds: targetMilliseconds
- success: =>
- model.set('actual_duration', @get("#{keypath}.actual_duration"))
- model.save()
- @timers[keypath] = timer
- timer.start()
app/assets/javascripts/application.js.coffee
@@ -15,9 +15,7 @@
#= require moment
#= require jquery
#= require jquery_ujs
-#= require ractive
#= require backbone
-#= require ractive-backbone
#= require Chart.bundle
#= require chartkick
#= require fullcalendar
app/views/workouts/edit.html.erb
@@ -9,7 +9,7 @@
<p class="heading">
{{ set.target_repetitions }} x {{ set.target_weight }}
</p>
- <button v-on:click="updateProgress(set)" class="button is-large" v-bind:class="classObject">
+ <button :id="set.id" v-on:click="updateProgress(set)" class="button is-large" v-bind:class="classObject">
{{ set.actual_repetitions }}
</button>
<p> {{ set.weight_per_side }} </p>
config/deploy.rb
@@ -37,10 +37,10 @@ set :rbenv_ruby, `cat .ruby-version`.strip
namespace :deploy do
task :restart do
- on roles(:web), in: :groups, limit: 3, wait: 10 do
+ on roles(:web) do
sudo :sv, "restart puma"
end
- on roles(:app), in: :groups, limit: 3, wait: 10 do
+ on roles(:app) do
sudo :sv, "restart sidekiq"
end
end
spec/controllers/workouts_controller_spec.rb
@@ -18,7 +18,7 @@ describe WorkoutsController do
end
it "loads all works since a given time" do
- get :index, since: 2.days.to_i
+ get :index, params: { since: 2.days.to_i }
expect(assigns(:workouts)).to match_array([workout_b])
end
end
spec/javascripts/views/workout_view_spec.js.coffee
@@ -1,69 +0,0 @@
-#= require views/workout_view
-describe "WorkoutView", ->
- beforeEach ->
- @el = $('<div>')
- @subject = new Stronglifters.WorkoutView
- el: @el,
- data: ->
- workout:
- id: "1",
- body_weight: 225,
- routine_name: "A",
- exercises: [{
- id: '65ba3c72-4c4f-4226-bf53-b67d3edc3dda',
- name: 'Squat',
- sets: [
- {
- id: '5af1129b-b1d6-4e87-ab13-278f64d6e8ea',
- target_weight: 315,
- target_repetitions: 5,
- actual_repetitions: null
- },
- {
- id: '8e44a98e-f109-497f-a2ec-66e9b64c532a',
- target_weight: 315,
- target_repetitions: 5,
- actual_repetitions: 1
- },
- {
- id: 'be848972-8549-4f44-a3ce-2295783bf2b1',
- target_weight: 315,
- target_repetitions: 5,
- actual_repetitions: 2
- },
- ]
- }]
-
- it "has one exercise", ->
- @subject.get('workout.exercises')
- expect(@subject.get('workout.exercises').length).toEqual(1)
-
- it "indicates no progress recorded", ->
- result = @subject.get('workout.exercises.0.sets.0.status')
- expect(result).toEqual('secondary hollow')
-
- describe "updating progress", ->
- describe "when no reps are completed", ->
- it "sets the reps to the target", ->
- @el.find('button').first().trigger('click')
- result = @subject.get('workout.exercises.0.sets.0.actual_repetitions')
- expect(result).toEqual(5)
-
- it "indicates a successful set", ->
- @el.find('button').first().trigger('click')
- result = @subject.get('workout.exercises.0.sets.0.status')
- expect(result).toEqual('is-success')
-
- describe "when at least one rep is completed", ->
- beforeEach ->
- @subject.set('workout.exercises.0.sets.0.actual_repetitions', 5)
-
- it 'decrements the count', ->
- @el.find('button').first().trigger('click')
- result = @subject.get('workout.exercises.0.sets.0.actual_repetitions')
- expect(result).toEqual(4)
-
- it "indicates a failed set", ->
- @el.find('button').first().trigger('click')
- result = @subject.get('workout.exercises.0.sets.0.status')
- expect(result).toEqual('is-danger')
Gemfile
@@ -46,7 +46,6 @@ source "https://rubygems.org" do
gem "puma", "~> 3.0"
gem "rack-mini-profiler", group: :development, require: false
gem "rack_session_access", group: :test
- gem "ractive-rails"
gem "rails", "~> 5.0.0"
gem "rails-controller-testing", group: :test
gem "rails-erd", group: :development
@@ -84,6 +83,4 @@ source "https://rails-assets.org" do
gem "rails-assets-lodash"
gem "rails-assets-modernizr"
gem "rails-assets-moment"
- gem "rails-assets-ractive"
- gem "rails-assets-ractive-backbone"
end
Gemfile.lock
@@ -264,10 +264,6 @@ GEM
rack_session_access (0.1.1)
builder (>= 2.0.0)
rack (>= 1.0.0)
- ractive-rails (0.0.3)
- execjs (>= 1.3)
- sprockets (>= 2.0)
- tilt (>= 1.3)
rails (5.0.1)
actioncable (= 5.0.1)
actionmailer (= 5.0.1)
@@ -290,8 +286,6 @@ GEM
rails-assets-lodash (4.13.1)
rails-assets-modernizr (3.3.1)
rails-assets-moment (2.14.1)
- rails-assets-ractive (0.7.3)
- rails-assets-ractive-backbone (0.3.0)
rails-assets-underscore (1.8.3)
rails-controller-testing (0.1.1)
actionpack (~> 5.x)
@@ -494,7 +488,6 @@ DEPENDENCIES
puma (~> 3.0)!
rack-mini-profiler!
rack_session_access!
- ractive-rails!
rails (~> 5.0.0)!
rails-assets-backbone!
rails-assets-clipboard!
@@ -502,8 +495,6 @@ DEPENDENCIES
rails-assets-lodash!
rails-assets-modernizr!
rails-assets-moment!
- rails-assets-ractive!
- rails-assets-ractive-backbone!
rails-controller-testing!
rails-erd!
rails-i18n (~> 4.0.0)!