postrunner 0.0.11 → 0.1.0
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.
- checksums.yaml +4 -4
 - data/README.md +5 -2
 - data/Rakefile +18 -2
 - data/lib/postrunner/ActivitiesDB.rb +1 -22
 - data/lib/postrunner/Activity.rb +21 -0
 - data/lib/postrunner/ActivityLink.rb +1 -1
 - data/lib/postrunner/ActivityListView.rb +10 -9
 - data/lib/postrunner/ActivitySummary.rb +42 -15
 - data/lib/postrunner/ActivityView.rb +10 -8
 - data/lib/postrunner/ChartView.rb +238 -80
 - data/lib/postrunner/DataSources.rb +1 -14
 - data/lib/postrunner/DeviceList.rb +18 -10
 - data/lib/postrunner/DirUtils.rb +33 -0
 - data/lib/postrunner/EventList.rb +149 -0
 - data/lib/postrunner/FFS_Activity.rb +297 -0
 - data/lib/postrunner/FFS_Device.rb +129 -0
 - data/lib/postrunner/FitFileStore.rb +372 -0
 - data/lib/postrunner/HRV_Analyzer.rb +178 -0
 - data/lib/postrunner/LinearPredictor.rb +46 -0
 - data/lib/postrunner/Main.rb +135 -33
 - data/lib/postrunner/Percentiles.rb +45 -0
 - data/lib/postrunner/PersonalRecords.rb +203 -114
 - data/lib/postrunner/RecordListPageView.rb +6 -6
 - data/lib/postrunner/UserProfileView.rb +4 -0
 - data/lib/postrunner/version.rb +1 -1
 - data/misc/postrunner/trackview.js +99 -0
 - data/postrunner.gemspec +5 -5
 - data/spec/ActivitySummary_spec.rb +15 -4
 - data/spec/FitFileStore_spec.rb +133 -0
 - data/spec/FlexiTable_spec.rb +1 -1
 - data/spec/PersonalRecords_spec.rb +206 -0
 - data/spec/PostRunner_spec.rb +64 -60
 - data/spec/View_spec.rb +1 -1
 - data/spec/spec_helper.rb +76 -2
 - metadata +42 -28
 
    
        data/spec/PostRunner_spec.rb
    CHANGED
    
    | 
         @@ -3,7 +3,7 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            #
         
     | 
| 
       4 
4 
     | 
    
         
             
            # = PostRunner_spec.rb -- PostRunner - Manage the data from your Garmin sport devices.
         
     | 
| 
       5 
5 
     | 
    
         
             
            #
         
     | 
| 
       6 
     | 
    
         
            -
            # Copyright (c) 2014 by Chris Schlaeger <cs@taskjuggler.org>
         
     | 
| 
      
 6 
     | 
    
         
            +
            # Copyright (c) 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>
         
     | 
| 
       7 
7 
     | 
    
         
             
            #
         
     | 
| 
       8 
8 
     | 
    
         
             
            # This program is free software; you can redistribute it and/or modify
         
     | 
| 
       9 
9 
     | 
    
         
             
            # it under the terms of version 2 of the GNU General Public License as
         
     | 
| 
         @@ -21,31 +21,37 @@ describe PostRunner::Main do 
     | 
|
| 
       21 
21 
     | 
    
         
             
                args = [ '--dbdir', @db_dir ] + args
         
     | 
| 
       22 
22 
     | 
    
         
             
                old_stdout = $stdout
         
     | 
| 
       23 
23 
     | 
    
         
             
                $stdout = (stdout = StringIO.new)
         
     | 
| 
       24 
     | 
    
         
            -
                 
     | 
| 
      
 24 
     | 
    
         
            +
                @postrunner = nil
         
     | 
| 
      
 25 
     | 
    
         
            +
                GC.start
         
     | 
| 
      
 26 
     | 
    
         
            +
                @postrunner = PostRunner::Main.new(args)
         
     | 
| 
       25 
27 
     | 
    
         
             
                $stdout = old_stdout
         
     | 
| 
       26 
28 
     | 
    
         
             
                stdout.string
         
     | 
| 
       27 
29 
     | 
    
         
             
              end
         
     | 
| 
       28 
30 
     | 
    
         | 
| 
       29 
31 
     | 
    
         
             
              before(:all) do
         
     | 
| 
       30 
     | 
    
         
            -
                 
     | 
| 
       31 
     | 
    
         
            -
                 
     | 
| 
      
 32 
     | 
    
         
            +
                capture_stdio
         
     | 
| 
      
 33 
     | 
    
         
            +
                create_working_dirs
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       32 
35 
     | 
    
         
             
                @db_dir = File.join(@work_dir, '.postrunner')
         
     | 
| 
       33 
     | 
    
         
            -
                @ 
     | 
| 
       34 
     | 
    
         
            -
                @ 
     | 
| 
       35 
     | 
    
         
            -
                 
     | 
| 
       36 
     | 
    
         
            -
                 
     | 
| 
      
 36 
     | 
    
         
            +
                @opts = { :t => '2014-07-01-8:00', :speed => 11.0 }
         
     | 
