class Fit4Ruby::FieldDescription

This class corresponds to the FieldDescription FIT message.

Public Class Methods

new(field_values = {}) click to toggle source

Create a new FieldDescription object. @param field_values [Hash] Hash that provides initial values for certain

fields.
Calls superclass method
# File lib/fit4ruby/FieldDescription.rb, line 25
def initialize(field_values = {})
  super('field_description')
  set_field_values(field_values)

  @full_field_name = nil
end

Public Instance Methods

create_global_definition(fit_entity) click to toggle source
# File lib/fit4ruby/FieldDescription.rb, line 48
def create_global_definition(fit_entity)
  messages = fit_entity.developer_fit_messages
  unless (gfm = GlobalFitMessages[@native_mesg_num])
    Log.error "Developer field description references unknown global " +
      "message number #{@native_mesg_num}"
    return
  end

  msg = messages[@native_mesg_num] ||
    messages.message(@native_mesg_num, gfm.name)
  unless (@fit_base_type_id & 0x7F) < FIT_TYPE_DEFS.size
    Log.error "fit_base_type_id #{@fit_base_type_id} is too large"
    return
  end

  # A fit file may include multiple definitions of the same field. We
  # ignore all subsequent definitions.
  return if msg.has_field?(full_field_name(fit_entity.top_level_record.
                                           developer_data_ids))

  options = {}
  options[:scale] = @scale if @scale
  options[:offset] = @offset if @offset
  options[:array] = @array if @array
  options[:unit] = @units
  msg.field(@field_definition_number,
            FIT_TYPE_DEFS[@fit_base_type_id & 0x7F][1],
            @full_field_name, options)
end
full_field_name(developer_data_ids) click to toggle source
# File lib/fit4ruby/FieldDescription.rb, line 32
def full_field_name(developer_data_ids)
  return @full_field_name if @full_field_name

  if @developer_data_index >=
       developer_data_ids.size
     Log.error "Developer data index #{@developer_data_index} is too large"
     return
  end

  app_id = developer_data_ids[@developer_data_index].application_id
  # Convert the byte array with the app ID into a 16 character hex string.
  app_id_str = app_id.map { |i| '%02X' % i }.join('')
  @full_field_name =
    "#{@field_name.gsub(/[^A-Za-z0-9_]/, '_')}_#{app_id_str}"
end