fit_parser 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,41 +1,28 @@
1
1
  module FitParser
2
2
  class File
3
3
  class Record
4
- def self.read(io)
5
- new.read(io)
6
- end
7
-
8
- def self.clear_definitions!
9
- @definitions = {}
10
- end
4
+ attr_reader :header, :content, :definitions
11
5
 
12
- def self.definitions=(value)
13
- @definitions = value
6
+ def initialize(definitions)
7
+ @definitions = definitions
14
8
  end
15
9
 
16
- def self.definitions
17
- @definitions
18
- end
19
-
20
- attr_reader :header, :content
21
-
22
10
  def read(io)
23
11
  @header = RecordHeader.read(io)
24
12
 
25
13
  @content = case @header.message_type.snapshot
26
14
  when 1
27
15
  Definition.read(io).tap do |definition|
28
- Record.definitions[@header.local_message_type.snapshot] = Data.generate(definition)
16
+ @definitions[@header.local_message_type.snapshot] = Data.generate(definition)
29
17
  end
30
18
  when 0
31
- definition = Record.definitions[@header.local_message_type.snapshot]
32
- raise "No definition for local message type: #{@header.local_message_type}" if definition.nil?
19
+ definition = @definitions[@header.local_message_type.snapshot]
20
+ fail "No definition for local message type: #{@header.local_message_type}" if definition.nil?
33
21
  definition.read(io)
34
22
  end
35
23
 
36
24
  self
37
25
  end
38
-
39
26
  end
40
27
  end
41
28
  end
@@ -10,7 +10,7 @@ module FitParser
10
10
  end
11
11
 
12
12
  def self.get_type(name)
13
- return Type.types[name] if Type.types.has_key? name
13
+ return Type.types[name] if Type.types.key?(name)
14
14
  type = Types.get_type_definition name
15
15
  Type.types[name] = type ? new(type) : nil
16
16
  end
@@ -20,8 +20,8 @@ module FitParser
20
20
  end
21
21
 
22
22
  def value(val)
23
- return nil unless is_valid(val)
24
- if @type.has_key? :method
23
+ return nil unless valid?(val)
24
+ if @type.key?(:method)
25
25
  Types.send(@type[:method], val, @type[:values], @type[:parameters])
26
26
  else
27
27
  values = @type[:values]
@@ -32,15 +32,16 @@ module FitParser
32
32
  end
33
33
 
34
34
  private
35
- def is_valid(val)
36
- if @type.has_key? :invalid
37
- invalid_value = @type[:invalid]
38
- else
39
- invalid_value = Types.get_type_definition(@type[:basic_type])[:invalid]
40
- end
41
- return false if val == invalid_value
42
- true
35
+
36
+ def valid?(val)
37
+ if @type.key?(:invalid)
38
+ invalid_value = @type[:invalid]
39
+ else
40
+ invalid_value = Types.get_type_definition(@type[:basic_type])[:invalid]
43
41
  end
42
+ return false if val == invalid_value
43
+ true
44
+ end
44
45
  end
45
46
  end
46
47
  end
@@ -48,23 +48,23 @@ module FitParser
48
48
  end
49
49
 
50
50
  # basic types
