class Fit
Attributes
header[R]
messages[R]
Public Class Methods
new(io)
click to toggle source
# File lib/fitreader/fit.rb, line 14 def initialize(io) @header = FileHeader.new(io) finished = [] begin defs = {} dev_field_defs = {} # until (io.pos - 14) >= header.num_record_bytes until ((@header.num_record_bytes + 14) - io.pos) == 0 h = RecordHeader.new(io) if h.definition? if h.has_dev_defs? d = DefinitionRecord.new(io, h.local_message_type, dev_field_defs) else d = DefinitionRecord.new(io, h.local_message_type) end finished << defs[d.local_num] if defs.key? d.local_num defs[d.local_num] = d elsif h.data? d = defs[h.local_message_type] data_record = DataRecord.new(io, d) if d.global_msg_num == 206 dev_field = make_developer_fields(data_record.fields) dev_field_defs[dev_field[:dev_data_idx].raw] = dev_field else d.data_records << data_record end else # TODO implement timestamps end end finished.push(*defs.values) io.close @messages = finished.group_by(&:global_msg_num) .map { |x| Message.new x } .reject { |x| x.data.nil? } rescue => e puts "error: #{e}\n#{e.backtrace}" end end
Public Instance Methods
digest()
click to toggle source
# File lib/fitreader/fit.rb, line 54 def digest Hash[@messages.map { |x| [x.name, x.data.count] }] end
make_developer_fields(data_records)
click to toggle source
# File lib/fitreader/fit.rb, line 62 def make_developer_fields(data_records) lookup = {0 => :dev_data_idx, 1 => :field_def_num, 2 => :base_type_id, 3 => :field_name, 8 => :units} map = {} data_records.each do |k,v| key = lookup[k] map[key] = v end map end
type(name)
click to toggle source
# File lib/fitreader/fit.rb, line 58 def type(name) messages.find { |x| x.name == name } end