| 
      
 37 
     | 
    
         
            +
                @file1 = create_fit_activity_file(@work_dir, @opts)
         
     | 
| 
      
 38 
     | 
    
         
            +
                @opts[:t] = '2014-07-02-8:00'
         
     | 
| 
      
 39 
     | 
    
         
            +
                @file2 = create_fit_activity_file(@work_dir, @opts)
         
     | 
| 
      
 40 
     | 
    
         
            +
                @opts[:t] = '2014-07-03-8:00'
         
     | 
| 
      
 41 
     | 
    
         
            +
                @opts[:speed] = 12.5
         
     | 
| 
      
 42 
     | 
    
         
            +
                @file3 = create_fit_activity_file(@work_dir, @opts)
         
     | 
| 
       37 
43 
     | 
    
         
             
              end
         
     | 
| 
       38 
44 
     | 
    
         | 
| 
       39 
45 
     | 
    
         
             
              after(:all) do
         
     | 
| 
       40 
     | 
    
         
            -
                 
     | 
| 
      
 46 
     | 
    
         
            +
                cleanup
         
     | 
| 
       41 
47 
     | 
    
         
             
              end
         
     | 
| 
       42 
48 
     | 
    
         | 
| 
       43 
49 
     | 
    
         
             
              it 'should abort without arguments' do
         
     | 
| 
       44 
     | 
    
         
            -
                 
     | 
| 
      
 50 
     | 
    
         
            +
                expect { postrunner([]) }.to raise_error(Fit4Ruby::Error)
         
     | 
| 
       45 
51 
     | 
    
         
             
              end
         
     | 
| 
       46 
52 
     | 
    
         | 
| 
       47 
53 
     | 
    
         
             
              it 'should abort with bad command' do
         
     | 
| 
       48 
     | 
    
         
            -
                 
     | 
| 
      
 54 
     | 
    
         
            +
                expect { postrunner(%w( foobar)) }.to raise_error(Fit4Ruby::Error)
         
     | 
| 
       49 
55 
     | 
    
         
             
              end
         
     | 
| 
       50 
56 
     | 
    
         | 
| 
       51 
57 
     | 
    
         
             
              it 'should support the -v option' do
         
     | 
| 
         @@ -73,77 +79,76 @@ describe PostRunner::Main do 
     | 
|
| 
       73 
79 
     | 
    
         
             
              end
         
     | 
| 
       74 
80 
     | 
    
         | 
| 
       75 
81 
     | 
    
         
             
              it 'should list the imported file' do
         
     | 
