class Fit4Ruby::FitDefinitionField

The FitDefinitionField models the part of the FIT file that contains the template definition for a field of a FitMessageRecord. It should match the corresponding definition in GlobalFitMessages. In case we don’t have a known entry in GlobalFitMessages we can still read the file since we know the exact size of the binary records.

Public Instance Methods

init() click to toggle source
# File lib/fit4ruby/FitDefinitionField.rb, line 39
def init
  @global_message_number = parent.parent.global_message_number.snapshot
  @global_message_definition = GlobalFitMessages[@global_message_number]
  field_number = field_definition_number.snapshot
  if @global_message_definition &&
     (field = @global_message_definition.fields_by_number[field_number])
     @name = field.respond_to?('name') ? field.name :
                                         "choice_#{field_number}"
     @type = field.respond_to?('type') ? field.type : nil

     if @type && (td = FIT_TYPE_DEFS[checked_base_type_number]) &&
        td[0] != @type
       Log.warn "#{@global_message_number}:#{@name} must be of type " +
       "#{@type}, not #{td[0]}"
     end
  else
    @name = "field#{field_definition_number.snapshot}"
    @type = nil
    Log.debug { "Unknown field number #{field_definition_number} " +
                "in global message #{@global_message_number}" }
  end
end
name() click to toggle source
# File lib/fit4ruby/FitDefinitionField.rb, line 62
def name
  init unless @global_message_number
  @name
end
to_machine(value) click to toggle source
# File lib/fit4ruby/FitDefinitionField.rb, line 67
def to_machine(value)
  init unless @global_message_number
  value = nil if value == undefined_value

  field_number = field_definition_number.snapshot
  if value.kind_of?(Array)
    ary = []
    value.each { |v| ary << to_machine(v) }
    return ary
  else
    if @global_message_definition &&
       (field = @global_message_definition.
        fields_by_number[field_number]) &&
       field.respond_to?('to_machine')
      return field.to_machine(value)
    else
      return value
    end
  end
end
to_s(value) click to toggle source
# File lib/fit4ruby/FitDefinitionField.rb, line 88
def to_s(value)
  init unless @global_message_number
  value = nil if value == undefined_value

  if value.kind_of?(Array)
    s = '[ '
    value.each { |v| s << to_s(v) + ' ' }
    s + ']'
  else
    field_number = field_definition_number.snapshot
    if @global_message_definition &&
       (field = @global_message_definition.fields_by_number[field_number])
      field.to_s(value)
    else
      "[#{value.to_s}]"
    end
  end
end