Commit 88dc8be
Changed files (4)
app
models
spec
app/models/email_processor.rb
@@ -1,9 +1,15 @@
class EmailProcessor
+ attr_reader :email
+
def initialize(email)
@email = email
end
def process
- Rails.logger.info(@email.inspect)
+ user = User.find_by!(email: email.from[:email])
+
+ email.attachments.each do |attachment|
+ BackupFile.new(user, attachment).process_later(Program.stronglifts)
+ end
end
end
spec/fixtures/spreadsheet-stronglifts.csv
@@ -0,0 +1,101 @@
+"Date","Note","Workout","Body Weight (KG)","Body Weight (LB)","Exercise 1","Weight (KG)","Weight (LB)","Set 1","Set 2","Set 3","Set 4","Set 5","Exercise 2","Weight (KG)","Weight (LB)","Set 1","Set 2","Set 3","Set 4","Set 5","Exercise 3","Weight (KG)","Weight (LB)","Set 1","Set 2","Set 3","Set 4","Set 5","Arm work","Weight (KG)","Weight (LB)","Set 1","Set 2","Set 3"
+02/03/15,"",A,92.87,205,Squat,20,45,5,5,5,5,5,Bench press,30,65,5,5,5,5,5,Barbell row,30,65,5,5,5,5,5,,,,,
+04/03/15,"",B,92.87,205,Squat,30,65,5,5,5,5,5,Overhead press,27.5,60,5,5,5,5,5,Deadlift,42.5,95,5,,,,,,,,,
+07/03/15,"",A,92.87,205,Squat,32.5,70,5,5,5,5,5,Bench press,35,75,5,5,5,5,5,Barbell row,32.5,70,5,5,5,5,5,,,,,
+09/03/15,"",B,92.87,205,Squat,35,75,5,5,5,5,5,Overhead press,30,65,5,5,5,5,5,Deadlift,47.5,105,5,,,,,,,,,
+11/03/15,"",A,92.87,205,Squat,37.5,80,5,5,5,5,5,Bench press,37.5,80,5,5,5,5,5,Barbell row,35,75,5,5,5,5,5,,,,,
+14/03/15,"",B,92.87,205,Squat,37.5,85,5,5,5,5,5,Overhead press,32.5,70,5,5,5,5,5,Deadlift,52.5,115,5,,,,,Chinups,0,0,5,3,2
+16/03/15,"",A,92.87,205,Squat,40,90,5,5,5,5,5,Bench press,37.5,85,5,5,5,5,5,Barbell row,37.5,80,5,5,5,5,5,,,,,
+18/03/15,"",B,92.87,205,Squat,42.5,95,5,5,5,5,5,Overhead press,35,75,5,5,5,5,5,Deadlift,57.5,125,5,,,,,Chinups,0,0,5,4,3
+21/03/15,"",A,92.87,205,Squat,45,100,5,5,5,5,5,Bench press,40,90,5,5,5,5,5,Barbell row,37.5,85,5,5,5,5,5,Dips,0,0,10,10,8
+23/03/15,"",B,93.77,207,Squat,47.5,105,5,5,5,5,5,Overhead press,37.5,80,5,5,5,5,5,Deadlift,60,135,5,,,,,Chinups,0,0,6,5,4
+25/03/15,"",A,92.87,205,Squat,50,110,5,5,5,5,5,Bench press,42.5,95,5,5,5,5,5,Barbell row,40,90,5,5,5,5,5,Dips,0,0,10,10,6
+28/03/15,"",B,92.87,205,Squat,52.5,115,5,5,5,5,5,Overhead press,37.5,85,5,5,5,5,5,Deadlift,65,145,5,,,,,Chinups,0,0,5,4,3
+30/03/15,"",A,92.87,205,Squat,55,120,5,5,5,5,5,Bench press,45,100,5,5,5,5,5,Barbell row,42.5,95,5,5,5,5,5,Dips,0,0,10,10,9
+01/04/15,"",B,92.87,205,Squat,57.5,125,5,5,5,5,5,Overhead press,40,90,5,5,5,5,5,Deadlift,70,155,5,,,,,Chinups,0,0,3,3,3
+04/04/15,"",A,94.68,209,Squat,60,130,5,5,5,5,5,Bench press,47.5,105,5,5,5,5,5,Barbell row,45,100,5,5,5,5,5,Dips,0,0,10,10,8
+07/04/15,"",B,94.68,209,Squat,60,135,5,5,5,5,5,Overhead press,42.5,95,5,5,5,4,5,Deadlift,75,165,5,,,,,Chinups,0,0,3,2,2
+09/04/15,"",A,94.68,209,Squat,62.5,140,5,5,5,5,5,Bench press,50,110,5,5,5,5,5,Barbell row,47.5,105,5,5,5,5,5,Dips,0,0,10,10,10
+11/04/15,"",B,94.68,209,Squat,65,145,5,5,5,5,5,Overhead press,42.5,95,5,5,5,5,5,Deadlift,80,175,5,,,,,Chinups,0,0,3,3,3
+13/04/15,"",A,94.68,209,Squat,67.5,150,5,5,5,5,5,Bench press,52.5,115,5,5,5,5,5,Barbell row,50,110,5,5,5,5,5,Dips,0,0,10,10,9
+15/04/15,"",B,94.68,209,Squat,70,155,5,5,5,5,5,Overhead press,45,100,5,5,5,5,5,Deadlift,82.5,185,5,,,,,Chinups,0,0,3,3,2
+18/04/15,"",A,94.68,209,Squat,72.5,160,5,5,5,5,5,Bench press,55,120,5,5,5,5,5,Barbell row,52.5,115,5,5,5,5,5,Dips,2.5,5,5,5,5
+20/04/15,"",B,94.68,209,Squat,75,165,5,5,5,5,5,Overhead press,47.5,105,5,5,5,5,4,Deadlift,87.5,195,5,,,,,Chinups,0,0,4,3,3
+25/04/15,"",A,94.68,209,Squat,77.5,170,5,5,5,5,5,Bench press,57.5,125,5,5,5,5,5,Barbell row,55,120,5,5,3,5,4,Dips,2.5,7.5,5,5,5
+27/04/15,"",B,93.77,207,Squat,80,175,5,5,5,5,5,Overhead press,47.5,105,5,5,5,5,4,Deadlift,92.5,205,5,,,,,Chinups,0,0,4,3,3
+29/04/15,"",A,93.77,207,Squat,82.5,180,5,5,5,5,5,Bench press,60,130,5,5,5,5,5,Barbell row,55,120,5,5,5,4,4,Dips,5,10,5,5,4
+02/05/15,"",B,94.68,209,Squat,82.5,185,5,5,5,5,5,Overhead press,47.5,105,5,5,5,5,4,Deadlift,97.5,215,5,,,,,Chinups,0,0,4,3,2
+04/05/15,"",A,94.68,209,Squat,85,190,5,5,5,5,5,Bench press,60,135,5,5,5,5,5,Barbell row,55,120,5,5,5,5,5,Dips,5,10,5,5,5
+06/05/15,"",B,94.68,209,Squat,87.5,195,5,5,5,5,5,Overhead press,40,90,5,5,5,5,5,Deadlift,102.5,225,4,,,,,Chinups,0,0,5,3,3
+09/05/15,"",A,94.68,209,Squat,90,200,,,,,,Bench press,62.5,140,5,5,5,5,5,Barbell row,57.5,125,5,5,5,5,5,Dips,0,0,10,10,6
+11/05/15,"",B,94.68,209,Squat,90,200,,,,,,Overhead press,42.5,95,5,5,5,5,5,Deadlift,102.5,225,5,,,,,Chinups,0,0,5,4,3
+13/05/15,"",A,94.68,209,Squat,90,200,,,,,,Bench press,65,145,5,5,5,5,5,Barbell row,60,130,5,4,4,4,4,Dips,0,0,8,4,4
+16/05/15,"",B,94.68,209,Squat,80,175,,,,,,Overhead press,45,100,5,5,5,4,5,Deadlift,105,230,5,,,,,Chinups,0,0,5,4,4
+23/05/15,"",A,94.68,209,Squat,70,155,,,,,,Bench press,67.5,150,5,5,5,5,5,Barbell row,60,130,5,4,4,5,4,Dips,0,0,10,7,6
+25/05/15,"",B,91.05,201,Squat,70,155,,,,,,Overhead press,45,100,5,5,5,5,5,Deadlift,105,235,5,,,,,Chinups,0,0,5,4,3
+27/05/15,"",A,91.05,201,Squat,70,155,,,,,,Bench press,70,155,5,5,5,5,5,Barbell row,60,130,5,5,4,4,4,Dips,0,0,9,5,5
+30/05/15,"",B,92.41,204,Squat,60,135,4,,,,,Overhead press,47.5,105,5,5,4,5,4,Deadlift,107.5,240,5,,,,,Chinups,0,0,5,5,4
+01/06/15,"",A,92.41,204,Squat,60,135,5,5,5,5,5,Bench press,72.5,160,5,5,5,5,5,Barbell row,52.5,115,5,5,5,5,5,Dips,0,0,7,7,6
+03/06/15,"",B,92.41,204,Squat,62.5,140,5,5,5,5,5,Overhead press,47.5,105,5,5,5,5,5,Deadlift,110,245,5,,,,,Chinups,0,0,4,3,3
+06/06/15,"",A,92.41,204,Squat,65,145,5,5,5,5,5,Bench press,75,165,5,5,5,5,4,Barbell row,55,120,5,5,5,5,5,Dips,0,0,10,5,3
+08/06/15,"",B,92.41,204,Squat,67.5,150,5,5,5,5,5,Overhead press,47.5,105,5,5,5,5,5,Deadlift,112.5,250,5,,,,,Chinups,0,0,5,4,3
+10/06/15,"",A,92.41,204,Squat,70,155,5,5,5,5,5,Bench press,75,165,5,5,5,5,5,Barbell row,57.5,125,5,5,4,5,4,Dips,0,0,10,6,4
+13/06/15,"",B,92.41,204,Squat,72.5,160,5,5,5,5,5,Overhead press,50,110,5,5,5,5,5,Deadlift,115,255,5,,,,,Chinups,0,0,-1,-1,-1
+15/06/15,"",A,92.41,204,Squat,75,165,5,5,5,5,5,Bench press,77.5,170,5,5,5,5,5,Barbell row,57.5,125,5,5,5,5,4,Dips,0,0,10,9,5
+17/06/15,"",B,92.41,204,Squat,77.5,170,5,5,5,5,5,Overhead press,50,110,5,5,5,4,3,Deadlift,117.5,260,5,,,,,,,,,
+20/06/15,"",A,92.41,204,Squat,80,175,5,5,5,5,5,Bench press,80,175,5,5,5,4,4,Barbell row,57.5,125,5,5,5,5,5,Dips,0,0,8,5,1
+22/06/15,"",B,92.41,204,Squat,82.5,180,5,5,5,5,5,Overhead press,50,110,5,5,5,5,5,Deadlift,120,265,5,,,,,,,,,
+24/06/15,"",A,92.41,204,Squat,82.5,185,5,5,5,5,5,Bench press,80,175,5,5,5,5,5,Barbell row,60,130,5,5,5,5,5,Dips,0,0,10,6,6
+27/06/15,"",B,94.22,208,Squat,85,190,5,5,5,5,5,Overhead press,52.5,115,5,3,5,4,2,Deadlift,122.5,270,3,,,,,,,,,
+29/06/15,"",A,94.22,208,Squat,87.5,195,5,5,5,5,5,Bench press,82.5,180,5,4,4,3,0,Barbell row,60,135,5,4,5,4,5,Dips,0,0,5,5,2
+01/07/15,"",B,94.22,208,Squat,90,200,,,,,,Overhead press,52.5,115,,,,,,Deadlift,122.5,270,,,,,,,,,,
+04/07/15,"",A,94.22,208,Squat,90,200,5,5,5,5,4,Bench press,82.5,180,4,4,4,,,Barbell row,60,135,5,5,4,4,5,Dips,0,0,10,8,4
+06/07/15,"",B,94.22,208,Squat,90,200,5,5,5,5,5,Overhead press,45,100,5,5,5,4,4,Deadlift,107.5,240,5,,,,,,,,,
+08/07/15,"",A,95.13,210,Squat,92.5,205,5,5,5,5,5,Bench press,82.5,180,5,2,3,3,3,Barbell row,60,135,5,5,5,5,5,Dips,0,0,5,5,6
+11/07/15,"",B,95.13,210,Squat,95,210,5,5,5,5,5,Overhead press,45,100,5,5,5,5,5,Deadlift,110,245,5,,,,,,,,,
+13/07/15,"",A,95.13,210,Squat,97.5,215,5,5,5,5,5,Bench press,72.5,160,5,5,5,5,4,Barbell row,62.5,140,5,4,5,4,5,Dips,0,0,10,6,6
+15/07/15,"",B,95.13,210,Squat,100,220,5,4,5,5,4,Overhead press,45,102,5,5,5,5,5,Deadlift,112.5,250,5,,,,,,,,,
+18/07/15,"",A,95.58,211,Squat,100,220,5,5,5,5,5,Bench press,72.5,160,5,5,5,5,5,Barbell row,62.5,140,5,5,4,4,4,Dips,0,0,10,9,6
+20/07/15,"",B,95.58,211,Squat,102.5,225,5,5,5,5,5,Overhead press,47.5,104,5,5,5,5,5,Deadlift,115,255,5,,,,,,,,,
+22/07/15,"",A,95.58,211,Squat,105,230,5,5,5,5,5,Bench press,72.5,162,5,5,5,5,5,Barbell row,62.5,140,5,5,5,4,5,Dips,2.5,2.5,5,5,5
+25/07/15,"",B,96.94,214,Squat,105,235,5,5,5,5,5,Overhead press,47.5,106,5,5,5,5,5,Deadlift,117.5,260,5,,,,,,,,,
+27/07/15,"",A,96.94,214,Squat,107.5,240,5,5,5,5,5,Bench press,75,165,5,5,5,5,5,Barbell row,57.5,125,5,5,5,5,5,Dips,2.5,5,5,5,5
+29/07/15,"",B,96.94,214,Squat,110,245,5,5,5,5,5,Overhead press,47.5,107,5,5,5,5,5,Deadlift,120,265,5,,,,,,,,,
+01/08/15,"",A,96.94,214,Squat,112.5,250,5,2,5,5,4,Bench press,75,167,5,5,5,4,4,Barbell row,60,130,5,5,5,5,5,Dips,2.5,7.5,5,5,4
+04/08/15,"",B,96.94,214,Squat,112.5,250,5,4,5,5,5,Overhead press,50,110,5,5,5,5,5,Deadlift,122.5,270,5,,,,,,,,,
+08/08/15,"",A,95.13,210,Squat,112.5,250,5,5,5,5,4,Bench press,75,167,5,5,4,4,4,Barbell row,60,135,5,5,5,5,5,Dips,2.5,7.5,5,5,5
+10/08/15,"",B,95.13,210,Squat,102.5,225,5,5,5,5,5,Overhead press,50,112,5,,,,,Deadlift,125,275,5,,,,,,,,,
+12/08/15,"injured right shoulder",A,95.13,210,Squat,105,230,5,,,,,Bench press,75,167,,,,,,Barbell row,62.5,140,1,,,,,Dips,5,10,-1,-1,-1
+15/08/15,"",B,95.13,210,Squat,105,230,,,,,,Overhead press,50,112,5,5,5,3,4,Deadlift,127.5,280,5,,,,,,,,,
+17/08/15,"",A,95.13,210,Squat,105,230,4,,,,,Bench press,67.5,150,5,5,5,5,5,Barbell row,62.5,140,5,5,5,5,5,,,,,
+19/08/15,"",B,95.13,210,Squat,92.5,205,5,5,5,5,5,Overhead press,50,112,5,5,5,5,5,Deadlift,127.5,285,5,,,,,,,,,
+22/08/15,"",A,95.13,210,Squat,95,210,5,5,5,5,5,Bench press,67.5,152,5,5,5,5,5,Barbell row,65,145,5,5,5,4,5,Dips,0,0,10,7,6
+24/08/15,"",B,95.13,210,Squat,97.5,215,5,5,5,5,5,Overhead press,52.5,115,5,4,4,2,3,Deadlift,130,290,5,,,,,,,,,
+26/08/15,"",A,95.13,210,Squat,100,220,5,5,5,5,5,Bench press,70,155,5,5,5,5,5,Barbell row,65,145,5,5,5,5,4,Dips,0,0,8,5,5
+29/08/15,"",B,97.4,215,Squat,102.5,225,5,5,5,5,5,Overhead press,52.5,115,5,5,3,3,5,Deadlift,132.5,295,5,,,,,,,,,
+31/08/15,"",A,97.4,215,Squat,105,230,5,5,5,5,5,Bench press,70,157,5,5,5,5,5,Barbell row,65,145,4,5,5,5,5,Dips,0,0,10,10,5
+02/09/15,"",B,97.4,215,Squat,105,235,5,5,5,5,5,Overhead press,52.5,115,5,4,3,2,1,Deadlift,135,300,5,,,,,,,,,
+07/09/15,"",A,97.4,215,Squat,107.5,240,5,5,5,,,Bench press,72.5,160,5,5,5,5,5,Barbell row,60,130,5,5,5,5,5,Dips,0,0,7,4,3
+10/09/15,"",B,97.4,215,Squat,107.5,240,5,5,5,5,5,Overhead press,45,100,5,5,5,5,5,Deadlift,137.5,305,3,,,,,,,,,
+12/09/15,"",A,96.94,214,Squat,110,245,5,5,5,5,5,Bench press,72.5,162,5,5,5,5,5,Barbell row,60,135,5,5,5,5,5,Dips,2.5,5,5,5,5
+14/09/15,"",B,96.94,214,Squat,112.5,250,5,5,5,,,Overhead press,45,102,5,5,5,5,5,Deadlift,137.5,305,5,,,,,,,,,
+16/09/15,"",A,96.94,214,Squat,112.5,250,5,5,5,,,Bench press,75,165,5,5,5,5,5,Barbell row,62.5,140,5,5,5,5,5,Dips,2.5,7.5,5,5,5
+19/09/15,"",B,97.4,215,Squat,112.5,250,2,3,5,5,5,Overhead press,47.5,105,5,5,5,5,5,Deadlift,140,310,5,,,,,,,,,
+22/09/15,"",A,97.4,215,Squat,102.5,225,5,5,5,5,5,Bench press,75,167,5,5,5,5,4,Barbell row,65,145,5,5,5,5,5,Dips,5,10,5,5,5
+24/09/15,"",B,97.4,215,Squat,105,230,5,5,5,,,Overhead press,47.5,107,5,5,5,5,5,Deadlift,142.5,315,2,,,,,,,,,
+26/09/15,"",A,97.4,215,Squat,102.5,225,5,5,5,,,Bench press,75,165,5,5,5,5,5,Barbell row,67.5,150,5,5,5,4,5,Dips,5,12.5,5,5,5
+28/09/15,"",B,97.4,215,Squat,105,230,5,5,5,,,Overhead press,50,110,5,5,5,5,5,Deadlift,142.5,315,3,,,,,,,,,
+02/10/15,"",A,97.4,215,Squat,105,235,5,5,5,,,Bench press,75,167,5,5,5,5,5,Barbell row,67.5,150,5,5,5,5,5,Dips,7.5,15,5,5,5
+05/10/15,"",B,97.4,215,Squat,107.5,240,5,5,5,,,Overhead press,50,112,5,5,5,5,5,Deadlift,142.5,315,3,,,,,,,,,
+08/10/15,"",A,97.4,215,Squat,110,245,5,5,5,,,Bench press,77.5,170,5,5,5,5,5,Barbell row,70,155,5,5,5,5,4,Dips,7.5,17.5,5,5,4
+10/10/15,"",B,97.4,215,Squat,112.5,250,5,5,5,,,Overhead press,52.5,115,5,5,5,5,5,Deadlift,127.5,280,5,,,,,,,,,
+17/10/15,"",A,97.4,215,Squat,102.5,225,5,5,5,,,Bench press,67.5,150,5,5,5,5,5,Barbell row,60,135,5,5,5,5,5,Dips,0,0,10,9,6
+21/10/15,"",B,97.4,215,Squat,105,230,5,5,5,,,Overhead press,45,100,5,5,5,5,5,Deadlift,127.5,285,5,,,,,,,,,
+23/10/15,"",A,97.4,215,Squat,105,235,5,5,5,,,Bench press,70,155,5,5,5,5,5,Barbell row,62.5,140,5,5,5,5,4,Dips,2.5,5,5,5,5
+25/10/15,"",B,97.4,215,Squat,107.5,240,5,5,5,,,Overhead press,47.5,105,5,5,5,5,5,Deadlift,130,290,4,,,,,,,,,
+28/10/15,"",A,97.4,215,Squat,110,245,5,5,5,,,Bench press,72.5,160,5,5,5,5,5,Barbell row,62.5,140,5,5,5,5,5,Dips,2.5,7.5,5,5,5
+30/10/15,"",B,97.4,215,Squat,112.5,250,5,5,5,,,Overhead press,50,110,5,5,5,5,5,Deadlift,130,290,,,,,,,,,,
+01/11/15,"",A,97.4,215,Squat,115,255,5,5,5,,,Bench press,75,165,5,5,5,5,5,Barbell row,65,145,5,5,5,5,5,Dips,5,10,5,5,5
+04/11/15,"",B,97.4,215,Squat,117.5,260,5,5,5,,,Overhead press,52.5,115,5,5,4,4,2,Deadlift,117.5,260,,,,,,,,,,
+06/11/15,"",A,97.4,215,Squat,120,265,5,5,5,,,Bench press,77.5,170,5,5,5,5,5,Barbell row,67.5,150,5,5,5,5,5,Dips,5,12.5,5,5,5
+08/11/15,"",B,97.4,215,Squat,122.5,270,4,3,3,,,Overhead press,52.5,115,5,5,5,5,5,Deadlift,105,230,5,,,,,,,,,
spec/models/email_processor.rb
@@ -0,0 +1,25 @@
+require "rails_helper"
+
+describe EmailProcessor do
+ subject { EmailProcessor.new(email) }
+ let(:email) { build(:email, :with_attachment) }
+
+ context "with a csv attachment" do
+ let(:backup_file) { double(process_later: true) }
+ let(:user) { create(:user) }
+
+ before :each do
+ email.from[:email] = user.email
+ end
+
+ it "imports the csv attachment" do
+ allow(BackupFile).to receive(:new)
+ .with(user, email.attachments.first)
+ .and_return(backup_file)
+
+ subject.process
+
+ expect(backup_file).to have_received(:process_later).with(Program.stronglifts)
+ end
+ end
+end
spec/factories.rb
@@ -22,4 +22,34 @@ FactoryGirl.define do
association :program
name { FFaker::Internet.user_name }
end
+ factory :email, class: OpenStruct do
+ to [{
+ full: 'to_user@email.com',
+ email: 'to_user@email.com',
+ token: 'to_user',
+ host: 'email.com',
+ name: nil
+ }]
+ from({
+ token: 'from_user',
+ host: 'email.com',
+ email: 'from_email@email.com',
+ full: 'From User <from_user@email.com>',
+ name: 'From User'
+ })
+ subject 'email subject'
+ body 'Hello!'
+ attachments {[]}
+
+ trait :with_attachment do
+ attachments {[
+ ActionDispatch::Http::UploadedFile.new({
+ filename: 'spreadsheet-stronglifts.csv',
+ type: 'text/plain',
+ tempfile: File.new("#{File.expand_path(File.dirname(__FILE__))}/fixtures/spreadsheet-stronglifts.csv")
+ #tempfile: fixture_file_upload("spreadsheet-stronglifts.csv")
+ })
+ ]}
+ end
+ end
end