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.
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 53 54 |
# File 'lib/fitreader/fit.rb', line 15 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 = finished.group_by(&:global_msg_num) .map { |x| Message.new x } .reject { |x| x.data.nil? } rescue => e binding.pry puts "error: #{e}\n#{e.backtrace}" end end |
Instance Attribute Details
#header ⇒ Object (readonly)
Returns the value of attribute header.
13 14 15 |
# File 'lib/fitreader/fit.rb', line 13 def header @header end |
#messages ⇒ Object (readonly)
Returns the value of attribute messages.
13 14 15 |
# File 'lib/fitreader/fit.rb', line 13 def end |
Instance Method Details
#digest ⇒ Object
56 57 58 |
# File 'lib/fitreader/fit.rb', line 56 def digest Hash[.map { |x| [x.name, x.data.count] }] end |
#make_developer_fields(data_records) ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/fitreader/fit.rb', line 64 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
60 61 62 |
# File 'lib/fitreader/fit.rb', line 60 def type(name) .find { |x| x.name == name } end |