Class: Fit4Ruby::Activity

Inherits:
FitDataRecord show all
Defined in:
lib/fit4ruby/Activity.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from FitDataRecord

#rename, #write

Constructor Details

#initializeActivity

Returns a new instance of Activity.



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/fit4ruby/Activity.rb', line 25

def initialize
  super('activity')
  rename('timestamp', 'start_time')
  rename('local_timestamp', 'local_start_time')
  rename('total_timer_time', 'duration')
  @start_time = nil
  @local_start_time = nil
  @duration = nil
  @num_sessions = 0
  @sessions = []
  @laps = []
  @records = []
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/fit4ruby/Activity.rb', line 67

def method_missing(method_name, *args, &block)
  acc_fields = [ :distance ]
  avg_fields = [ :avg_speed ]

  if acc_fields.include?(method_name)
    total = 0
    @sessions.each do |s|
      total += s.send(method_name, *args, &block)
    end
    return total
  elsif avg_fields.include?(method_name)
    total = 0
    count = 0
    return 0 if @sessions.empty?

    @sessions.each do |s|
      total += s.send(method_name, *args, &block)
      count += 1
    end
    return total / count
  else
    Log.fatal "Unknown data field: #{method_name}"
  end
end

Instance Attribute Details

#durationObject

Returns the value of attribute duration.



22
23
24
# File 'lib/fit4ruby/Activity.rb', line 22

def duration
  @duration
end

#lapsObject

Returns the value of attribute laps.



22
23
24
# File 'lib/fit4ruby/Activity.rb', line 22

def laps
  @laps
end

#local_start_timeObject

Returns the value of attribute local_start_time.



22
23
24
# File 'lib/fit4ruby/Activity.rb', line 22

def local_start_time
  @local_start_time
end

#recordsObject

Returns the value of attribute records.



22
23
24
# File 'lib/fit4ruby/Activity.rb', line 22

def records
  @records
end

#sessionsObject

Returns the value of attribute sessions.



22
23
24
# File 'lib/fit4ruby/Activity.rb', line 22

def sessions
  @sessions
end

#start_timeObject

Returns the value of attribute start_time.



22
23
24
# File 'lib/fit4ruby/Activity.rb', line 22

def start_time
  @start_time
end

Instance Method Details

#checkObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/fit4ruby/Activity.rb', line 39

def check
  unless @start_time && @start_time >= Time.parse('1990-01-01')
    Log.error "Activity has no valid start time"
  end
  unless @duration
    Log.error "Activity has no valid duration"
  end
  unless @num_sessions == @sessions.count
    Log.error "Activity record requires #{@num_sessions}, but "
              "#{@sessions.length} session records were found in the "
              "FIT file."
  end
  @sessions.each { |s| s.check(self) }
end

#new_lapObject



97
98
99
100
# File 'lib/fit4ruby/Activity.rb', line 97

def new_lap
  @laps << (lap = Lap.new)
  lap
end

#new_recordObject



102
103
104
105
# File 'lib/fit4ruby/Activity.rb', line 102

def new_record
  @records << (record = Record.new)
  record
end

#new_sessionObject



92
93
94
95
# File 'lib/fit4ruby/Activity.rb', line 92

def new_session
  @sessions << (session = Session.new)
  session
end

#set(field, value) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/fit4ruby/Activity.rb', line 54

def set(field, value)
  case field
  when 'timestamp'
    @start_time = value
  when 'local_timestamp'
    @local_start_time = value
  when 'total_timer_time'
    @duration = value
  when 'num_sessions'
    @num_sessions = value
  end
end

#to_sObject



107
108
109
110
111
112
113
114
# File 'lib/fit4ruby/Activity.rb', line 107

def to_s
  str = ''
  @sessions.each do |s|
    str << "\n\n" unless str.empty?
    str << s.to_s
  end
  str
end