strava-cli 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7d67a17b36b8e60f1eee986199ffcef7ba88a594
4
+ data.tar.gz: 1ec92cd83e31bc523228b928683cf4ad61ff69bb
5
+ SHA512:
6
+ metadata.gz: d0b487877ce01851eba6538016198b70a1b528fbcb2493f44ae11f119b13ea74289e220e6d3c8060bfa9322f2b3a4e121468c088633d4db27c0763eea5acf899
7
+ data.tar.gz: 212c72c7bad5fc737e0acc7ef69624fe9e4bb02714b96e67d81382b6ec1ffbe29b60903d8b543bb083b5e905fb0336f60ac5f290c694015276aa681ecb3531db
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ Gemfile.lock
3
+ strava.yml
4
+ strava/*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/bin/strava ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'strava'
4
+
5
+ Strava::App.new.run
data/lib/strava/app.rb ADDED
@@ -0,0 +1,96 @@
1
+ require 'easy_app_helper'
2
+ require 'terminal-table'
3
+ require 'strava/api/v3'
4
+ require 'vcr'
5
+ require 'time'
6
+
7
+ # Method access to Hash content
8
+ require 'hashie'
9
+ class Hash; include Hashie::Extensions::MethodAccess; end
10
+
11
+ # Configure HTTP records
12
+ VCR.configure do |config|
13
+ config.cassette_library_dir = "#{File.expand_path('~')}/.strava"
14
+ config.hook_into :webmock
15
+ end
16
+
17
+ module Strava
18
+ class App
19
+ include EasyAppHelper
20
+
21
+ NAME = 'Strava Dashboard'
22
+ DESCRIPTION = 'Fetchs data from strava to report what you have done'
23
+
24
+ attr_accessor :client, :types, :fields
25
+ def initialize
26
+ config.config_file_base_name = 'strava'
27
+ config.describes_application app_name: NAME,
28
+ app_version: Strava::VERSION,
29
+ app_description: DESCRIPTION
30
+
31
+ config.add_command_line_section('Strava options') do |slop|
32
+ slop.on :strava_access_token, 'Strava access token', argument: true, as: String
33
+ slop.on :activity, 'Display this activity type only (Run, Ride, Swim)', argument: true
34
+ end
35
+
36
+ if config[:help]
37
+ puts config.command_line_help
38
+ exit 0
39
+ end
40
+
41
+ if config[:activity]
42
+ @types = [config[:activity]]
43
+ else
44
+ @types = %w(Run Ride Swim)
45
+ end
46
+ @fields = ["Start date", "Distance", "Elapsed time", "Avg speed"]
47
+ end
48
+
49
+ def configure_api_client
50
+ @client = Strava::Api::V3::Client.new(access_token: config[:strava_access_token])
51
+ end
52
+
53
+ def run
54
+ configure_api_client
55
+
56
+ activities = []
57
+
58
+ VCR.use_cassette("activities", record: :new_episodes) do
59
+ page = 0
60
+ per_page = 100
61
+ while activities.count == page*per_page
62
+ page +=1
63
+ activities += client.list_athlete_activities(per_page: per_page,page: page)
64
+ end
65
+ end
66
+
67
+ for type in types
68
+ rows = []
69
+ month = -1
70
+ activities.select { |activity| activity.type == type }.each do |activity|
71
+ date = Time.parse(activity.start_date_local)
72
+ current_month = date.month
73
+ distance_km = (activity.distance/1000.0).round(3)
74
+ elapsed_time_min = (activity.elapsed_time/60.0).round(2)
75
+ elapsed_time_hour = (activity.elapsed_time/3600.0)
76
+ avg_speed = (distance_km/elapsed_time_hour).round(2)
77
+ if current_month != month && month != -1
78
+ rows << :separator
79
+ end
80
+ month = current_month
81
+ rows << [date , "#{distance_km} km", "#{elapsed_time_min} min", "#{avg_speed} km/h"]
82
+ end
83
+
84
+ table = Terminal::Table.new :title => type, :headings => fields, :rows => rows
85
+
86
+ if rows.empty?
87
+ puts "No activity found. Go out and start #{type}ing!"
88
+ else
89
+ puts table
90
+ end
91
+ puts "\n"
92
+ end
93
+ end
94
+ end
95
+ end
96
+
@@ -0,0 +1,3 @@
1
+ module Strava
2
+ VERSION = '0.0.1'
3
+ end
data/lib/strava.rb ADDED
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+
3
+ require 'strava/version'
4
+ require 'strava/app'
data/strava.gemspec ADDED
@@ -0,0 +1,43 @@
1
+ $: << File.expand_path('../lib', __FILE__)
2
+ require 'strava/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'strava-cli'
6
+ s.licenses = ['MIT']
7
+ s.version = Strava::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Paul Bonaud']
10
+ s.email = ['paul@bonaud.fr']
11
+ s.homepage = 'https://rubygems.org/gems/strava-cli'
12
+ s.summary = %q(Generate strava dashboards.)
13
+ s.description = %q(Generate strava dashboards.)
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
+ s.require_paths = ['lib']
19
+
20
+ s.required_ruby_version = '>= 2.2.2'
21
+
22
+ s.add_dependency 'easy_app_helper'
23
+ s.add_dependency 'vcr'
24
+ s.add_dependency 'hashie'
25
+ s.add_dependency 'strava-api-v3'
26
+ s.add_dependency 'terminal-table'
27
+
28
+ s.add_development_dependency 'pry'
29
+ s.add_development_dependency 'guard'
30
+ s.add_development_dependency 'guard-rspec'
31
+ s.add_development_dependency 'guard-rubocop'
32
+ s.add_development_dependency 'rubocop'
33
+ s.add_development_dependency 'ci_reporter'
34
+ s.add_development_dependency 'ci_reporter_rspec'
35
+ s.add_development_dependency 'rack-test'
36
+ s.add_development_dependency 'rake'
37
+ s.add_development_dependency 'rspec'
38
+ s.add_development_dependency 'rspec-its'
39
+ s.add_development_dependency 'simplecov'
40
+ s.add_development_dependency 'simplecov-rcov'
41
+ s.add_development_dependency 'timecop'
42
+ s.add_development_dependency 'webmock'
43
+ end
metadata ADDED
@@ -0,0 +1,332 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: strava-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Paul Bonaud
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: easy_app_helper
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: vcr
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: hashie
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: strava-api-v3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
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: terminal-table
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
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: guard-rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: ci_reporter
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: ci_reporter_rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rack-test
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rake
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rspec
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rspec-its
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: simplecov
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: simplecov-rcov
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: timecop
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: webmock
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ description: Generate strava dashboards.
294
+ email:
295
+ - paul@bonaud.fr
296
+ executables:
297
+ - strava
298
+ extensions: []
299
+ extra_rdoc_files: []
300
+ files:
301
+ - ".gitignore"
302
+ - Gemfile
303
+ - bin/strava
304
+ - lib/strava.rb
305
+ - lib/strava/app.rb
306
+ - lib/strava/version.rb
307
+ - strava.gemspec
308
+ homepage: https://rubygems.org/gems/strava-cli
309
+ licenses:
310
+ - MIT
311
+ metadata: {}
312
+ post_install_message:
313
+ rdoc_options: []
314
+ require_paths:
315
+ - lib
316
+ required_ruby_version: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: 2.2.2
321
+ required_rubygems_version: !ruby/object:Gem::Requirement
322
+ requirements:
323
+ - - ">="
324
+ - !ruby/object:Gem::Version
325
+ version: '0'
326
+ requirements: []
327
+ rubyforge_project:
328
+ rubygems_version: 2.6.8
329
+ signing_key:
330
+ specification_version: 4
331
+ summary: Generate strava dashboards.
332
+ test_files: []