Class: Fit4Ruby::FieldDescription
- Inherits:
-
FitDataRecord
- Object
- FitDataRecord
- Fit4Ruby::FieldDescription
- Defined in:
- lib/fit4ruby/FieldDescription.rb
Overview
This class corresponds to the FieldDescription FIT message.
Constant Summary
Constants inherited from FitDataRecord
Fit4Ruby::FitDataRecord::RecordOrder
Constants included from BDFieldNameTranslator
BDFieldNameTranslator::BD_DICT
Instance Attribute Summary
Attributes inherited from FitDataRecord
Instance Method Summary collapse
- #create_global_definition(fit_entity) ⇒ Object
- #full_field_name(developer_data_ids) ⇒ Object
-
#initialize(field_values = {}) ⇒ FieldDescription
constructor
Create a new FieldDescription object.
Methods inherited from FitDataRecord
#<=>, #==, #export, #get, #get_as, #get_unit_by_name, #set, #set_field_values, #write
Methods included from BDFieldNameTranslator
Methods included from Converters
#conversion_factor, #fit_time_to_time, #secsToDHMS, #secsToHM, #secsToHMS, #speedToPace, #time_to_fit_time
Constructor Details
#initialize(field_values = {}) ⇒ FieldDescription
Create a new FieldDescription object.
25 26 27 28 29 30 |
# File 'lib/fit4ruby/FieldDescription.rb', line 25 def initialize(field_values = {}) super('field_description') set_field_values(field_values) @full_field_name = nil end |
Instance Method Details
#create_global_definition(fit_entity) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/fit4ruby/FieldDescription.rb', line 48 def create_global_definition(fit_entity) = fit_entity. unless (gfm = GlobalFitMessages[@native_mesg_num]) Log.error "Developer field description references unknown global " + "message number #{@native_mesg_num}" return end msg = [@native_mesg_num] || .(@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)) = {} [:scale] = @scale if @scale [:offset] = @offset if @offset [:array] = @array if @array [:unit] = @units msg.field(@field_definition_number, FIT_TYPE_DEFS[@fit_base_type_id & 0x7F][1], @full_field_name, ) end |
#full_field_name(developer_data_ids) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# 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 |