Class: Fit
- Inherits:
-
Object
- Object
- Fit
- Defined in:
- lib/fitreader/fit.rb
Instance Attribute Summary collapse
-
#header ⇒ Object
readonly
Returns the value of attribute header.
-
#messages ⇒ Object
readonly
Returns the value of attribute messages.
Instance Method Summary collapse
- #digest ⇒ Object
-
#initialize(io) ⇒ Fit
constructor
A new instance of Fit.
- #make_developer_fields(data_records) ⇒ Object
- #type(name) ⇒ Object
Constructor Details
#initialize(io) ⇒ Fit
Returns a new instance of Fit.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# 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., dev_field_defs) else d = DefinitionRecord.new(io, h.) end finished << defs[d.local_num] if defs.key? d.local_num defs[d.local_num] = d elsif h.data? d = defs[h.] 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 |
Instance Attribute Details
#header ⇒ Object (readonly)
Returns the value of attribute header.
12 13 14 |
# File 'lib/fitreader/fit.rb', line 12 def header @header end |
#messages ⇒ Object (readonly)
Returns the value of attribute messages.
12 13 14 |
# File 'lib/fitreader/fit.rb', line 12 def @messages end |
Instance Method Details
#digest ⇒ Object
54 55 56 |
# File 'lib/fitreader/fit.rb', line 54 def digest Hash[@messages.map { |x| [x.name, x.data.count] }] end |
#make_developer_fields(data_records) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# 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) ⇒ Object
58 59 60 |
# File 'lib/fitreader/fit.rb', line 58 def type(name) .find { |x| x.name == name } end |