51
- FitParser::File::Types.add_type :enum, nil, :invalid => 0xFF
52
- FitParser::File::Types.add_type :sint8, nil, :invalid => 0x7F
53
- FitParser::File::Types.add_type :uint8, nil, :invalid => 0xFF
54
- FitParser::File::Types.add_type :sint16, nil, :invalid => 0x7FFF
55
- FitParser::File::Types.add_type :uint16, nil, :invalid => 0xFFFF
56
- FitParser::File::Types.add_type :sint32, nil, :invalid => 0x7FFFFFFF
57
- FitParser::File::Types.add_type :uint32, nil, :invalid => 0xFFFFFFFF
58
- FitParser::File::Types.add_type :string, nil, :invalid => 0x00
59
- FitParser::File::Types.add_type :float32, nil, :invalid => 0xFFFFFFFF
60
- FitParser::File::Types.add_type :float64, nil, :invalid => 0xFFFFFFFFFFFFFFFF
61
- FitParser::File::Types.add_type :uint8z, nil, :invalid => 0x00
62
- FitParser::File::Types.add_type :uint16z, nil, :invalid => 0x0000
63
- FitParser::File::Types.add_type :uint32z, nil, :invalid => 0x00000000
64
- FitParser::File::Types.add_type :byte, nil, :invalid => 0xFF
51
+ FitParser::File::Types.add_type :enum, nil, invalid: 0xFF
52
+ FitParser::File::Types.add_type :sint8, nil, invalid: 0x7F
53
+ FitParser::File::Types.add_type :uint8, nil, invalid: 0xFF
54
+ FitParser::File::Types.add_type :sint16, nil, invalid: 0x7FFF
55
+ FitParser::File::Types.add_type :uint16, nil, invalid: 0xFFFF
56
+ FitParser::File::Types.add_type :sint32, nil, invalid: 0x7FFFFFFF
57
+ FitParser::File::Types.add_type :uint32, nil, invalid: 0xFFFFFFFF
58
+ FitParser::File::Types.add_type :string, nil, invalid: 0x00
59
+ FitParser::File::Types.add_type :float32, nil, invalid: 0xFFFFFFFF
60
+ FitParser::File::Types.add_type :float64, nil, invalid: 0xFFFFFFFFFFFFFFFF
61
+ FitParser::File::Types.add_type :uint8z, nil, invalid: 0x00
62
+ FitParser::File::Types.add_type :uint16z, nil, invalid: 0x0000
63
+ FitParser::File::Types.add_type :uint32z, nil, invalid: 0x00000000
64
+ FitParser::File::Types.add_type :byte, nil, invalid: 0xFF
65
65
 
66
66
  # derived types