| 
       76 
     | 
    
         
            -
                postrunner(%w( list )).index( 
     | 
| 
      
 82 
     | 
    
         
            +
                expect(postrunner(%w( list )).index(File.basename(@file1))).to be_a(Fixnum)
         
     | 
| 
       77 
83 
     | 
    
         
             
              end
         
     | 
| 
       78 
84 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
              it 'should import the  
     | 
| 
       80 
     | 
    
         
            -
                postrunner([ 'import', @ 
     | 
| 
      
 85 
     | 
    
         
            +
              it 'should import the 2nd FIT file' do
         
     | 
| 
      
 86 
     | 
    
         
            +
                postrunner([ 'import', @file2 ])
         
     | 
| 
       81 
87 
     | 
    
         
             
                list = postrunner(%w( list ))
         
     | 
| 
       82 
     | 
    
         
            -
                list.index( 
     | 
| 
       83 
     | 
    
         
            -
                list.index( 
     | 
| 
       84 
     | 
    
         
            -
                rc = YAML::load_file(File.join(@db_dir, 'config.yml'))
         
     | 
| 
       85 
     | 
    
         
            -
                rc[:import_dir].should == @work_dir
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                template = "<a href=\"%s.html\"><img src=\"icons/%s.png\" " +
         
     | 
| 
       88 
     | 
    
         
            -
                           "class=\"active_button\">"
         
     | 
| 
       89 
     | 
    
         
            -
                html1 = File.read(File.join(@db_dir, 'html', 'FILE1.html'))
         
     | 
| 
       90 
     | 
    
         
            -
                html1.include?(template % ['FILE2', 'forward']).should be_true
         
     | 
| 
       91 
     | 
    
         
            -
                html2 = File.read(File.join(@db_dir, 'html', 'FILE2.html'))
         
     | 
| 
       92 
     | 
    
         
            -
                html2.include?(template % ['FILE1', 'back']).should be_true
         
     | 
| 
      
 88 
     | 
    
         
            +
                expect(list.index(File.basename(@file1))).to be_a(Fixnum)
         
     | 
| 
      
 89 
     | 
    
         
            +
                expect(list.index(File.basename(@file2))).to be_a(Fixnum)
         
     | 
| 
       93 
90 
     | 
    
         
             
              end
         
     | 
| 
       94 
91 
     | 
    
         | 
| 
       95 
92 
     | 
    
         
             
              it 'should delete the first file' do
         
     | 
| 
       96 
93 
     | 
    
         
             
                postrunner(%w( delete :2 ))
         
     | 
| 
       97 
94 
     | 
    
         
             
                list = postrunner(%w( list ))
         
     | 
| 
       98 
     | 
    
         
            -
                list.index( 
     | 
| 
       99 
     | 
    
         
            -
                list.index( 
     | 
| 
      
 95 
     | 
    
         
            +
                expect(list.index(File.basename(@file1))).to be_nil
         
     | 
| 
      
 96 
     | 
    
         
            +
                expect(list.index(File.basename(@file2))).to be_a(Fixnum)
         
     | 
| 
       100 
97 
     | 
    
         
             
              end
         
     | 
| 
       101 
98 
     | 
    
         | 
| 
       102 
99 
     | 
    
         
             
              it 'should not import the deleted file again' do
         
     | 
| 
       103 
     | 
    
         
            -
                postrunner( 
     | 
| 
      
 100 
     | 
    
         
            +
                postrunner([ 'import', @file1 ])
         
     | 
| 
       104 
101 
     | 
    
         
             
                list = postrunner(%w( list ))
         
     | 
| 
       105 
     | 
    
         
            -
                list.index( 
     | 
| 
       106 
     | 
    
         
            -
                list.index( 
     | 
| 
      
 102 
     | 
    
         
            +
                expect(list.index(File.basename(@file1))).to be_nil
         
     | 
| 
      
 103 
     | 
    
         
            +
                expect(list.index(File.basename(@file2))).to be_a(Fixnum)
         
     | 
| 
       107 
104 
     | 
    
         
             
              end
         
     | 
| 
       108 
105 
     | 
    
         | 
| 
       109 
106 
     | 
    
         
             
              it 'should rename FILE2.FIT activity' do
         
     | 
| 
       110 
107 
     | 
    
         
             
                postrunner(%w( rename foobar :1 ))
         
     | 
| 
       111 
108 
     | 
    
         
             
                list = postrunner(%w( list ))
         
     | 
| 
       112 
     | 
    
         
            -
                list.index(@file2). 
     | 
| 
       113 
     | 
    
         
            -
                list.index('foobar'). 
     | 
| 
      
 109 
     | 
    
         
            +
                expect(list.index(File.basename(@file2))).to be_nil
         
     | 
| 
      
 110 
     | 
    
         
            +
                expect(list.index('foobar')).to be_a(Fixnum)
         
     | 
| 
       114 
111 
     | 
    
         
             
              end
         
     | 
| 
       115 
112 
     | 
    
         | 
| 
       116 
113 
     | 
    
         
             
              it 'should fail when setting bad attribute' do
         
     | 
| 
       117 
     | 
    
         
            -
                 
     | 
| 
      
 114 
     | 
    
         
            +
                expect { postrunner(%w( set foo bar :1)) }.to raise_error(Fit4Ruby::Error)
         
     | 
| 
       118 
115 
     | 
    
         
             
              end
         
     | 
| 
       119 
116 
     | 
    
         | 
| 
       120 
     | 
    
         
            -
              it 'should set name for  
     | 
| 
      
 117 
     | 
    
         
            +
              it 'should set name for 2nd activity' do
         
     | 
| 
       121 
118 
     | 
    
         
             
                postrunner(%w( set name foobar :1 ))
         
     | 
| 
       122 
119 
     | 
    
         
             
                list = postrunner(%w( list ))
         
     | 
| 
       123 
     | 
    
         
            -
                list.index(@file2). 
     | 
| 
       124 
     | 
    
         
            -
                list.index('foobar'). 
     | 
| 
      
 120 
     | 
    
         
            +
                expect(list.index(@file2)).to be_nil
         
     | 
| 
      
 121 
     | 
    
         
            +
                expect(list.index('foobar')).to be_a(Fixnum)
         
     | 
| 
       125 
122 
     | 
    
         
             
              end
         
     | 
| 
       126 
123 
     | 
    
         | 
| 
       127 
     | 
    
         
            -
              it 'should set activity type for  
     | 
| 
      
 124 
     | 
    
         
            +
              it 'should set activity type for 2nd activity' do
         
     | 
| 
       128 
125 
     | 
    
         
             
                postrunner(%w( set type Cycling :1 ))
         
     | 
| 
       129 
126 
     | 
    
         
             
                list = postrunner(%w( summary :1 ))
         
     | 
| 
       130 
     | 
    
         
            -
                list.index('Running'). 
     | 
| 
       131 
     | 
    
         
            -
                list.index('Cycling'). 
     | 
| 
      
 127 
     | 
    
         
            +
                expect(list.index('Running')).to be_nil
         
     | 
| 
      
 128 
     | 
    
         
            +
                expect(list.index('Cycling')).to be_a(Fixnum)
         
     | 
| 
      
 129 
     | 
    
         
            +
              end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
              it 'should list the events of an activity' do
         
     | 
| 
      
 132 
     | 
    
         
            +
                postrunner(%w( events :1 ))
         
     | 
| 
      
 133 
     | 
    
         
            +
              end
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
              it 'should list the data sources of an activity' do
         
     | 
| 
      
 136 
     | 
    
         
            +
                postrunner(%w( sources :1 ))
         
     | 
| 
       132 
137 
     | 
    
         
             
              end
         
     | 
| 
       133 
138 
     | 
    
         | 
| 
       134 
139 
     | 
    
         
             
              it 'should fail when setting bad activity type' do
         
     | 
| 
       135 
     | 
    
         
            -
                 
     | 
| 
      
 140 
     | 
    
         
            +
                expect { postrunner(%w( set type foobar :1)) }.to raise_error(Fit4Ruby::Error)
         
     | 
| 
       136 
141 
     | 
    
         
             
              end
         
     | 
| 
       137 
142 
     | 
    
         | 
| 
       138 
143 
     | 
    
         
             
              it 'should set activity subtype for FILE2.FIT activity' do
         
     | 
| 
       139 
144 
     | 
    
         
             
                postrunner(%w( set subtype Road :1 ))
         
     | 
| 
       140 
145 
     | 
    
         
             
                list = postrunner(%w( summary :1 ))
         
     | 
| 
       141 
     | 
    
         
            -
                list.index('Generic'). 
     | 
| 
       142 
     | 
    
         
            -
                list.index('Road'). 
     | 
| 
      
 146 
     | 
    
         
            +
                expect(list.index('Generic')).to be_nil
         
     | 
| 
      
 147 
     | 
    
         
            +
                expect(list.index('Road')).to be_a(Fixnum)
         
     | 
| 
       143 
148 
     | 
    
         
             
              end
         
     | 
| 
       144 
149 
     | 
    
         | 
| 
       145 
150 
     | 
    
         
             
              it 'should fail when setting bad activity subtype' do
         
     | 
| 
       146 
     | 
    
         
            -
                 
     | 
| 
      
 151 
     | 
    
         
            +
                expect { postrunner(%w( set subtype foobar :1)) }.to raise_error(Fit4Ruby::Error)
         
     | 
| 
       147 
152 
     | 
    
         
             
              end
         
     | 
| 
       148 
153 
     | 
    
         | 
| 
       149 
154 
     | 
    
         
             
              it 'should dump an activity from the archive' do
         
     | 
| 
         @@ -162,25 +167,24 @@ describe PostRunner::Main do 
     | 
|
| 
       162 
167 
     | 
    
         
             
                postrunner(%w( units metric ))
         
     | 
| 
       163 
168 
     | 
    
         
             
              end
         
     | 
| 
       164 
169 
     | 
    
         | 
| 
       165 
     | 
    
         
            -
              it 'should  
     | 
| 
       166 
     | 
    
         
            -
                #  
     | 
| 
       167 
     | 
    
         
            -
                 
     | 
| 
       168 
     | 
    
         
            -
                 
     | 
| 
       169 
     | 
    
         
            -
                 
     | 
| 
       170 
     | 
    
         
            -
                rc = PostRunner::RuntimeConfig.new(@db_dir)
         
     | 
| 
       171 
     | 
    
         
            -
                rc.get_option(:version).should == '0.0.0'
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
                archive_file = File.join(@db_dir, 'archive.yml')
         
     | 
| 
       174 
     | 
    
         
            -
                archive = YAML.load_file(archive_file)
         
     | 
| 
       175 
     | 
    
         
            -
                archive.each { |a| a.remove_instance_variable:@sport }
         
     | 
| 
       176 
     | 
    
         
            -
                File.write(archive_file, archive.to_yaml)
         
     | 
| 
      
 170 
     | 
    
         
            +
              it 'should list records' do
         
     | 
| 
      
 171 
     | 
    
         
            +
                # Add slow running activity
         
     | 
| 
      
 172 
     | 
    
         
            +
                postrunner([ 'import', '--force', @file1 ])
         
     | 
| 
      
 173 
     | 
    
         
            +
                list = postrunner([ 'records' ])
         
     | 
| 
      
 174 
     | 
    
         
            +
                expect(list.index(File.basename(@file1))).to be_a(Fixnum)
         
     | 
| 
       177 
175 
     | 
    
         | 
| 
       178 
     | 
    
         
            -
                #  
     | 
| 
       179 
     | 
    
         
            -
                postrunner( 
     | 
| 
      
 176 
     | 
    
         
            +
                # Add fast running activity
         
     | 
| 
      
 177 
     | 
    
         
            +
                postrunner([ 'import', @file3 ])
         
     | 
| 
      
 178 
     | 
    
         
            +
                list = postrunner([ 'records' ])
         
     | 
| 
      
 179 
     | 
    
         
            +
                expect(list.index(File.basename(@file3))).to be_a(Fixnum)
         
     | 
| 
      
 180 
     | 
    
         
            +
                expect(list.index(File.basename(@file1))).to be_nil
         
     | 
| 
      
 181 
     | 
    
         
            +
              end
         
     | 
| 
       180 
182 
     | 
    
         | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
                 
     | 
| 
       183 
     | 
    
         
            -
                 
     | 
| 
      
 183 
     | 
    
         
            +
              it 'should ignore records of an activity' do
         
     | 
| 
      
 184 
     | 
    
         
            +
                postrunner(%w( set norecord true :1 ))
         
     | 
| 
      
 185 
     | 
    
         
            +
                list = postrunner([ 'records' ])
         
     | 
| 
      
 186 
     | 
    
         
            +
                expect(list.index(File.basename(@file1))).to be_a(Fixnum)
         
     | 
| 
      
 187 
     | 
    
         
            +
                expect(list.index(File.basename(@file3))).to be_nil
         
     | 
| 
       184 
188 
     | 
    
         
             
              end
         
     | 
| 
       185 
189 
     | 
    
         | 
| 
       186 
190 
     | 
    
         
             
            end
         
     | 
    
        data/spec/View_spec.rb
    CHANGED
    
    
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -19,6 +19,16 @@ require 'fileutils' 
     | 
|
| 
       19 
19 
     | 
    
         
             
              $:.unshift(File.join(File.dirname(__FILE__), '..', '..', lib_dir, 'lib'))
         
     | 
| 
       20 
20 
     | 
    
         
             
            end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
            require 'fit4ruby'
         
     | 
| 
      
 23 
     | 
    
         
            +
            require 'perobs'
         
     | 
| 
      
 24 
     | 
    
         
            +
            require 'postrunner/FitFileStore'
         
     | 
| 
      
 25 
     | 
    
         
            +
            require 'postrunner/PersonalRecords'
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            def capture_stdio
         
     | 
| 
      
 28 
     | 
    
         
            +
              @log = StringIO.new
         
     | 
| 
      
 29 
     | 
    
         
            +
              Fit4Ruby::Log.open(@log)
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       22 
32 
     | 
    
         
             
            def tmp_dir_name(caller_file)
         
     | 
| 
       23 
33 
     | 
    
         
             
              begin
         
     | 
| 
       24 
34 
     | 
    
         
             
                dir_name = File.join(Dir.tmpdir,
         
     | 
| 
         @@ -28,6 +38,29 @@ def tmp_dir_name(caller_file) 
     | 
|
| 
       28 
38 
     | 
    
         
             
              dir_name
         
     | 
| 
       29 
39 
     | 
    
         
             
            end
         
     | 
| 
       30 
40 
     | 
    
         | 
| 
      
 41 
     | 
    
         
            +
            def create_working_dirs
         
     | 
| 
      
 42 
     | 
    
         
            +
              @work_dir = tmp_dir_name(__FILE__)
         
     | 
| 
      
 43 
     | 
    
         
            +
              Dir.mkdir(@work_dir)
         
     | 
| 
      
 44 
     | 
    
         
            +
              @fit_dir = File.join(@work_dir, 'fit')
         
     | 
| 
      
 45 
     | 
    
         
            +
              Dir.mkdir(@fit_dir)
         
     | 
| 
      
 46 
     | 
    
         
            +
              @html_dir = File.join(@work_dir, 'html')
         
     | 
| 
      
 47 
     | 
    
         
            +
              Dir.mkdir(@html_dir)
         
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            def cleanup
         
     | 
| 
      
 51 
     | 
    
         
            +
              FileUtils.rm_rf(@work_dir)
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            def create_fit_file_store
         
     | 
| 
      
 55 
     | 
    
         
            +
              store = PEROBS::Store.new(File.join(@work_dir, 'db'))
         
     | 
| 
      
 56 
     | 
    
         
            +
              store['config'] = store.new(PEROBS::Hash)
         
     | 
| 
      
 57 
     | 
    
         
            +
              store['config']['data_dir'] = @work_dir
         
     | 
| 
      
 58 
     | 
    
         
            +
              store['config']['html_dir'] = @html_dir
         
     | 
| 
      
 59 
     | 
    
         
            +
              store['config']['unit_system'] = :metric
         
     | 
| 
      
 60 
     | 
    
         
            +
              @ffs = store['file_store'] = store.new(PostRunner::FitFileStore)
         
     | 
| 
      
 61 
     | 
    
         
            +
              @records = store['records'] = store.new(PostRunner::PersonalRecords)
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
       31 
64 
     | 
    
         
             
            def create_fit_file(name, date, duration_minutes = 30)
         
     | 
| 
       32 
65 
     | 
    
         
             
              Fit4Ruby.write(name, create_fit_activity(
         
     | 
| 
       33 
66 
     | 
    
         
             
                { :t => date, :duration => duration_minutes }))
         
     | 
| 
         @@ -63,14 +96,17 @@ def create_fit_activity(config) 
     | 
|
| 
       63 
96 
     | 
    
         
             
                                  :garmin_product => 'sdm4',
         
     | 
| 
       64 
97 
     | 
    
         
             
                                  :device_index => 1, :battery_status => 'ok' })
         
     | 
| 
       65 
98 
     | 
    
         
             
              laps = 0
         
     | 
| 
      
 99 
     | 
    
         
            +
              curr_speed = (config[:speed] ? config[:speed] : 10.0) / 3.6 # as m/s
         
     | 
| 
      
 100 
     | 
    
         
            +
              curr_distance = 0.0 # as m
         
     | 
| 
       66 
101 
     | 
    
         
             
              0.upto((a.total_timer_time / 60) - 1) do |mins|
         
     | 
| 
      
 102 
     | 
    
         
            +
                curr_speed -= 0.05 if curr_speed > 2.5
         
     | 
| 
       67 
103 
     | 
    
         
             
                a.new_record({
         
     | 
| 
       68 
104 
     | 
    
         
             
                  :timestamp => ts,
         
     | 
| 
       69 
105 
     | 
    
         
             
                  :position_lat => 51.5512 - mins * 0.0008,
         
     | 
| 
       70 
106 
     | 
    
         
             
                  :position_long => 11.647 + mins * 0.002,
         
     | 
| 
       71 
     | 
    
         
            -
                  :distance =>  
     | 
| 
      
 107 
     | 
    
         
            +
                  :distance => curr_distance += curr_speed * 60,
         
     | 
| 
       72 
108 
     | 
    
         
             
                  :altitude => 100 + mins * 3,
         
     | 
| 
       73 
     | 
    
         
            -
                  :speed =>  
     | 
| 
      
 109 
     | 
    
         
            +
                  :speed => curr_speed,
         
     | 
| 
       74 
110 
     | 
    
         
             
                  :vertical_oscillation => 90 + mins * 0.2,
         
     | 
| 
       75 
111 
     | 
    
         
             
                  :stance_time => 235.0 * mins * 0.01,
         
     | 
| 
       76 
112 
     | 
    
         
             
                  :stance_time_percent => 32.0,
         
     | 
| 
         @@ -112,4 +148,42 @@ def create_fit_activity(config) 
     | 
|
| 
       112 
148 
     | 
    
         
             
              a
         
     | 
| 
       113 
149 
     | 
    
         
             
            end
         
     | 
| 
       114 
150 
     | 
    
         | 
| 
      
 151 
     | 
    
         
            +
            def tables_to_arrays(str)
         
     | 
| 
      
 152 
     | 
    
         
            +
              mode = :searching_table
         
     | 
| 
      
 153 
     | 
    
         
            +
              arrays = []
         
     | 
| 
      
 154 
     | 
    
         
            +
              array = []
         
     | 
| 
      
 155 
     | 
    
         
            +
              str.each_line do |line|
         
     | 
| 
      
 156 
     | 
    
         
            +
                case mode
         
     | 
| 
      
 157 
     | 
    
         
            +
                when :searching_table
         
     | 
| 
      
 158 
     | 
    
         
            +
                  if line[0] == '+'
         
     | 
| 
      
 159 
     | 
    
         
            +
                    mode = :header
         
     | 
| 
      
 160 
     | 
    
         
            +
                  end
         
     | 
| 
      
 161 
     | 
    
         
            +
                when :header
         
     | 
| 
      
 162 
     | 
    
         
            +
                  if line[0] == '|'
         
     | 
| 
      
 163 
     | 
    
         
            +
                    mode = :separation_line
         
     | 
| 
      
 164 
     | 
    
         
            +
                  else
         
     | 
| 
      
 165 
     | 
    
         
            +
                    mode = :searching_table
         
     | 
| 
      
 166 
     | 
    
         
            +
                  end
         
     | 
| 
      
 167 
     | 
    
         
            +
                when :separation_line
         
     | 
| 
      
 168 
     | 
    
         
            +
                  if line[0] == '+'
         
     | 
| 
      
 169 
     | 
    
         
            +
                    mode = :body
         
     | 
| 
      
 170 
     | 
    
         
            +
                  else
         
     | 
| 
      
 171 
     | 
    
         
            +
                    mode = :searching_table
         
     | 
| 
      
 172 
     | 
    
         
            +
                  end
         
     | 
| 
      
 173 
     | 
    
         
            +
                when :body
         
     | 
| 
      
 174 
     | 
    
         
            +
                  if line[0] == '|'
         
     | 
| 
      
 175 
     | 
    
         
            +
                    array << line[1..-3].split('|').map(&:strip)
         
     | 
| 
      
 176 
     | 
    
         
            +
                  elsif line[0] == '+'
         
     | 
| 
      
 177 
     | 
    
         
            +
                    arrays << array
         
     | 
| 
      
 178 
     | 
    
         
            +
                    array = []
         
     | 
| 
      
 179 
     | 
    
         
            +
                    mode = :searching_table
         
     | 
| 
      
 180 
     | 
    
         
            +
                  else
         
     | 
| 
      
 181 
     | 
    
         
            +
                    array = []
         
     | 
| 
      
 182 
     | 
    
         
            +
                    mode = :searching_table
         
     | 
| 
      
 183 
     | 
    
         
            +
                  end
         
     | 
| 
      
 184 
     | 
    
         
            +
                end
         
     | 
| 
      
 185 
     | 
    
         
            +
              end
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
              arrays
         
     | 
| 
      
 188 
     | 
    
         
            +
            end
         
     | 
| 
       115 
189 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,125 +1,126 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: postrunner
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Chris Schlaeger
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-01-29 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: fit4ruby
         
     | 
| 
       15 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: 0.0. 
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 0.0.9
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: 0.0. 
     | 
| 
      
 26 
     | 
    
         
            +
                    version: 0.0.9
         
     | 
| 
       27 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
28 
     | 
    
         
             
              name: perobs
         
     | 
| 
       29 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       30 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       31 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       32 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       33 
     | 
    
         
            -
                    version:  
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '2.2'
         
     | 
| 
       34 
34 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       35 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       36 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       37 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       38 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
     | 
    
         
            -
                    version:  
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '2.2'
         
     | 
| 
       41 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
42 
     | 
    
         
             
              name: nokogiri
         
     | 
| 
       43 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       44 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       46 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       47 
47 
     | 
    
         
             
                    version: '1.6'
         
     | 
| 
       48 
48 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       49 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
54 
     | 
    
         
             
                    version: '1.6'
         
     | 
| 
       55 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
56 
     | 
    
         
             
              name: bundler
         
     | 
| 
       57 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       58 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       60 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
61 
     | 
    
         
             
                    version: '1.6'
         
     | 
| 
       62 
62 
     | 
    
         
             
              type: :development
         
     | 
| 
       63 
63 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       64 
64 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       66 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
68 
     | 
    
         
             
                    version: '1.6'
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
70 
     | 
    
         
             
              name: rake
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       72 
72 
     | 
    
         
             
                requirements:
         
     | 
| 
       73 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 73 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       74 
74 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
75 
     | 
    
         
             
                    version: 0.9.6
         
     | 
| 
       76 
76 
     | 
    
         
             
              type: :development
         
     | 
| 
       77 
77 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       78 
78 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
79 
     | 
    
         
             
                requirements:
         
     | 
| 
       80 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
82 
     | 
    
         
             
                    version: 0.9.6
         
     | 
| 
       83 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
84 
     | 
    
         
             
              name: rspec
         
     | 
| 
       85 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       86 
86 
     | 
    
         
             
                requirements:
         
     | 
| 
       87 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 87 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       88 
88 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       89 
     | 
    
         
            -
                    version:  
     | 
| 
      
 89 
     | 
    
         
            +
                    version: 3.4.1
         
     | 
| 
       90 
90 
     | 
    
         
             
              type: :development
         
     | 
| 
       91 
91 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       92 
92 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       93 
93 
     | 
    
         
             
                requirements:
         
     | 
| 
       94 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 94 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       95 
95 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       96 
     | 
    
         
            -
                    version:  
     | 
| 
      
 96 
     | 
    
         
            +
                    version: 3.4.1
         
     | 
| 
       97 
97 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       98 
98 
     | 
    
         
             
              name: yard
         
     | 
| 
       99 
99 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       100 
100 
     | 
    
         
             
                requirements:
         
     | 
| 
       101 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 101 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       102 
102 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       103 
103 
     | 
    
         
             
                    version: 0.8.7
         
     | 
| 
       104 
104 
     | 
    
         
             
              type: :development
         
     | 
| 
       105 
105 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       106 
106 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       107 
107 
     | 
    
         
             
                requirements:
         
     | 
| 
       108 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 108 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       109 
109 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       110 
110 
     | 
    
         
             
                    version: 0.8.7
         
     | 
| 
       111 
111 
     | 
    
         
             
            description: This application will allow you to manage and analyze .FIT files such
         
     | 
| 
       112 
112 
     | 
    
         
             
              as those generated by Garmin GPS devices. The application was developed and tested
         
     | 
| 
       113 
113 
     | 
    
         
             
              with the Garmin Forerunner 620 and Fenix 3. Other devices may work as well. They
         
     | 
| 
       114 
     | 
    
         
            -
              need to export the data as USB Mass Storage devices.
         
     | 
| 
      
 114 
     | 
    
         
            +
              need to export the data as USB Mass Storage devices. It is an offline alternative
         
     | 
| 
      
 115 
     | 
    
         
            +
              to Garmin Connect.
         
     | 
| 
       115 
116 
     | 
    
         
             
            email:
         
     | 
| 
       116 
     | 
    
         
            -
            -  
     | 
| 
      
 117 
     | 
    
         
            +
            - cs@taskjuggler.org
         
     | 
| 
       117 
118 
     | 
    
         
             
            executables:
         
     | 
| 
       118 
119 
     | 
    
         
             
            - postrunner
         
     | 
| 
       119 
120 
     | 
    
         
             
            extensions: []
         
     | 
| 
       120 
121 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       121 
122 
     | 
    
         
             
            files:
         
     | 
| 
       122 
     | 
    
         
            -
            - .gitignore
         
     | 
| 
      
 123 
     | 
    
         
            +
            - ".gitignore"
         
     | 
| 
       123 
124 
     | 
    
         
             
            - COPYING
         
     | 
| 
       124 
125 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       125 
126 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -136,14 +137,22 @@ files: 
     | 
|
| 
       136 
137 
     | 
    
         
             
            - lib/postrunner/ChartView.rb
         
     | 
| 
       137 
138 
     | 
    
         
             
            - lib/postrunner/DataSources.rb
         
     | 
| 
       138 
139 
     | 
    
         
             
            - lib/postrunner/DeviceList.rb
         
     | 
| 
      
 140 
     | 
    
         
            +
            - lib/postrunner/DirUtils.rb
         
     | 
| 
       139 
141 
     | 
    
         
             
            - lib/postrunner/EPO_Downloader.rb
         
     | 
| 
      
 142 
     | 
    
         
            +
            - lib/postrunner/EventList.rb
         
     | 
| 
      
 143 
     | 
    
         
            +
            - lib/postrunner/FFS_Activity.rb
         
     | 
| 
      
 144 
     | 
    
         
            +
            - lib/postrunner/FFS_Device.rb
         
     | 
| 
      
 145 
     | 
    
         
            +
            - lib/postrunner/FitFileStore.rb
         
     | 
| 
       140 
146 
     | 
    
         
             
            - lib/postrunner/FlexiTable.rb
         
     | 
| 
      
 147 
     | 
    
         
            +
            - lib/postrunner/HRV_Analyzer.rb
         
     | 
| 
       141 
148 
     | 
    
         
             
            - lib/postrunner/HTMLBuilder.rb
         
     | 
| 
      
 149 
     | 
    
         
            +
            - lib/postrunner/LinearPredictor.rb
         
     | 
| 
       142 
150 
     | 
    
         
             
            - lib/postrunner/Log.rb
         
     | 
| 
       143 
151 
     | 
    
         
             
            - lib/postrunner/Main.rb
         
     | 
| 
       144 
152 
     | 
    
         
             
            - lib/postrunner/MonitoringDB.rb
         
     | 
| 
       145 
153 
     | 
    
         
             
            - lib/postrunner/NavButtonRow.rb
         
     | 
| 
       146 
154 
     | 
    
         
             
            - lib/postrunner/PagingButtons.rb
         
     | 
| 
      
 155 
     | 
    
         
            +
            - lib/postrunner/Percentiles.rb
         
     | 
| 
       147 
156 
     | 
    
         
             
            - lib/postrunner/PersonalRecords.rb
         
     | 
| 
       148 
157 
     | 
    
         
             
            - lib/postrunner/QueryResult.rb
         
     | 
| 
       149 
158 
     | 
    
         
             
            - lib/postrunner/RecordListPageView.rb
         
     | 
| 
         @@ -286,9 +295,12 @@ files: 
     | 
|
| 
       286 
295 
     | 
    
         
             
            - misc/jquery/jquery-2.1.1.min.js
         
     | 
| 
       287 
296 
     | 
    
         
             
            - misc/openlayers/ol.css
         
     | 
| 
       288 
297 
     | 
    
         
             
            - misc/openlayers/ol.js
         
     | 
| 
      
 298 
     | 
    
         
            +
            - misc/postrunner/trackview.js
         
     | 
| 
       289 
299 
     | 
    
         
             
            - postrunner.gemspec
         
     | 
| 
       290 
300 
     | 
    
         
             
            - spec/ActivitySummary_spec.rb
         
     | 
| 
      
 301 
     | 
    
         
            +
            - spec/FitFileStore_spec.rb
         
     | 
| 
       291 
302 
     | 
    
         
             
            - spec/FlexiTable_spec.rb
         
     | 
| 
      
 303 
     | 
    
         
            +
            - spec/PersonalRecords_spec.rb
         
     | 
| 
       292 
304 
     | 
    
         
             
            - spec/PostRunner_spec.rb
         
     | 
| 
       293 
305 
     | 
    
         
             
            - spec/View_spec.rb
         
     | 
| 
       294 
306 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
         @@ -302,23 +314,25 @@ require_paths: 
     | 
|
| 
       302 
314 
     | 
    
         
             
            - lib
         
     | 
| 
       303 
315 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
       304 
316 
     | 
    
         
             
              requirements:
         
     | 
| 
       305 
     | 
    
         
            -
              - -  
     | 
| 
      
 317 
     | 
    
         
            +
              - - ">="
         
     | 
| 
       306 
318 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       307 
319 
     | 
    
         
             
                  version: '2.0'
         
     | 
| 
       308 
320 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       309 
321 
     | 
    
         
             
              requirements:
         
     | 
| 
       310 
     | 
    
         
            -
              - -  
     | 
| 
      
 322 
     | 
    
         
            +
              - - ">="
         
     | 
| 
       311 
323 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       312 
324 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       313 
325 
     | 
    
         
             
            requirements: []
         
     | 
| 
       314 
326 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       315 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 327 
     | 
    
         
            +
            rubygems_version: 2.4.5.1
         
     | 
| 
       316 
328 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       317 
329 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       318 
330 
     | 
    
         
             
            summary: Application to manage and analyze Garmin FIT files.
         
     | 
| 
       319 
331 
     | 
    
         
             
            test_files:
         
     | 
| 
       320 
332 
     | 
    
         
             
            - spec/ActivitySummary_spec.rb
         
     | 
| 
      
 333 
     | 
    
         
            +
            - spec/FitFileStore_spec.rb
         
     | 
| 
       321 
334 
     | 
    
         
             
            - spec/FlexiTable_spec.rb
         
     | 
| 
      
 335 
     | 
    
         
            +
            - spec/PersonalRecords_spec.rb
         
     | 
| 
       322 
336 
     | 
    
         
             
            - spec/PostRunner_spec.rb
         
     | 
| 
       323 
337 
     | 
    
         
             
            - spec/View_spec.rb
         
     | 
| 
       324 
338 
     | 
    
         
             
            - spec/spec_helper.rb
         
     |