fit_parser 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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