67
- FitParser::File::Types.add_type :file, :enum, :values => {
67
+ FitParser::File::Types.add_type :file, :enum, values: {
68
68
  1 => 'device',
69
69
  2 => 'settings',
70
70
  3 => 'sport',
@@ -80,7 +80,7 @@ FitParser::File::Types.add_type :file, :enum, :values => {
80
80
  20 => 'activity_summary',
81
81
  28 => 'monitoring_daily',
82
82
  32 => 'monitoring_b' }
83
- FitParser::File::Types.add_type :mesg_num, :uint16, :values => {
83
+ FitParser::File::Types.add_type :mesg_num, :uint16, values: {
84
84
  0 => 'file_id',
85
85
  1 => 'capabilities',
86
86
  2 => 'device_settings',
@@ -125,31 +125,31 @@ FitParser::File::Types.add_type :mesg_num, :uint16, :values => {
125
125
  145 => 'memo_glob',
126
126
  65280 => 'mfg_range_min',
127
127
  65534 => 'mfg_range_max' }
128
- FitParser::File::Types.add_type :checksum, :uint8, :values => {
128
+ FitParser::File::Types.add_type :checksum, :uint8, values: {
129
129
  0 => 'clear',
130
130
  1 => 'ok' }
131
- FitParser::File::Types.add_type :file_flags, :uint8z, :values => {
131
+ FitParser::File::Types.add_type :file_flags, :uint8z, values: {
132
132
  0x02 => 'read',
133
133
  0x04 => 'write',
134
- 0x08 => 'erase' }, :method => :bitfield_value
135
- FitParser::File::Types.add_type :mesg_count, :enum, :values => {
134
+ 0x08 => 'erase' }, method: :bitfield_value
135
+ FitParser::File::Types.add_type :mesg_count, :enum, values: {
136
136
  0 => 'num_per_file',
137
137
  1 => 'max_per_file',
138
138
  2 => 'max_per_file_type' }
139
- FitParser::File::Types.add_type :date_time, :uint32, :values => {
140
- 268435456 => 'min' }, :method => :date_time_value, :parameters => {:utc => true}
141
- FitParser::File::Types.add_type :local_date_time, :uint32, :values => {
142
- 268435456 => 'min' }, :method => :date_time_value, :parameters => {:utc => false}
143
- FitParser::File::Types.add_type :message_index, :uint16, :values => {
139
+ FitParser::File::Types.add_type :date_time, :uint32, values: {
140
+ 268435456 => 'min' }, method: :date_time_value, parameters: {utc: true}
141
+ FitParser::File::Types.add_type :local_date_time, :uint32, values: {
142
+ 268435456 => 'min' }, method: :date_time_value, parameters: {utc: false}
143
+ FitParser::File::Types.add_type :message_index, :uint16, values: {
144
144
  32768 => 'selected',
145
145
  26872 => 'reserved',
146
- 4095 => 'mask' }, :method => :message_index_value
147
- FitParser::File::Types.add_type :device_index, :uint8, :values => {
146
+ 4095 => 'mask' }, method: :message_index_value
147
+ FitParser::File::Types.add_type :device_index, :uint8, values: {
148
148
  0 => 'creator' }
149
- FitParser::File::Types.add_type :gender, :enum, :values => {
149
+ FitParser::File::Types.add_type :gender, :enum, values: {
150
150
  0 => 'female',
151
151
  1 => 'male' }
152
- FitParser::File::Types.add_type :language, :enum, :values => {
152
+ FitParser::File::Types.add_type :language, :enum, values: {
153
153
  0 => 'english',
154
154
  1 => 'french',
155
155
  2 => 'italian',
@@ -177,7 +177,7 @@ FitParser::File::Types.add_type :language, :enum, :values => {
177
177
  24 => 'bulgarian',
178
178
  25 => 'romanian',
179
179
  254 => 'custom' }
180
- FitParser::File::Types.add_type :time_zone, :enum, :values => {
180
+ FitParser::File::Types.add_type :time_zone, :enum, values: {
181
181
  0 => 'almaty',
182
182
  1 => 'bangkok',
183
183
  2 => 'bombay',
@@ -284,17 +284,17 @@ FitParser::File::Types.add_type :time_zone, :enum, :values => {
284
284
  103 => 'santiago',
285
285
  253 => 'manual',
286
286
  254 => 'automatic' }
287
- FitParser::File::Types.add_type :display_measure, :enum, :values => {
287
+ FitParser::File::Types.add_type :display_measure, :enum, values: {
288
288
  0 => 'metric',
289
289
  1 => 'statute' }
290
- FitParser::File::Types.add_type :display_heart, :enum, :values => {
290
+ FitParser::File::Types.add_type :display_heart, :enum, values: {
291
291
  0 => 'bpm',
292
292
  1 => 'max',
293
293
  2 => 'reserve' }
294
- FitParser::File::Types.add_type :display_power, :enum, :values => {
294
+ FitParser::File::Types.add_type :display_power, :enum, values: {
295
295
  0 => 'watts',
296
296
  1 => 'percent_ftp' }
297
- FitParser::File::Types.add_type :display_position, :enum, :values => {
297
+ FitParser::File::Types.add_type :display_position, :enum, values: {
298
298
  0 => 'degree',
299
299
  1 => 'degree_minute',
300
300
  2 => 'degree_minute_second',
@@ -337,7 +337,7 @@ FitParser::File::Types.add_type :display_position, :enum, :values => {
337
337
  39 => 'estonian_grid',
338
338
  40 => 'latvian_grid',
339
339
  41 => 'swedish_ref_99_grid' }
340
- FitParser::File::Types.add_type :sport, :enum, :values => {
340
+ FitParser::File::Types.add_type :sport, :enum, values: {
341
341
  0 => 'generic',
342
342
  1 => 'running',
343
343
  2 => 'cycling',
@@ -359,7 +359,7 @@ FitParser::File::Types.add_type :sport, :enum, :values => {
359
359
  18 => 'multisport',
360
360
  19 => 'paddling',
361
361
  254 => 'all' }
362
- FitParser::File::Types.add_type :sport_bits_0, :uint8z, :values => {
362
+ FitParser::File::Types.add_type :sport_bits_0, :uint8z, values: {
363
363
  1 => 'generic',
364
364
  2 => 'running',
365
365
  4 => 'cycling',
@@ -368,7 +368,7 @@ FitParser::File::Types.add_type :sport_bits_0, :uint8z, :values => {
368
368
  32 => 'swimming',
369
369
  64 => 'basketball',
370
370
  128 => 'soccer' }
371
- FitParser::File::Types.add_type :sport_bits_1, :uint8z, :values => {
371
+ FitParser::File::Types.add_type :sport_bits_1, :uint8z, values: {
372
372
  1 => 'tennis',
373
373
  2 => 'american_football',
374
374
  4 => 'training',
@@ -377,12 +377,12 @@ FitParser::File::Types.add_type :sport_bits_1, :uint8z, :values => {
377
377
  32 => 'alpine_skiing',
378
378
  64 => 'snowboarding',
379
379
  128 => 'rowing' }
380
- FitParser::File::Types.add_type :sport_bits_2, :uint8z, :values => {
380
+ FitParser::File::Types.add_type :sport_bits_2, :uint8z, values: {
381
381
  1 => 'mountaineering',
382
382
  2 => 'hiking',
383
383
  4 => 'multisport',
384
384
  8 => 'paddling' }
385
- FitParser::File::Types.add_type :sub_sport, :enum, :values => {
385
+ FitParser::File::Types.add_type :sub_sport, :enum, values: {
386
386
  0 => 'generic',
387
387
  1 => 'treadmill',
388
388
  2 => 'street',
@@ -411,20 +411,20 @@ FitParser::File::Types.add_type :sub_sport, :enum, :values => {
411
411
  25 => 'indoor_skiing',
412
412
  26 => 'cardio_training',
413
413
  254 => 'all' }
414
- FitParser::File::Types.add_type :activity, :enum, :values => {
414
+ FitParser::File::Types.add_type :activity, :enum, values: {
415
415
  0 => 'manual',
416
416
  1 => 'auto_multi_sport' }
417
- FitParser::File::Types.add_type :intensity, :enum, :values => {
417
+ FitParser::File::Types.add_type :intensity, :enum, values: {
418
418
  0 => 'active',
419
419
  1 => 'rest',
420
420
  2 => 'warmup',
421
421
  3 => 'cooldown' }
422
- FitParser::File::Types.add_type :session_trigger, :enum, :values => {
422
+ FitParser::File::Types.add_type :session_trigger, :enum, values: {
423
423
  0 => 'activity_end',
424
424
  1 => 'manual',
425
425
  2 => 'auto_multi_sport',
426
426
  3 => 'fitness_equipment' }
427
- FitParser::File::Types.add_type :autolap_trigger, :enum, :values => {
427
+ FitParser::File::Types.add_type :autolap_trigger, :enum, values: {
428
428
  0 => 'time',
429
429
  1 => 'distance',
430
430
  2 => 'position_start',
@@ -432,7 +432,7 @@ FitParser::File::Types.add_type :autolap_trigger, :enum, :values => {
432
432
  4 => 'position_waypoint',
433
433
  5 => 'position_marked',
434
434
  6 => 'off' }
435
- FitParser::File::Types.add_type :lap_trigger, :enum, :values => {
435
+ FitParser::File::Types.add_type :lap_trigger, :enum, values: {
436
436
  0 => 'manual',
437
437
  1 => 'time',
438
438
  2 => 'distance',
@@ -442,7 +442,7 @@ FitParser::File::Types.add_type :lap_trigger, :enum, :values => {
442
442
  6 => 'position_marked',
443
443
  7 => 'session_end',
444
444
  8 => 'fitness_equipment' }
445
- FitParser::File::Types.add_type :event, :enum, :values => {
445
+ FitParser::File::Types.add_type :event, :enum, values: {
446
446
  0 => 'timer',
447
447
  3 => 'workout',
448
448
  4 => 'workout_step',
@@ -477,7 +477,7 @@ FitParser::File::Types.add_type :event, :enum, :values => {
477
477
  43 => 'rear_gear_change',
478
478
  45 => 'elev_high_alert',
479
479
  46 => 'elev_low_alert' }
480
- FitParser::File::Types.add_type :event_type, :enum, :values => {
480
+ FitParser::File::Types.add_type :event_type, :enum, values: {
481
481
  0 => 'start',
482
482
  1 => 'stop',
483
483
  2 => 'consecutive_depreciated',
@@ -488,27 +488,27 @@ FitParser::File::Types.add_type :event_type, :enum, :values => {
488
488
  7 => 'end_all_depreciated',
489
489
  8 => 'stop_disable',
490
490
  9 => 'stop_disable_all' }
491
- FitParser::File::Types.add_type :timer_trigger, :enum, :values => {
491
+ FitParser::File::Types.add_type :timer_trigger, :enum, values: {
492
492
  0 => 'manual',
493
493
  1 => 'auto',
494
494
  2 => 'fitness_equipment' }
495
- FitParser::File::Types.add_type :fitness_equipment_state, :enum, :values => {
495
+ FitParser::File::Types.add_type :fitness_equipment_state, :enum, values: {
496
496
  0 => 'ready',
497
497
  1 => 'in_use',
498
498
  2 => 'paused',
499
499
  3 => 'unknown' }
500
- FitParser::File::Types.add_type :activity_class, :enum, :values => {
500
+ FitParser::File::Types.add_type :activity_class, :enum, values: {
501
501
  127 => 'level',
502
502
  100 => 'level_max',
503
503
  128 => 'athlete' }
504
- FitParser::File::Types.add_type :hr_zone_calc, :enum, :values => {
504
+ FitParser::File::Types.add_type :hr_zone_calc, :enum, values: {
505
505
  0 => 'custom',
506
506
  1 => 'percent_max_hr',
507
507
  2 => 'percent_hrr' }
508
- FitParser::File::Types.add_type :pwr_zone_calc, :enum, :values => {
508
+ FitParser::File::Types.add_type :pwr_zone_calc, :enum, values: {
509
509
  0 => 'custom',
510
510
  1 => 'percent_ftp' }
511
- FitParser::File::Types.add_type :wkt_step_duration, :enum, :values => {
511
+ FitParser::File::Types.add_type :wkt_step_duration, :enum, values: {
512
512
  0 => 'time',
513
513
  1 => 'distance',
514
514
  2 => 'hr_less_than',
@@ -526,7 +526,7 @@ FitParser::File::Types.add_type :wkt_step_duration, :enum, :values => {
526
526
  14 => 'power_less_than',
527
527
  15 => 'power_greater_than',
528
528
  28 => 'repetition_time' }
529
- FitParser::File::Types.add_type :wkt_step_target, :enum, :values => {
529
+ FitParser::File::Types.add_type :wkt_step_target, :enum, values: {
530
530
  0 => 'speed',
531
531
  1 => 'heart_rate',
532
532
  2 => 'open',
@@ -534,23 +534,23 @@ FitParser::File::Types.add_type :wkt_step_target, :enum, :values => {
534
534
  4 => 'power',
535
535
  5 => 'grade',
536
536
  6 => 'resistance' }
537
- FitParser::File::Types.add_type :goal, :enum, :values => {
537
+ FitParser::File::Types.add_type :goal, :enum, values: {
538
538
  0 => 'time',
539
539
  1 => 'distance',
540
540
  2 => 'calories',
541
541
  3 => 'frequency',
542
542
  4 => 'steps' }
543
- FitParser::File::Types.add_type :goal_recurrence, :enum, :values => {
543
+ FitParser::File::Types.add_type :goal_recurrence, :enum, values: {
544
544
  0 => 'off',
545
545
  1 => 'daily',
546
546
  2 => 'weekly',
547
547
  3 => 'monthly',
548
548
  4 => 'yearly',
549
549
  5 => 'custom' }
550
- FitParser::File::Types.add_type :schedule, :enum, :values => {
550
+ FitParser::File::Types.add_type :schedule, :enum, values: {
551
551
  0 => 'workout',
552
552
  1 => 'course' }
553
- FitParser::File::Types.add_type :course_point, :enum, :values => {
553
+ FitParser::File::Types.add_type :course_point, :enum, values: {
554
554
  0 => 'generic',
555
555
  1 => 'summit',
556
556
  2 => 'valley',
@@ -575,7 +575,7 @@ FitParser::File::Types.add_type :course_point, :enum, :values => {
575
575
  21 => 'slight_right',
576
576
  22 => 'sharp_right',
577
577
  23 => 'u_turn' }
578
- FitParser::File::Types.add_type :manufacturer, :uint16, :values => {
578
+ FitParser::File::Types.add_type :manufacturer, :uint16, values: {
579
579
  1 => 'garmin',
580
580
  2 => 'garmin_fr405_antfs',
581
581
  3 => 'zephyr',
@@ -671,7 +671,7 @@ FitParser::File::Types.add_type :manufacturer, :uint16, :values => {
671
671
  258 => 'lezyne',
672
672
  259 => 'scribe_labs',
673
673
  5759 => 'actigraphcorp' }
674
- FitParser::File::Types.add_type :garmin_product, :uint16, :values => {
674
+ FitParser::File::Types.add_type :garmin_product, :uint16, values: {
675
675
  1 => 'hrm1',
676
676
  2 => 'axh01',
677
677
  3 => 'axb01',
@@ -753,7 +753,7 @@ FitParser::File::Types.add_type :garmin_product, :uint16, :values => {
753
753
  20119 => 'training_center',
754
754
  65532 => 'android_antplus_plugin',
755
755
  65534 => 'connect' }
756
- FitParser::File::Types.add_type :antplus_device_type, :uint8, :values => {
756
+ FitParser::File::Types.add_type :antplus_device_type, :uint8, values: {
757
757
  1 => 'antfs',
758
758
  11 => 'bike_power',
759
759
  12 => 'environment_sensor_legacy',
@@ -771,12 +771,12 @@ FitParser::File::Types.add_type :antplus_device_type, :uint8, :values => {
771
771
  122 => 'bike_cadence',
772
772
  123 => 'bike_speed',
773
773
  124 => 'stride_speed_distance' }
774
- FitParser::File::Types.add_type :ant_network, :enum, :values => {
774
+ FitParser::File::Types.add_type :ant_network, :enum, values: {
775
775
  0 => 'public',
776
776
  1 => 'antplus',
777
777
  2 => 'antfs',
778
778
  3 => 'private' }
779
- FitParser::File::Types.add_type :workout_capabilities, :uint32z, :values => {
779
+ FitParser::File::Types.add_type :workout_capabilities, :uint32z, values: {
780
780
  0x00000001 => 'interval',
781
781
  0x00000002 => 'custom',
782
782
  0x00000004 => 'fitness_equipment',
@@ -790,17 +790,17 @@ FitParser::File::Types.add_type :workout_capabilities, :uint32z, :values => {
790
790
  0x00000800 => 'power',
791
791
  0x00001000 => 'grade',
792
792
  0x00002000 => 'resistance',
793
- 0x00004000 => 'protected' }, :method => :bitfield_value
794
- FitParser::File::Types.add_type :battery_status, :uint8, :values => {
793
+ 0x00004000 => 'protected' }, method: :bitfield_value
794
+ FitParser::File::Types.add_type :battery_status, :uint8, values: {
795
795
  1 => 'new',
796
796
  2 => 'good',
797
797
  3 => 'ok',
798
798
  4 => 'low',
799
799
  5 => 'critical' }
800
- FitParser::File::Types.add_type :hr_type, :enum, :values => {
800
+ FitParser::File::Types.add_type :hr_type, :enum, values: {
801
801
  0 => 'normal',
802
802
  1 => 'irregular' }
803
- FitParser::File::Types.add_type :course_capabilities, :uint32z, :values => {
803
+ FitParser::File::Types.add_type :course_capabilities, :uint32z, values: {
804
804
  0x00000001 => 'processed',
805
805
  0x00000002 => 'valid',
806
806
  0x00000004 => 'time',
@@ -810,27 +810,27 @@ FitParser::File::Types.add_type :course_capabilities, :uint32z, :values => {
810
810
  0x00000040 => 'power',
811
811
  0x00000080 => 'cadence',
812
812
  0x00000100 => 'training',
813
- 0x00000200 => 'navigation' }, :method => :bitfield_value
814
- FitParser::File::Types.add_type :weight, :uint16, :values => {
813
+ 0x00000200 => 'navigation' }, method: :bitfield_value
814
+ FitParser::File::Types.add_type :weight, :uint16, values: {
815
815
  65534 => 'calculating' }
816
- FitParser::File::Types.add_type :workout_hr, :uint32, :values => {
816
+ FitParser::File::Types.add_type :workout_hr, :uint32, values: {
817
817
  100 => 'bpm_offset' }
818
- FitParser::File::Types.add_type :workout_power, :uint32, :values => {
818
+ FitParser::File::Types.add_type :workout_power, :uint32, values: {
819
819
  1000 => 'watts_offset' }
820
- FitParser::File::Types.add_type :bp_status, :enum, :values => {
820
+ FitParser::File::Types.add_type :bp_status, :enum, values: {
821
821
  0 => 'no_error',
822
822
  1 => 'error_incomplete_data',
823
823
  2 => 'error_no_measurement',
824
824
  3 => 'error_data_out_of_range',
825
825
  4 => 'error_irregular_heart_rate' }
826
- FitParser::File::Types.add_type :user_local_id, :uint16, :values => {
826
+ FitParser::File::Types.add_type :user_local_id, :uint16, values: {
827
827
  0 => 'local_min',
828
828
  15 => 'local_max',
829
829
  16 => 'stationary_min',
830
830
  255 => 'stationary_max',
831
831
  256 => 'portable_min',
832
832
  65534 => 'portable_max' }
833
- FitParser::File::Types.add_type :swim_stroke, :enum, :values => {
833
+ FitParser::File::Types.add_type :swim_stroke, :enum, values: {
834
834
  0 => 'freestyle',
835
835
  1 => 'backstroke',
836
836
  2 => 'breaststroke',
@@ -838,7 +838,7 @@ FitParser::File::Types.add_type :swim_stroke, :enum, :values => {
838
838
  4 => 'drill',
839
839
  5 => 'mixed',
840
840
  6 => 'im' }
841
- FitParser::File::Types.add_type :activity_type, :enum, :values => {
841
+ FitParser::File::Types.add_type :activity_type, :enum, values: {
842
842
  0 => 'generic',
843
843
  1 => 'running',
844
844
  2 => 'cycling',
@@ -847,7 +847,7 @@ FitParser::File::Types.add_type :activity_type, :enum, :values => {
847
847
  5 => 'swimming',
848
848
  6 => 'walking',
849
849
  254 => 'all' }
850
- FitParser::File::Types.add_type :activity_subtype, :enum, :values => {
850
+ FitParser::File::Types.add_type :activity_subtype, :enum, values: {
851
851
  0 => 'generic',
852
852
  1 => 'treadmill',
853
853
  2 => 'street',
@@ -868,20 +868,20 @@ FitParser::File::Types.add_type :activity_subtype, :enum, :values => {
868
868
  17 => 'lap_swimming',
869
869
  18 => 'open_water',
870
870
  254 => 'all' }
871
- FitParser::File::Types.add_type :activity_level, :enum, :values => {
871
+ FitParser::File::Types.add_type :activity_level, :enum, values: {
872
872
  0 => 'low',
873
873
  1 => 'medium',
874
874
  2 => 'high' }
875
- FitParser::File::Types.add_type :left_right_balance, :uint8, :values => {
875
+ FitParser::File::Types.add_type :left_right_balance, :uint8, values: {
876
876
  127 => 'mask',
877
877
  128 => 'right' }
878
- FitParser::File::Types.add_type :left_right_balance_100, :uint16, :values => {
878
+ FitParser::File::Types.add_type :left_right_balance_100, :uint16, values: {
879
879
  16383 => 'mask',
880
880
  32768 => 'right' }
881
- FitParser::File::Types.add_type :length_type, :enum, :values => {
881
+ FitParser::File::Types.add_type :length_type, :enum, values: {
882
882
  0 => 'idle',
883
883
  1 => 'active' }
884
- FitParser::File::Types.add_type :connectivity_capabilities, :uint32z, :values => {
884
+ FitParser::File::Types.add_type :connectivity_capabilities, :uint32z, values: {
885
885
  1 => 'bluetooth',
886
886
  2 => 'bluetooth_le',
887
887
  4 => 'ant',
@@ -896,14 +896,14 @@ FitParser::File::Types.add_type :connectivity_capabilities, :uint32z, :values =>
896
896
  2048 => 'setup_incomplete',
897
897
  4096 => 'continue_sync_after_software_update',
898
898
  8192 => 'connect_iq_app_download' }
899
- FitParser::File::Types.add_type :stroke_type, :enum, :values => {
899
+ FitParser::File::Types.add_type :stroke_type, :enum, values: {
900
900
  0 => 'no_event',
901
901
  1 => 'other',
902
902
  2 => 'serve',
903
903
  3 => 'forehand',
904
904
  4 => 'backhand',
905
905
  5 => 'smash' }
906
- FitParser::File::Types.add_type :body_location, :enum, :values => {
906
+ FitParser::File::Types.add_type :body_location, :enum, values: {
907
907
  0 => 'left_leg',
908
908
  1 => 'left_calf',
909
909
  2 => 'left_shin',
@@ -940,7 +940,7 @@ FitParser::File::Types.add_type :body_location, :enum, :values => {
940
940
  33 => 'right_forearm_extensors',
941
941
  34 => 'neck',
942
942
  35 => 'throat' }
943
- FitParser::File::Types.add_type :source_type, :enum, :values => {
943
+ FitParser::File::Types.add_type :source_type, :enum, values: {
944
944
  0 => 'ant',
945
945
  1 => 'antplus',
946
946
  2 => 'bluetooth',
@@ -951,6 +951,6 @@ FitParser::File::Types.add_type :source_type, :enum, :values => {
951
951
  # the type below is assigned to some fileds, but
952
952
  # it is not defined in terms of values and basic type in FIT SDK as
953
953
  # of 2015-01-29
954
- FitParser::File::Types.add_type :bool, :uint8, :values => {
954
+ FitParser::File::Types.add_type :bool, :uint8, values: {
955
955
  0 => false,
956
956
  1 => true }
@@ -1,6 +1,5 @@
1
1
  module FitParser
2
2
  class File
3
-
4
3
  def self.read(io)
5
4
  new.read(io)
6
5
  end
@@ -13,17 +12,14 @@ module FitParser
13
12
 
14
13
  def read(io)
15
14
  @header = Header.read(io)
16
-
17
- Record.clear_definitions!
18
-
15
+ definitions = {}
19
16
  while io.pos < @header.end_pos
20
- @records << Record.read(io)
17
+ record = Record.new(definitions)
18
+ @records << record.read(io)
19
+ definitions = record.definitions
21
20
  end
22
-
23
21
  @crc = io.read(2)
24
-
25
22
  self
26
23
  end
27
-
28
24
  end
29
25
  end
@@ -1,3 +1,3 @@
1
1
  module FitParser
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
data/lib/fit_parser.rb CHANGED
@@ -14,6 +14,6 @@ require 'fit_parser/version'
14
14
 
15
15
  module FitParser
16
16
  def self.load_file(path)
17
- File.read ::File.open(path)
17
+ File.read(::File.open(path))
18
18
  end
19
19
  end