Commit 169f760
Changed files (14)
app
controllers
models
views
training_sessions
config
locales
spec
models
csv
app/controllers/concerns/internationalizationable.rb
@@ -0,0 +1,22 @@
+module Internationalizationable
+ extend ActiveSupport::Concern
+
+ included do
+ around_action :with_time_zone, if: :current_user
+ around_action :with_locale
+ end
+
+ private
+
+ def with_time_zone
+ Time.use_zone(current_user.time_zone) { yield }
+ end
+
+ def with_locale
+ I18n.with_locale(params[:locale]) { yield }
+ end
+
+ def default_url_options(options = {})
+ { locale: I18n.locale }
+ end
+end
app/controllers/application_controller.rb
@@ -1,4 +1,6 @@
class ApplicationController < ActionController::Base
+ include Internationalizationable
+ include Pageable
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
app/controllers/gyms_controller.rb
@@ -1,5 +1,4 @@
class GymsController < ApplicationController
- include Pageable
before_action { @search_path = gyms_path }
before_action only: [:index] { @remote_search = true }
app/controllers/training_sessions_controller.rb
@@ -2,10 +2,12 @@ class TrainingSessionsController < ApplicationController
after_action :allow_google_iframe, only: [:index]
def index
- @training_sessions = current_user.
+ @training_sessions = paginate(
+ current_user.
training_sessions.
includes(:workout, :program, exercise_sessions: [:exercise]).
order(occurred_at: :desc)
+ )
end
def upload
app/models/android/import.rb
@@ -75,7 +75,7 @@ class Android::Import
def map_from(row)
Android::Workout.new(
id: row[:id],
- date: user.timezone.local_to_utc(row[:date]),
+ date: user.time_zone.local_to_utc(row[:date]),
workout: row[:workout],
exercise_1: JSON.parse(row[:e1]),
exercise_2: JSON.parse(row[:e2]),
app/models/csv/workout.rb
@@ -20,7 +20,7 @@ class Csv::Workout
day, month, year = row[0].split("/")
year = "20#{year}"
workout = new(
- date: user.timezone.local_to_utc(Time.utc(year, month, day)),
+ date: user.time_zone.local_to_utc(Time.utc(year, month, day)),
note: row[1],
workout: row[2],
body_weight_kg: row[3],
app/models/user.rb
@@ -14,7 +14,7 @@ class User < ActiveRecord::Base
after_create :create_profile
before_validation :lowercase_account_fields
- def timezone
+ def time_zone
TZInfo::Timezone.get('Canada/Mountain')
end
app/views/training_sessions/_training_session.html.erb
@@ -1,17 +1,12 @@
-<%= cache(training_session) do %>
- <div class="large-4 small-6 columns">
- <div class="panel">
- <h5>
- (<%= link_to training_session.workout, program_path(training_session.program, anchor: training_session.workout) %>)
- <%= training_session.occurred_at.strftime("%a, %d %b. %Y") %>
- </h5>
- <% training_session.exercise_sessions.each do |exercise_session| %>
- <p>
- <strong><%= exercise_session.exercise.short_name %></strong>
- <%= exercise_session.sets.compact.join('/') %> @ <%= exercise_session.target_weight %> lbs
- </p>
- <% end %>
- <p> <strong><%= t('.body_weight') %></strong> <%= training_session.body_weight %> lbs </p>
- </div>
- </div>
-<% end %>
+<tr>
+ <td>
+ <%= link_to training_session.workout, program_path(training_session.program, anchor: training_session.workout) %>
+ </td>
+ <td><%= I18n.l training_session.occurred_at, format: :long %></td>
+ <td><%= training_session.body_weight %> lbs</td>
+ <td>
+ <% training_session.exercise_sessions.each do |exercise_session| %>
+ <strong><%= exercise_session.exercise.name %></strong> @ <%= exercise_session.target_weight %> lbs,
+ <% end %>
+ </td>
+</tr>
app/views/training_sessions/index.html.erb
@@ -1,7 +1,24 @@
<% if @training_sessions.any? %>
<div class="row">
<div class="large-12 columns">
- <%= render @training_sessions %>
+ <table>
+ <thead>
+ <tr>
+ <td></td>
+ <td>Date</td>
+ <td>Weight</td>
+ <td></td>
+ </tr>
+ </thead>
+ <tbody>
+ <%= render @training_sessions %>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <div class="row">
+ <div class="large-12 text-center columns">
+ <%= paginate @training_sessions, remote: false %>
</div>
</div>
<% else %>
config/locales/en.yml
@@ -90,7 +90,5 @@ en:
upload:
success: "Our minions have been summoned to unpack your backup."
failure: "We don't know how to unpack this type of file."
- training_session:
- body_weight: Body Weight
footer:
copyright: "© Copyright www.stronglifters.com. All rights reserved."
spec/jobs/upload_stronglifts_backup_job_spec.rb
@@ -37,7 +37,7 @@ describe UploadStrongliftsBackupJob, type: :job do
it "adds each workout to the list of training sessions for the user" do
subject.perform(user, backup_file, program)
- expect(user.training_sessions.count).to eql(100)
+ expect(user.training_sessions.count).to eql(168)
end
end
spec/models/csv/import_spec.rb
@@ -44,7 +44,7 @@ describe Csv::Import do
subject.import_from(directory)
training_session = user.training_sessions.order(:occurred_at).first
- expected_date = user.timezone.local_to_utc(Time.utc(2015, 03, 02))
+ expected_date = user.time_zone.local_to_utc(Time.utc(2015, 03, 02))
expect(training_session.occurred_at).to eql(expected_date)
expect(training_session.workout).to eql(workout_a)
expect(training_session.body_weight).to eql(205.0)
@@ -97,7 +97,7 @@ describe Csv::Import do
it "excludes items that have already been imported" do
subject.import_from(directory)
subject.import_from(directory)
- expect(user.training_sessions.count).to eql(100)
+ expect(user.training_sessions.count).to eql(168)
end
end
Gemfile
@@ -47,6 +47,7 @@ source 'https://rubygems.org' do
gem 'ractive-rails'
gem 'rails', '~> 4.2'
gem 'rails-erd', group: :development
+ gem 'rails-i18n', '~> 4.0.0'
gem 'rails_12factor', group: :production
gem 'rspec-rails', group: :test
gem 'rubyzip', require: 'zip'
Gemfile.lock
@@ -287,6 +287,9 @@ GEM
ruby-graphviz (~> 1.2)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
+ rails-i18n (4.0.8)
+ i18n (~> 0.7)
+ railties (~> 4.0)
rails_12factor (0.0.3)
rails_serve_static_assets
rails_stdout_logging
@@ -470,6 +473,7 @@ DEPENDENCIES
rails (~> 4.2)!
rails-assets-ractive!
rails-erd!
+ rails-i18n (~> 4.0.0)!
rails_12factor!
rspec-rails!
rubyzip!