summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2017-02-18 11:49:10 -0700
committermo khan <mo@mokhan.ca>2017-02-18 11:49:10 -0700
commit2fae577b43f930a456bc0ce93e36f3f18eece601 (patch)
treec0a78293abed4558c9c6d784795f9eed0fdcecbf
parent3ea15efd43893620c8c37aafe47d3f134c0182a8 (diff)
use chart.js instead of google charts.
-rw-r--r--app/assets/javascripts/application.js2
-rw-r--r--app/controllers/charts_controller.rb22
-rw-r--r--app/models/workout.rb2
-rw-r--r--app/views/layouts/application.html.erb1
-rw-r--r--app/views/workouts/index.html.erb14
-rw-r--r--spec/models/workout_spec.rb18
6 files changed, 44 insertions, 15 deletions
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index e05e5a4..2f9085f 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -18,6 +18,8 @@
//= require ractive
//= require backbone
//= require ractive-backbone
+//= require Chart.bundle
+//= require chartkick
//= require_self
//= require_tree .
//= require turbolinks
diff --git a/app/controllers/charts_controller.rb b/app/controllers/charts_controller.rb
index 9475a0c..cbb7a95 100644
--- a/app/controllers/charts_controller.rb
+++ b/app/controllers/charts_controller.rb
@@ -3,14 +3,28 @@ class ChartsController < ApplicationController
exercise = Exercise.find_by(id: params[:exercise])
respond_to do |format|
format.js { @training_history = current_user.history_for(exercise) }
- format.json { render json: recent_workouts(exercise).to_line_chart }
+ #format.json { render json: recent_workouts(exercise).to_line_chart }
+ format.json { render json: rolled_up_sets(exercise || Exercise.primary).chart_json }
end
+
end
private
- def recent_workouts(exercise, since = (params[:since] || 7.days).to_i.seconds.ago)
- workouts = current_user.workouts.since(since.beginning_of_day).recent
- exercise ? workouts.with_exercise(exercise) : workouts
+ #def recent_workouts(exercise, since = (params[:since] || 7.days).to_i.seconds.ago)
+ #workouts = current_user.workouts.since(since.beginning_of_day).recent
+ #exercise ? workouts.with_exercise(exercise) : workouts
+ #end
+
+ def rolled_up_sets(exercise, since = (params[:since] || 7.days).to_i.seconds.ago)
+ ExerciseSet
+ .joins(:exercise)
+ .where(exercise: exercise)
+ .where('workouts.occurred_at > ?', since.beginning_of_day)
+ .where.not(target_weight: nil)
+ .group('exercises.name')
+ .joins(:workout)
+ .group('workouts.occurred_at')
+ .maximum(:target_weight)
end
end
diff --git a/app/models/workout.rb b/app/models/workout.rb
index 2cfa315..6770675 100644
--- a/app/models/workout.rb
+++ b/app/models/workout.rb
@@ -15,7 +15,7 @@ class Workout < ApplicationRecord
joins(:exercises).where(exercises: { id: exercise.id }).distinct
end
scope :to_line_chart, -> do
- joins(:exercise_sets).group(:occurred_at).recent.maximum(:target_weight)
+ joins(:exercise_sets).group(:occurred_at).recent.maximum('exercise_sets.target_weight')
end
def train(exercise, target_weight, repetitions:, set: nil)
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 059c519..c5eb5ea 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -8,7 +8,6 @@
<title><%= t('.title') %> <%= content_for?(:title) ? "| #{yield(:title)}" : "" %></title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
- <%= javascript_include_tag "https://www.google.com/jsapi", "chartkick" %>
<%= javascript_include_tag "https://maps.googleapis.com/maps/api/js?key=#{ENV['GOOGLE_MAPS_API_KEY']}" %>
<%= yield(:head) %>
</head>
diff --git a/app/views/workouts/index.html.erb b/app/views/workouts/index.html.erb
index d35f3ed..6b07345 100644
--- a/app/views/workouts/index.html.erb
+++ b/app/views/workouts/index.html.erb
@@ -30,9 +30,9 @@
<div class="level-right">
<p class="level-item">
<% if @exercise.nil? %>
- <strong> <%= link_to 'All', workouts_path(filter_params_hash) %> </strong>
+ <strong> <%= link_to 'All', workouts_path(filter_params_hash(exercise: nil)) %> </strong>
<% else %>
- <%= link_to 'All', workouts_path(filter_params_hash) %>
+ <%= link_to 'All', workouts_path(filter_params_hash(exercise: nil)) %>
<% end %>
</p>
<% @primary_exercises.each do |exercise| %>
@@ -49,13 +49,11 @@
</nav>
</div>
</div>
- <% if @exercise %>
- <div class="columns">
- <div class="column is-12">
- <%= line_chart charts_path(filter_params_hash) %>
- </div>
+ <div class="columns">
+ <div class="column is-12">
+ <%= line_chart charts_path(filter_params_hash), download: true %>
</div>
- <% end %>
+ </div>
<div class="columns">
<div class="column is-12">
diff --git a/spec/models/workout_spec.rb b/spec/models/workout_spec.rb
index 7699b74..0e3e0ca 100644
--- a/spec/models/workout_spec.rb
+++ b/spec/models/workout_spec.rb
@@ -114,9 +114,14 @@ describe Workout, type: :model do
describe ".to_line_chart" do
let(:routine) { subject.routine }
let(:squat) { create(:exercise) }
+ let(:bench_press) { create(:exercise) }
- it 'returns a single series' do
+ before :each do
routine.add_exercise(squat)
+ routine.add_exercise(bench_press)
+ end
+
+ it 'returns a single series' do
subject.train(squat, 315, repetitions: 5)
subject.reload
@@ -124,5 +129,16 @@ describe Workout, type: :model do
subject.occurred_at => 315.0
})
end
+
+ it 'returns multiple series' do
+ subject.train(squat, 315, repetitions: 5)
+ subject.train(bench_press, 210, repetitions: 5)
+ subject.reload
+
+ expect(described_class.to_line_chart).to match_array([
+ { name: squat.name, data: { subject.occurred_at => 315.0 } },
+ { name: bench_press.name, data: { subject.occurred_at => 210.0 } },
+ ])
+ end
end
end