Class: Fit4Ruby::Activity
- Inherits:
-
FitDataRecord
- Object
- FitDataRecord
- Fit4Ruby::Activity
- Defined in:
- lib/fit4ruby/Activity.rb
Instance Attribute Summary collapse
-
#duration ⇒ Object
Returns the value of attribute duration.
-
#laps ⇒ Object
Returns the value of attribute laps.
-
#local_start_time ⇒ Object
Returns the value of attribute local_start_time.
-
#records ⇒ Object
Returns the value of attribute records.
-
#sessions ⇒ Object
Returns the value of attribute sessions.
-
#start_time ⇒ Object
Returns the value of attribute start_time.
Instance Method Summary collapse
- #check ⇒ Object
-
#initialize ⇒ Activity
constructor
A new instance of Activity.
- #method_missing(method_name, *args, &block) ⇒ Object
- #new_lap ⇒ Object
- #new_record ⇒ Object
- #new_session ⇒ Object
- #set(field, value) ⇒ Object
- #to_s ⇒ Object
Methods inherited from FitDataRecord
Constructor Details
#initialize ⇒ Activity
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
#duration ⇒ Object
Returns the value of attribute duration.
22 23 24 |
# File 'lib/fit4ruby/Activity.rb', line 22 def duration @duration end |
#laps ⇒ Object
Returns the value of attribute laps.
22 23 24 |
# File 'lib/fit4ruby/Activity.rb', line 22 def laps @laps end |
#local_start_time ⇒ Object
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 |
#records ⇒ Object
Returns the value of attribute records.
22 23 24 |
# File 'lib/fit4ruby/Activity.rb', line 22 def records @records end |
#sessions ⇒ Object
Returns the value of attribute sessions.
22 23 24 |
# File 'lib/fit4ruby/Activity.rb', line 22 def sessions @sessions end |
#start_time ⇒ Object
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
#check ⇒ Object
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_lap ⇒ Object
97 98 99 100 |
# File 'lib/fit4ruby/Activity.rb', line 97 def new_lap @laps << (lap = Lap.new) lap end |
#new_record ⇒ Object
102 103 104 105 |
# File 'lib/fit4ruby/Activity.rb', line 102 def new_record @records << (record = Record.new) record end |
#new_session ⇒ Object
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_s ⇒ Object
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 |