Class: Fit4Ruby::Lap

Inherits:
FitDataRecord show all
Includes:
RecordAggregator
Defined in:
lib/fit4ruby/Lap.rb

Constant Summary

Constants inherited from FitDataRecord

FitDataRecord::RecordOrder

Instance Attribute Summary collapse

Attributes inherited from FitDataRecord

#message

Instance Method Summary collapse

Methods included from RecordAggregator

#aggregate, #aggregate_ascent_descent, #aggregate_geo_region, #aggregate_heart_rate, #aggregate_speed_distance, #aggregate_stance_time, #aggregate_strides, #aggregate_vertical_oscillation

Methods inherited from FitDataRecord

#<=>, #==, #get, #get_as, #inspect, #set, #set_field_values, #write

Methods included from Converters

#conversion_factor, #fit_time_to_time, #secsToDHMS, #secsToHM, #secsToHMS, #speedToPace, #time_to_fit_time

Constructor Details

#initialize(records, previous_lap, field_values, first_length_index, lengths) ⇒ Lap

Create a new Lap object.

Parameters:

  • records (Array of Records)

    Records to associate with the Lap.

  • lengths (Array of Lengths)

    Lengths to associate with the Lap.

  • first_length_index (Fixnum)

    Index of the first Length in this Lap.

  • previous_lap (Lap)

    Previous Lap on same Session.

  • field_values (Hash)

    Hash that provides initial values for certain fields.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/fit4ruby/Lap.rb', line 31

def initialize(records, previous_lap, field_values, first_length_index, lengths)
  super('lap')
  @lengths = lengths
  @meta_field_units['avg_stride_length'] = 'm'
  @records = records
  @previous_lap = previous_lap
  @lengths.each { |length| @records += length.records }
  @first_length_index = first_length_index
  @num_lengths = @lengths.length

  if previous_lap && previous_lap.records && previous_lap.records.last
    # Set the start time of the new lap to the timestamp of the last record
    # of the previous lap.
    @start_time = previous_lap.records.last.timestamp
  elsif records.first
    # Or to the timestamp of the first record.
    @start_time = records.first.timestamp
  end

  if records.last
    @total_elapsed_time = records.last.timestamp - @start_time
  end

  set_field_values(field_values)
end

Instance Attribute Details

#lengthsObject (readonly)

Returns the value of attribute lengths.



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

def lengths
  @lengths
end

#recordsObject (readonly)

Returns the value of attribute records.



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

def records
  @records
end

Instance Method Details

#avg_stride_lengthObject

Compute the average stride length for this Session.



79
80
81
82
83
# File 'lib/fit4ruby/Lap.rb', line 79

def avg_stride_length
  return nil unless @total_distance && @total_strides

  @total_distance / (@total_strides * 2.0)
end

#check(index, activity) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/fit4ruby/Lap.rb', line 57

def check(index, activity)
  unless @message_index == index
    Log.fatal "message_index must be #{index}, not #{@message_index}"
  end

  return if @num_lengths.zero?

  unless @first_length_index
    Log.fatal 'first_length_index is not set'
  end

  @first_length_index.upto(@first_length_index - @num_lengths) do |i|
    if (length = activity.lengths[i])
      @lengths << length
    else
      Log.fatal "Lap references length #{i} which is not contained in "
      "the FIT file."
    end
  end
end