master
1class Csv::Workout
2 attr_accessor :date, :note, :workout
3 attr_accessor :body_weight_kg, :body_weight_lb
4 attr_accessor :exercises
5
6 def initialize(attributes = {})
7 attributes.each do |attribute|
8 send("#{attribute.first}=", attribute.last)
9 end
10 @exercises = []
11 end
12
13 def workout
14 find(OpenStruct.new(name: 'Deadlift')) ? 'B' : 'A'
15 end
16
17 def find(exercise)
18 exercises.detect do |x|
19 x.matches?(exercise)
20 end
21 end
22
23 def self.map_from(row, user)
24 date = user.time_zone.local_to_utc(Date.strptime(row[0], "%m/%d/%y").to_time)
25
26 workout = new(date: date, note: row[1], body_weight_kg: row[2], body_weight_lb: row[3])
27 # skip additional exercises for now
28 row[4..-1].take(3 * 8).each_slice(8) do |slice|
29 workout.exercises << Csv::Exercise.new(
30 name: slice[0],
31 weight_kg: slice[1],
32 weight_lb: slice[2],
33 sets: slice[3..(slice.size)],
34 )
35 end
36
37 # import additional exercises
38 row[(4 + (3 * 8))..-1].each_slice(6) do |slice|
39 next if slice[0].nil?
40 exercise = Csv::Exercise.new(
41 name: slice[0],
42 weight_kg: slice[1],
43 weight_lb: slice[2],
44 sets: slice[3..(slice.size)],
45 )
46 workout.exercises << exercise
47 end
48 workout
49 end
50end