Commit 1d96ab1

mo khan <mo@mokhan.ca>
2016-06-30 05:52:04
collapse conditionals.
1 parent f913790
Changed files (2)
app
spec
app/models/warm_up.rb
@@ -1,12 +1,23 @@
 class WarmUp
   DEADLIFT_INCREMENT_THRESHOLD_LB=220.0
-  attr_reader :exercise, :sets
+  attr_reader :exercise, :sets, :target_weight
 
-  def initialize(exercise)
+  def initialize(exercise, target_weight)
     @sets = []
     @exercise = exercise
+    @target_weight = target_weight
+    case exercise.name
+    when "Deadlift"
+      dead_lift_warmup
+    when "Barbell Row"
+      barbell_row_warmup
+    else
+      default_warmup
+    end
   end
 
+  private
+
   def add_set(weight, repetitions)
     @sets << ExerciseSet.new(
       type: :warm_up,
@@ -17,344 +28,114 @@ class WarmUp
     self
   end
 
-  def self.calculate_for(exercise, target_weight)
-    if exercise.name == "Deadlift"
-      return dead_lift_warmup(exercise, target_weight)
-    end
-
-    if exercise.name == "Barbell Row"
-      return barbell_row_warmup(exercise, target_weight)
-    end
-
-    return default_warmup(exercise, target_weight)
-  end
-
-  def self.dead_lift_warmup(exercise, target_weight)
-    warmup = WarmUp.new(exercise)
-    if (target_weight < 155.0)
-      return warmup
-    end
-    if (target_weight < 175.0)
-      return warmup.add_set(135.0, 5)
-    end
-    warmup.add_set(135.0, 5)
-    if (target_weight < 200.0)
-      return warmup.add_set(165.0, 5)
-    end
-    if (target_weight < DEADLIFT_INCREMENT_THRESHOLD_LB)
-      return warmup.add_set(175.0, 5)
-    end
-    if (target_weight < 225.0)
-      return warmup.add_set(185.0, 5)
-    end
-    warmup.add_set(185.0, 5)
-    if (target_weight < 240.0)
-      return warmup.add_set(205.0, 5)
-    end
-    if (target_weight < 250.0)
-      return warmup.add_set(215.0, 5)
-    end
-    if (target_weight < 270.0)
-      return warmup.add_set(225.0, 5)
-    end
-    warmup.add_set(225.0, 5)
-    if (target_weight < 275.0)
-      return warmup.add_set(245.0, 5)
-    end
-    if (target_weight < 290.0)
-      return warmup.add_set(255.0, 5)
-    end
-    if (target_weight < 301.0)
-      return warmup.add_set(265.0, 5)
-    end
-    warmup.add_set(265.0, 3)
-    if (target_weight < 320.0)
-      return warmup.add_set(285.0, 1)
-    end
-    if (target_weight < 330.0)
-      return warmup.add_set(295.0, 1)
-    end
-    if (target_weight < 340.0)
-      return warmup.add_set(305.0, 1)
-    end
-    if (target_weight < 350.0)
-      return warmup.add_set(315.0, 1)
-    end
-    warmup.add_set(315.0, 3)
-    if (target_weight < 360.0)
-      return warmup.add_set(335.0, 1)
-    end
-    if (target_weight < 370.0)
-      return warmup.add_set(340.0, 1)
-    end
-    if (target_weight < 380.0)
-      return warmup.add_set(345.0, 1)
-    end
-    if (target_weight < 390.0)
-      return warmup.add_set(350.0, 1)
-    end
-    if (target_weight < 395.0)
-      return warmup.add_set(355.0, 1)
-    end
-    if (target_weight < 400.0)
-      return warmup.add_set(360.0, 1)
-    end
-    return warmup.add_set(365.0, 1)
+  def dead_lift_warmup
+    return self if target_weight < 155.0
+    return add_set(135.0, 5) if (target_weight < 175.0)
+    add_set(135.0, 5)
+    return add_set(165.0, 5) if (target_weight < 200.0)
+    return add_set(175.0, 5) if (target_weight < DEADLIFT_INCREMENT_THRESHOLD_LB)
+    return add_set(185.0, 5) if (target_weight < 225.0)
+    add_set(185.0, 5)
+    return add_set(205.0, 5) if (target_weight < 240.0)
+    return add_set(215.0, 5) if (target_weight < 250.0)
+    return add_set(225.0, 5) if (target_weight < 270.0)
+    add_set(225.0, 5)
+    return add_set(245.0, 5) if (target_weight < 275.0)
+    return add_set(255.0, 5) if (target_weight < 290.0)
+    return add_set(265.0, 5) if (target_weight < 301.0)
+    add_set(265.0, 3)
+    return add_set(285.0, 1) if (target_weight < 320.0)
+    return add_set(295.0, 1) if (target_weight < 330.0)
+    return add_set(305.0, 1) if (target_weight < 340.0)
+    return add_set(315.0, 1) if (target_weight < 350.0)
+    add_set(315.0, 3)
+    return add_set(335.0, 1) if (target_weight < 360.0)
+    return add_set(340.0, 1) if (target_weight < 370.0)
+    return add_set(345.0, 1) if (target_weight < 380.0)
+    return add_set(350.0, 1) if (target_weight < 390.0)
+    return add_set(355.0, 1) if (target_weight < 395.0)
+    return add_set(360.0, 1) if (target_weight < 400.0)
+    return add_set(365.0, 1)
   end
 
-  def self.barbell_row_warmup(exercise, target_weight)
-    warmup = WarmUp.new(exercise)
-    i = 3
-    barbellRow = exercise.name == "Barbell Row" ? 1 : 0
-    if ((barbellRow != 0 && target_weight < 105.0) || target_weight < 65.0)
-      return warmup
-    end
-    if (barbellRow != 0 && target_weight < 145.0)
-      return warmup.add_set(95.0, 5)
-    end
-    if (barbellRow == 0)
-      warmup.add_set(45.0, 5)
-      warmup.add_set(45.0, 5)
-      if (target_weight < 95.0)
-        return warmup
-      end
-    end
-    if (barbellRow != 0 && target_weight < 160.0)
-      return warmup.add_set(115.0, 5)
-    end
-    if (target_weight < 105.0)
-      return warmup.add_set(65.0, 3)
-    end
-    if (target_weight < 125.0)
-      return warmup.add_set(75.0, 3)
-    end
-    if (target_weight < 135.0)
-      return warmup.add_set(85.0, 3)
-    end
-    if (barbellRow == 0)
-      warmup.add_set(95.0, 5)
-      if (target_weight < 150.0)
-        return warmup.add_set(115.0, 3)
-      end
-      if (target_weight < 160.0)
-        return warmup.add_set(125.0, 3)
-      end
-      if (target_weight < 185.0)
-        return warmup.add_set(135.0, 3)
-      end
-    end
-    if (target_weight < 185.0)
-      return warmup.add_set(135.0, 3)
-    end
-    warmup.add_set(135.0, 5)
-    if (target_weight < 200.0)
-      return warmup.add_set(165.0, 3)
-    end
-    if (target_weight < DEADLIFT_INCREMENT_THRESHOLD_LB)
-      return warmup.add_set(175.0, 3)
-    end
-    if (target_weight < 225.0)
-      return warmup.add_set(185.0, 3)
-    end
-    if (barbellRow != 0)
-      warmup.add_set(185.0, 5)
-    else
-      warmup.add_set(185.0, target_weight < 305.0 ? 3 : 5)
-    end
-    if (target_weight < 240.0)
-      return warmup.add_set(205.0, 2)
-    end
-    if (target_weight < 250.0)
-      return warmup.add_set(215.0, 2)
-    end
-    if (target_weight < 270.0)
-      return warmup.add_set(225.0, 2)
-    end
-    if (barbellRow != 0)
-      warmup.add_set(225.0, 5)
-    else
-      warmup.add_set(225.0, target_weight < 305.0 ? 2 : 3)
-    end
-    if (target_weight < 275.0)
-      return warmup.add_set(245.0, 1)
-    end
-    if (target_weight < 290.0)
-      return warmup.add_set(255.0, 1)
-    end
-    if (target_weight < 301.0)
-      return warmup.add_set(265.0, 1)
-    end
-    if (barbellRow != 0)
-      warmup.add_set(265.0, 3)
-    elsif (target_weight < 305.0)
-      warmup.add_set(265.0, 1)
-    elsif (target_weight < 350.0)
-      warmup.add_set(265.0, 2)
-    else
-      warmup.add_set(265.0, 3)
-    end
-    if (target_weight < 320.0)
-      return warmup.add_set(285.0, 1)
-    end
-    if (target_weight < 330.0)
-      return warmup.add_set(295.0, 1)
-    end
-    if (target_weight < 340.0)
-      return warmup.add_set(305.0, 1)
-    end
-    if (target_weight < 350.0)
-      return warmup.add_set(315.0, 1)
-    end
-    if (barbellRow == 0)
-      i = 2
-    end
-    warmup.add_set(315.0, i)
-    if (target_weight < 355.0)
-      return warmup.add_set(330.0, 1)
-    end
-    if (target_weight < 370.0)
-      return warmup.add_set(340.0, 1)
-    end
-    if (target_weight < 380.0)
-      return warmup.add_set(345.0, 1)
-    end
-    if (target_weight < 390.0)
-      return warmup.add_set(350.0, 1)
-    end
-    if (target_weight < 395.0)
-      return warmup.add_set(355.0, 1)
-    end
-    if (target_weight < 400.0)
-      return warmup.add_set(360.0, 1)
-    end
-    return warmup.add_set(365.0, 1)
+  def barbell_row_warmup
+    return self if target_weight < 105.0 || target_weight < 65.0
+    return add_set(95.0, 5) if (target_weight < 145.0)
+    return add_set(115.0, 5) if (target_weight < 160.0)
+    return add_set(65.0, 3) if (target_weight < 105.0)
+    return add_set(75.0, 3) if (target_weight < 125.0)
+    return add_set(85.0, 3) if (target_weight < 135.0)
+    return add_set(135.0, 3) if (target_weight < 185.0)
+    add_set(135.0, 5)
+    return add_set(165.0, 3) if (target_weight < 200.0)
+    return add_set(175.0, 3) if (target_weight < DEADLIFT_INCREMENT_THRESHOLD_LB)
+    return add_set(185.0, 3) if (target_weight < 225.0)
+    add_set(185.0, 5)
+    return add_set(205.0, 2) if (target_weight < 240.0)
+    return add_set(215.0, 2) if (target_weight < 250.0)
+    return add_set(225.0, 2) if (target_weight < 270.0)
+    add_set(225.0, 5)
+    return add_set(245.0, 1) if (target_weight < 275.0)
+    return add_set(255.0, 1) if (target_weight < 290.0)
+    return add_set(265.0, 1) if (target_weight < 301.0)
+    add_set(265.0, 3)
+    return add_set(285.0, 1) if (target_weight < 320.0)
+    return add_set(295.0, 1) if (target_weight < 330.0)
+    return add_set(305.0, 1) if (target_weight < 340.0)
+    return add_set(315.0, 1) if (target_weight < 350.0)
+    add_set(315.0, 3)
+    return add_set(330.0, 1) if (target_weight < 355.0)
+    return add_set(340.0, 1) if (target_weight < 370.0)
+    return add_set(345.0, 1) if (target_weight < 380.0)
+    return add_set(350.0, 1) if (target_weight < 390.0)
+    return add_set(355.0, 1) if (target_weight < 395.0)
+    return add_set(360.0, 1) if (target_weight < 400.0)
+    return add_set(365.0, 1)
   end
 
-  def self.default_warmup(exercise, target_weight)
-    warmup = WarmUp.new(exercise)
-    i = 3
-    barbellRow = exercise.name == "Barbell Row" ? 1 : 0
-    if ((barbellRow != 0 && target_weight < 105.0) || target_weight < 65.0)
-      return warmup
-    end
-    if (barbellRow != 0 && target_weight < 145.0)
-      return warmup.add_set(95.0, 5)
-    end
-    if (barbellRow == 0)
-      warmup.add_set(45.0, 5)
-      warmup.add_set(45.0, 5)
-      if (target_weight < 95.0)
-        return warmup
-      end
-    end
-    if (barbellRow != 0 && target_weight < 160.0)
-      return warmup.add_set(115.0, 5)
-    end
-    if (target_weight < 105.0)
-      return warmup.add_set(65.0, 3)
-    end
-    if (target_weight < 125.0)
-      return warmup.add_set(75.0, 3)
-    end
-    if (target_weight < 135.0)
-      return warmup.add_set(85.0, 3)
-    end
-    if (barbellRow == 0)
-      warmup.add_set(95.0, 5)
-      if (target_weight < 150.0)
-        return warmup.add_set(115.0, 3)
-      end
-      if (target_weight < 160.0)
-        return warmup.add_set(125.0, 3)
-      end
-      if (target_weight < 185.0)
-        return warmup.add_set(135.0, 3)
-      end
-    end
-    if (target_weight < 185.0)
-      return warmup.add_set(135.0, 3)
-    end
-    warmup.add_set(135.0, 5)
-    if (target_weight < 200.0)
-      return warmup.add_set(165.0, 3)
-    end
-    if (target_weight < DEADLIFT_INCREMENT_THRESHOLD_LB)
-      return warmup.add_set(175.0, 3)
-    end
-    if (target_weight < 225.0)
-      return warmup.add_set(185.0, 3)
-    end
-    if (barbellRow != 0)
-      warmup.add_set(185.0, 5)
-    else
-      warmup.add_set(185.0, target_weight < 305.0 ? 3 : 5)
-    end
-    if (target_weight < 240.0)
-      return warmup.add_set(205.0, 2)
-    end
-    if (target_weight < 250.0)
-      return warmup.add_set(215.0, 2)
-    end
-    if (target_weight < 270.0)
-      return warmup.add_set(225.0, 2)
-    end
-    if (barbellRow != 0)
-      warmup.add_set(225.0, 5)
-    else
-      warmup.add_set(225.0, target_weight < 305.0 ? 2 : 3)
-    end
-    if (target_weight < 275.0)
-      return warmup.add_set(245.0, 1)
-    end
-    if (target_weight < 290.0)
-      return warmup.add_set(255.0, 1)
-    end
-    if (target_weight < 301.0)
-      return warmup.add_set(265.0, 1)
-    end
-    if (barbellRow != 0)
-      warmup.add_set(265.0, 3)
-    elsif (target_weight < 305.0)
-      warmup.add_set(265.0, 1)
+  def default_warmup
+    return self if (target_weight < 65.0)
+    add_set(45.0, 5)
+    add_set(45.0, 5)
+    return self if (target_weight < 95.0)
+    return add_set(65.0, 3) if (target_weight < 105.0)
+    return add_set(75.0, 3) if (target_weight < 125.0)
+    return add_set(85.0, 3) if (target_weight < 135.0)
+    add_set(95.0, 5)
+    return add_set(115.0, 3) if (target_weight < 150.0)
+    return add_set(125.0, 3) if (target_weight < 160.0)
+    return add_set(135.0, 3) if (target_weight < 185.0)
+    return add_set(135.0, 3) if (target_weight < 185.0)
+    add_set(135.0, 5)
+    return add_set(165.0, 3) if (target_weight < 200.0)
+    return add_set(175.0, 3) if (target_weight < DEADLIFT_INCREMENT_THRESHOLD_LB)
+    return add_set(185.0, 3) if (target_weight < 225.0)
+    add_set(185.0, target_weight < 305.0 ? 3 : 5)
+    return add_set(205.0, 2) if (target_weight < 240.0)
+    return add_set(215.0, 2) if (target_weight < 250.0)
+    return add_set(225.0, 2) if (target_weight < 270.0)
+    add_set(225.0, target_weight < 305.0 ? 2 : 3)
+    return add_set(245.0, 1) if (target_weight < 275.0)
+    return add_set(255.0, 1) if (target_weight < 290.0)
+    return add_set(265.0, 1) if (target_weight < 301.0)
+    if (target_weight < 305.0)
+      add_set(265.0, 1)
     elsif (target_weight < 350.0)
-      warmup.add_set(265.0, 2)
+      add_set(265.0, 2)
     else
-      warmup.add_set(265.0, 3)
-    end
-    if (target_weight < 320.0)
-      return warmup.add_set(285.0, 1)
-    end
-    if (target_weight < 330.0)
-      return warmup.add_set(295.0, 1)
-    end
-    if (target_weight < 340.0)
-      return warmup.add_set(305.0, 1)
-    end
-    if (target_weight < 350.0)
-      return warmup.add_set(315.0, 1)
-    end
-    if (barbellRow == 0)
-      i = 2
-    end
-    warmup.add_set(315.0, i)
-    if (target_weight < 355.0)
-      return warmup.add_set(330.0, 1)
-    end
-    if (target_weight < 370.0)
-      return warmup.add_set(340.0, 1)
-    end
-    if (target_weight < 380.0)
-      return warmup.add_set(345.0, 1)
-    end
-    if (target_weight < 390.0)
-      return warmup.add_set(350.0, 1)
-    end
-    if (target_weight < 395.0)
-      return warmup.add_set(355.0, 1)
-    end
-    if (target_weight < 400.0)
-      return warmup.add_set(360.0, 1)
-    end
-    return warmup.add_set(365.0, 1)
+      add_set(265.0, 3)
+    end
+    return add_set(285.0, 1) if (target_weight < 320.0)
+    return add_set(295.0, 1) if (target_weight < 330.0)
+    return add_set(305.0, 1) if (target_weight < 340.0)
+    return add_set(315.0, 1) if (target_weight < 350.0)
+    add_set(315.0, 2)
+    return add_set(330.0, 1) if (target_weight < 355.0)
+    return add_set(340.0, 1) if (target_weight < 370.0)
+    return add_set(345.0, 1) if (target_weight < 380.0)
+    return add_set(350.0, 1) if (target_weight < 390.0)
+    return add_set(355.0, 1) if (target_weight < 395.0)
+    return add_set(360.0, 1) if (target_weight < 400.0)
+    return add_set(365.0, 1)
   end
 end
spec/models/warm_up_spec.rb
@@ -1,20 +1,19 @@
 require 'rails_helper'
 
 describe WarmUp do
-  describe ".calculate_for" do
-
+  describe ".new" do
     describe "squat" do
       let(:squat) { build(:exercise, name: 'Squat') }
 
       (45..60).step(5).each do |target_weight|
         it "has zero warm up sets" do
-          expect(WarmUp.calculate_for(squat, target_weight).sets).to be_empty
+          expect(WarmUp.new(squat, target_weight).sets).to be_empty
         end
       end
 
       (65..400).step(5).each do |target_weight|
         it "calculates the warm up sets at #{target_weight} lbs" do
-          sets = WarmUp.calculate_for(squat, target_weight).sets
+          sets = WarmUp.new(squat, target_weight).sets
           expect(sets).to be_present
           if target_weight >= 350
             expect(sets.length).to eql(9)
@@ -42,13 +41,13 @@ describe WarmUp do
 
       (45..100).step(5).each do |target_weight|
         it "has zero warm up sets" do
-          expect(WarmUp.calculate_for(barbell_row, target_weight).sets).to be_empty
+          expect(WarmUp.new(barbell_row, target_weight).sets).to be_empty
         end
       end
 
       (105..400).step(5).each do |target_weight|
         it "calculates the warm up sets for #{target_weight} lbs" do
-          sets = WarmUp.calculate_for(barbell_row, target_weight).sets
+          sets = WarmUp.new(barbell_row, target_weight).sets
           expect(sets).to be_present
           if target_weight >= 350
             expect(sets.length).to eql(6)
@@ -72,13 +71,13 @@ describe WarmUp do
 
       (45..150).step(5).each do |target_weight|
         it "has zero warm up sets at #{target_weight} lbs" do
-          expect(WarmUp.calculate_for(deadlift, target_weight).sets).to be_empty
+          expect(WarmUp.new(deadlift, target_weight).sets).to be_empty
         end
       end
 
       (155..400).step(5).each do |target_weight|
         it "calculates the warm up sets for #{target_weight} lbs" do
-          sets = WarmUp.calculate_for(deadlift, target_weight).sets
+          sets = WarmUp.new(deadlift, target_weight).sets
           expect(sets).to be_present
           if target_weight >= 350
             expect(sets.length).to eql(6)