fitreader 0.1.1

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.
@@ -0,0 +1,25 @@
1
+ require 'yaml'
2
+
3
+ module Fitreader
4
+ class Static
5
+ @enums ||= YAML::load_file(File.join( File.dirname(__FILE__), 'sdk/constants.yml'))
6
+ @types ||= YAML::load_file(File.join( File.dirname(__FILE__), 'sdk/types.yml'))
7
+ @scope = [:ride, :lap, :interval]
8
+
9
+ def self.base
10
+ @types[:base_types]
11
+ end
12
+
13
+ def self.message
14
+ @types[:message_fields]
15
+ end
16
+
17
+ def self.enums
18
+ @enums
19
+ end
20
+
21
+ def self.scope
22
+ @scope
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module Fitreader
2
+ VERSION = "0.1.1"
3
+ end
data/lib/fitreader.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'pry'
2
+ require 'fitreader/fitfile'
3
+ require 'fitreader/version'
4
+ require 'fitreader/static'
5
+
6
+ module Fitreader
7
+ def self.read(path)
8
+ @f = FitFile.new(path)
9
+ end
10
+
11
+ def self.header
12
+ @f.header
13
+ end
14
+
15
+ def self.available_records
16
+ @f.records.collect { |x| [x.definition.global_num, x.definition.name] }
17
+ .group_by { |i| i }
18
+ .sort
19
+ .collect { |k, v| k << v.length }
20
+ end
21
+
22
+ def self.filter_by_record(filter)
23
+ if filter.is_a?(Symbol)
24
+ @f.records.select { |x| x.definition.name == filter }
25
+ elsif filter.is_a?(Integer)
26
+ @f.records.select { |x| x.definition.global_num == filter }
27
+ else
28
+ raise ArgumentError, "needs a string or a symbol"
29
+ end
30
+ end
31
+
32
+ def self.record_values(filter)
33
+ records = filter_by_record filter
34
+ records.collect {|x| x.fields.values.collect{|z| [z.name, z.value]}}.collect{|y| y.to_h}
35
+ end
36
+
37
+ # def self.error_fields(filter=nil)
38
+ # @f.records.
39
+ # end
40
+
41
+ # def self.filter_by_scope(filter)
42
+ # valid = Static.scope.include? filter
43
+ # unless valid
44
+ # @f.records.select { |x| x.type == filter }
45
+ # else
46
+ # puts "invalid scope, must be one of #{Static.scope}"
47
+ # end
48
+ # end
49
+ end
data/schema ADDED
@@ -0,0 +1,37 @@
1
+ record
2
+ definition*
3
+ fields*
4
+ error_fields
5
+ record_type*
6
+
7
+ definition
8
+ name
9
+ global_num
10
+ local_num
11
+ fit_msg*
12
+ fields_definitions*
13
+
14
+ field
15
+ id
16
+ name
17
+ raw_val
18
+ proc_val
19
+
20
+ record_type
21
+ per_ride
22
+ per_lap
23
+ per_second
24
+
25
+ fit_msg
26
+ field_num
27
+ name
28
+ type
29
+ scale
30
+ ofset
31
+
32
+ field_definition
33
+ base_num
34
+ def_num
35
+ size
36
+
37
+
Binary file
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ require 'fitreader'
3
+
4
+ describe Fitreader::Static do
5
+ it 'const is loaded' do
6
+ expect(Fitreader::Static.enums.class).to eql(Hash)
7
+ end
8
+
9
+ it 'const has data' do
10
+ expect(Fitreader::Static.enums[:enum_file][1]).to eql(:device)
11
+ end
12
+
13
+ it 'scope is readable' do
14
+ expect(Fitreader::Static.scope).to include(:ride)
15
+ expect(Fitreader::Static.scope).not_to include(:bike)
16
+ end
17
+ end
18
+
19
+ describe Fitreader do
20
+ describe 'read fit file' do
21
+ before do
22
+ @path = File.join(File.dirname(__FILE__), '2016-04-09-13-19-18.fit')
23
+ end
24
+
25
+ it 'test file exists' do
26
+ expect(File.exist?(@path)).to eql(true)
27
+ end
28
+
29
+ it 'parses file without exceptions' do
30
+ expect { Fitreader.read(@path) }.not_to raise_error
31
+ end
32
+ end
33
+
34
+ describe 'has functioning interfaces' do
35
+ before do
36
+ @path = File.join(File.dirname(__FILE__), '2016-04-09-13-19-18.fit')
37
+ Fitreader.read(@path)
38
+ end
39
+
40
+ it 'has a valid header' do
41
+ expect(Fitreader.header).not_to be_nil
42
+ expect(Fitreader.header.num_records).to be(89139)
43
+ end
44
+
45
+ it 'has valid records' do
46
+ expect(Fitreader.available_records).not_to be_nil
47
+ expect(Fitreader.available_records.length).to be(14)
48
+ binding.pry
49
+ end
50
+
51
+ it 'can return name-value data' do
52
+ expect(Fitreader.record_values :session).to be(Array)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ class FitreaderTest < Minitest::Test
4
+ def test_that_it_has_a_version_number
5
+ refute_nil ::Fitreader::VERSION
6
+ end
7
+
8
+ def test_it_does_something_useful
9
+ assert false
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'fitreader'
3
+
4
+ require 'minitest/autorun'
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fitreader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Richard Brodie
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-12-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bindata
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description:
84
+ email:
85
+ - richard@samsari.org
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".travis.yml"
92
+ - Gemfile
93
+ - LICENSE
94
+ - LICENSE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - bin/console
98
+ - bin/setup
99
+ - fitreader.gemspec
100
+ - lib/fitreader.rb
101
+ - lib/fitreader/definition.rb
102
+ - lib/fitreader/degraded_record.rb
103
+ - lib/fitreader/errors.rb
104
+ - lib/fitreader/field_data.rb
105
+ - lib/fitreader/field_definition.rb
106
+ - lib/fitreader/file_header.rb
107
+ - lib/fitreader/fitfile.rb
108
+ - lib/fitreader/record.rb
109
+ - lib/fitreader/record_header.rb
110
+ - lib/fitreader/sdk/constants.yml
111
+ - lib/fitreader/sdk/types.yml
112
+ - lib/fitreader/static.rb
113
+ - lib/fitreader/version.rb
114
+ - schema
115
+ - spec/2016-04-09-13-19-18.fit
116
+ - spec/fitreader_spec.rb
117
+ - test/fitreader_test.rb
118
+ - test/test_helper.rb
119
+ homepage: https://github.com/samsari/fitreader
120
+ licenses:
121
+ - MIT
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 2.5.2
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: Library for reading FIT files generated by Garmin devices.
143
+ test_files:
144
+ - spec/2016-04-09-13-19-18.fit
145
+ - spec/fitreader_spec.rb
146
+ - test/fitreader_test.rb
147
+ - test/test_helper.rb