lib/fit4ruby/FitDataRecord.rb in fit4ruby-0.0.2 vs lib/fit4ruby/FitDataRecord.rb in fit4ruby-0.0.3

- old
+ new

@@ -15,18 +15,21 @@ module Fit4Ruby class FitDataRecord + include Converters + def initialize(record_id) @message = GlobalFitMessages.find_by_name(record_id) # Create instance variables that correspond to every field of the - # corresponding FIT # data record. + # corresponding FIT data record. @message.fields.each do |field_number, field| create_instance_variable(field.name) end + @meta_field_units = {} @timestamp = Time.now end def set_field_values(field_values) field_values.each do |field, value| @@ -39,9 +42,32 @@ unless instance_variable_defined?(ivar_name) Log.warn("Unknown FIT record field '#{ivar_name}'") return end instance_variable_set('@' + name, value) + end + + def get(name) + ivar_name = '@' + name + return nil unless instance_variable_defined?(ivar_name) + + instance_variable_get('@' + name) + end + + def get_as(name, to_unit) + value = respond_to?(name) ? send(name) : get(name) + return nil if value.nil? + + if @meta_field_units.include?(name) + unit = @meta_field_units[name] + else + field = @message.find_by_name(name) + unless (unit = field.opts[:unit]) + Log.fatal "Field #{name} has no unit" + end + end + + value * conversion_factor(unit, to_unit) end def ==(fdr) @message.fields.each do |field_number, field| ivar_name = '@' + field.name