strava-ruby-client 0.3.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67660b1916a241d6029346ff2da15b8317dbb752974d1772faaba9a48a7441a8
4
- data.tar.gz: 4dc208a403ee703bdeeca2c21d9af8fd37a9b3d7c9b851c4e328cbc382529962
3
+ metadata.gz: c405363163b2332c696362fcaecc55b27ebcc9cc36dc78bfff54059d4433a580
4
+ data.tar.gz: a555beb0bf2072cf7cfe40a8178e72d0d4bc846963446704a642e344d46f780e
5
5
  SHA512:
6
- metadata.gz: 17e10865286fad7301c21d51feed1482b01cf8e1fe5345f1b0cbf4b8dd66cfe5ea9351658afd09d2d2bc7f46669914240d764201b1c20f82a32dc5cd310f895f
7
- data.tar.gz: a165b273493382cee3b1160f5b3339fda53506110bad84737af77ba4f6505b996d5e1ae0f8562b1c6a17f2b8ac8babc0ae9e44be92b066d2c0cca92f6ad0f2d9
6
+ metadata.gz: ca090cb5fc5553cbf275f36e797e90cbede14cbe8c400520b79a4ddd061719878e3f1b38e13efbf948bab884f5ab62f8d5b5e49812cc154af155e78bd3601dfc
7
+ data.tar.gz: 662f42daf772d75c032a2f228f4d0a2f268c8de68a9ea91b95cae9840d0a185c3a159df5023b182026fd47deaa5909494b06d3b03e91cd85ac74bed66a249239
data/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ ### 0.4.2 (2021/10/03)
2
+
3
+ * [#45](https://github.com/dblock/strava-ruby-client/pull/45): Added `Gear#frame_type` `#retired` `#weight` - [@deuber](https://github.com/deuber).
4
+
5
+ ### 0.4.1 (2021/07/11)
6
+
7
+ * [#37](https://github.com/dblock/strava-ruby-client/pull/38): Added `Club#club_events` - [@simonneutert](https://github.com/simonneutert).
8
+ * [#34](https://github.com/dblock/strava-ruby-client/pull/34): Added `Athlete#ftp` - [@virae](https://github.com/virae).
9
+
10
+ ### 0.4.0 (2020/05/09)
11
+
12
+ * [#29](https://github.com/dblock/strava-ruby-client/pull/29): Cache `Faraday::Connection` for persistent adapters - [@dblock](https://github.com/dblock).
13
+ * [#30](https://github.com/dblock/strava-ruby-client/pull/30): Require Faraday >= 1.0 - [@dblock](https://github.com/dblock).
14
+
15
+ ### 0.3.2 (2020/03/28)
16
+
17
+ * [#26](https://github.com/dblock/strava-ruby-client/pull/26): Corrected `Strava::Webhooks.config.endpoint` - [@dblock](https://github.com/dblock).
18
+ * Automatically convert `before` and `after` arguments of `Strava::Api::Client#athlete_activities` from `Time` to `Integer` - [@dblock](https://github.com/dblock).
19
+ * [#18](https://github.com/dblock/strava-ruby-client/pull/18): Testing against Ruby 2.5.3 and 2.6.0 - [@lucianosousa](https://github.com/lucianosousa).
20
+ * [#18](https://github.com/dblock/strava-ruby-client/pull/18): Upgraded Rubocop to 0.61.1 - [@lucianosousa](https://github.com/lucianosousa).
21
+ * [#21](https://github.com/dblock/strava-ruby-client/pull/21): Include headers in error response - [@jameschevalier](https://github.com/jameschevalier).
22
+
1
23
  ### 0.3.1 (2018/12/05)
2
24
 
3
25
  * Added `Strava::Api::Client#activity_photos` - [@dblock](https://github.com/dblock).
data/README.md CHANGED
@@ -29,6 +29,7 @@ Unlike other clients, including [strava-api-v3](https://github.com/jaredholdcrof
29
29
  - [Update Athlete](#update-athlete)
30
30
  - [Clubs](#clubs)
31
31
  - [List Club Activities](#list-club-activities)
32
+ - [List Club Events](#list-club-events)
32
33
  - [List Club Administrators](#list-club-administrators)
33
34
  - [Get Club](#get-club)
34
35
  - [List Club Members](#list-club-members)
@@ -63,6 +64,7 @@ Unlike other clients, including [strava-api-v3](https://github.com/jaredholdcrof
63
64
  - [OAuth](#oauth)
64
65
  - [OAuth Workflow](#oauth-workflow)
65
66
  - [Deauthorize](#deauthorize)
67
+ - [Command Line OAuth Workflow](#command-line-oauth-workflow)
66
68
  - [Webhooks](#webhooks)
67
69
  - [Configuration](#configuration)
68
70
  - [Web Client Options](#web-client-options)
@@ -72,6 +74,9 @@ Unlike other clients, including [strava-api-v3](https://github.com/jaredholdcrof
72
74
  - [Errors](#errors)
73
75
  - [Tools](#tools)
74
76
  - [Strava OAuth Token](#strava-oauth-token)
77
+ - [Users](#users)
78
+ - [Resources](#resources)
79
+ - [Upgrading](#upgrading)
75
80
  - [Contributing](#contributing)
76
81
  - [Copyright and License](#copyright-and-license)
77
82
 
@@ -353,6 +358,20 @@ activity.name # => 'Afternoon Run'
353
358
 
354
359
  See [Strava::Models::Activity](lib/strava/models/activity.rb) for all available properties. Note that Strava does not return activity or athlete ID via this API.
355
360
 
361
+ #### List Club Events
362
+
363
+ Retrieve recent Events from a specific club.
364
+
365
+ ```ruby
366
+ events = client.club_events(108605) # => Array[Strava::Models::ClubEvent]
367
+
368
+ event = events.first # => Strava::Models::ClubEvent
369
+
370
+ event.title # => 'First Group Event Ever! Yippieh!'
371
+ ```
372
+
373
+ See [Strava::Models::ClubEvent](lib/strava/models/club_event.rb) for all available properties.
374
+
356
375
  #### List Club Administrators
357
376
 
358
377
  Returns a list of the administrators of a given club.
@@ -413,15 +432,19 @@ See [Strava::Models::Club](lib/strava/models/club.rb) for all available properti
413
432
  Returns an equipment using its identifier.
414
433
 
415
434
  ```ruby
416
- gear = client.gear('g3844087') # => Strava::Models::Gear
435
+ gear = client.gear(id: 'b2338517') # => Strava::Models::Gear
417
436
 
418
- gear.id # => 'g3844087'
419
- gear.name # => 'Adidas Supernova ST'
437
+ gear.id # => 'b2338517'
438
+ gear.name # => 'Trek'
420
439
  gear.distance # => 380939.0
421
440
  gear.distance_s # => '380.94km'
422
- gear.brand_name # => 'Adidas'
423
- gear.model_name # => 'Supernova'
424
- gear.description # => 'My NYC TCS Marathon 2018 shoes.'
441
+ gear.brand_name # => 'Trek'
442
+ gear.model_name # => 'Madone'
443
+ gear.description # => 'white'
444
+ gear.primary # => 'false'
445
+ gear.frame_type # => '3'
446
+ gear.weight # => '9'
447
+ gear.retired # => 'false'
425
448
  ```
426
449
 
427
450
  See [Strava::Models::Gear](lib/strava/models/gear.rb) for all available properties.
@@ -843,9 +866,15 @@ authorization = client.deauthorize
843
866
  authorization.access_token # => String, access token being revoked
844
867
  ```
845
868
 
869
+ #### Command Line OAuth Workflow
870
+
871
+ The OAuth process is web-based and you cannot obtain a token from a Strava client ID and secret without user intervention. You can, however, start a local web server to handle the OAuth redirect and open a browser from the command-line.
872
+
873
+ See [strava-oauth-token](/bin/strava-oauth-token) or [strava-ruby-cli](https://github.com/dblock/strava-ruby-cli) for an example.
874
+
846
875
  ### Webhooks
847
876
 
848
- Strava provides a [Webhook Event API](https://developers.strava.com/docs/webhooks/) that requires special access obtained by emailing [developers@strava.com](mailto:developers@strava.com).
877
+ Strava provides a [Webhook Event API](https://developers.strava.com/docs/webhooks/).
849
878
 
850
879
  A complete example that handles subscription creation, deletion and handling can be found in [strava-webhooks](bin/strava-webhooks). Run `strava-webhooks` to see current registrations, `strava-webhooks handle` to run an HTTP server that handles both challenges and event data, `strava-webhooks create [url]` to create a new subscription and `strava-webhooks delete [id]` to delete it.
851
880
 
@@ -1016,11 +1045,11 @@ setting | description
1016
1045
  --------------------|------------
1017
1046
  client_id | Application client ID.
1018
1047
  client_secret | Application client secret.
1019
- endpoint | Defaults to `https://api.strava.com/api/v3`.
1048
+ endpoint | Defaults to `https://www.strava.com/api/v3`.
1020
1049
 
1021
1050
  ## Errors
1022
1051
 
1023
- All errors that return HTTP codes 400-600 result in either `Faraday::Error::ResourceNotFound`, `Faraday::Error::ConnectionFailed` or [Strava::Errors::Fault](lib/strava/errors/fault.rb) exceptions.
1052
+ All errors that return HTTP codes 400-600 result in either `Faraday::ResourceNotFound`, `Faraday::ConnectionFailed` or [Strava::Errors::Fault](lib/strava/errors/fault.rb) exceptions.
1024
1053
 
1025
1054
  ```ruby
1026
1055
  begin
@@ -1028,19 +1057,40 @@ begin
1028
1057
  rescue Strava::Errors::Fault => e
1029
1058
  e.message # => Bad Request
1030
1059
  e.errors # => [{ 'code' => 'invalid', 'field' => 'code', 'resource' => 'RequestToken' }]
1060
+ e.headers # => { "status" => "403 Bad Request", "x-ratelimit-limit" => "600,30000", "x-ratelimit-usage" => "314,27536" }
1031
1061
  end
1032
1062
  ```
1033
1063
 
1034
1064
  ## Tools
1035
1065
 
1066
+ For a complete set of command-line tools, check out [strava-ruby-cli](https://github.com/dblock/strava-ruby-cli) built on top of this gem.
1067
+
1036
1068
  ### Strava OAuth Token
1037
1069
 
1038
- Use [strava-oauth-token](bin/strava-outh-token) to obtain a token from the command-line. This will open a new browser window, navigate to Strava, request the appropriate permissions, then handle OAuth in a local redirect. The token type, refresh token, access token and token expiration will be displayed in the browser.
1070
+ Use [strava-oauth-token](bin/strava-oauth-token) to obtain a token from the command-line. This will open a new browser window, navigate to Strava, request the appropriate permissions, then handle OAuth in a local redirect. The token type, refresh token, access token and token expiration will be displayed in the browser.
1039
1071
 
1040
1072
  ```bash
1041
1073
  $ STRAVA_CLIENT_ID=... STRAVA_CLIENT_SECRET=... strava-oauth-token
1042
1074
  ```
1043
1075
 
1076
+ ## Users
1077
+
1078
+ * [Slava: Strava integration with Slack](https://slava.playplay.io), [source](https://github.com/dblock/slack-strava).
1079
+ * [Jekyll Blog at run.dblock.org](https://run.dblock.org), [source](https://github.com/dblock/run.dblock.org)
1080
+ * [Secret Strava](https://steele.blue/secret-strava/), [source](https://github.com/mattdsteele/secret-strava)
1081
+
1082
+ ## Resources
1083
+
1084
+ * [Strava API Documentation](https://developers.strava.com)
1085
+ * [Writing a New Strava API Ruby Client](https://code.dblock.org/2018/11/27/writing-a-new-strava-api-ruby-client.html)
1086
+ * [Dealing with Strava API OAuth Token Migration](https://code.dblock.org/2018/11/17/dealing-with-strava-api-token-migration.html)
1087
+ * [Auto-Publishing Strava Runs to Github Pages](https://code.dblock.org/2018/02/17/auto-publishing-strava-runs-to-github-pages.html)
1088
+ * [Strava Command-Line Client](https://github.com/dblock/strava-ruby-cli)
1089
+
1090
+ ## Upgrading
1091
+
1092
+ See [UPGRADING](UPGRADING.md).
1093
+
1044
1094
  ## Contributing
1045
1095
 
1046
1096
  See [CONTRIBUTING](CONTRIBUTING.md).
@@ -91,6 +91,9 @@ module Strava
91
91
  # Number of items per page. Defaults to 30.
92
92
  #
93
93
  def athlete_activities(options = {}, &block)
94
+ options = options.dup if options.key?(:after) || options.key?(:before)
95
+ options[:after] = options[:after].to_i if options[:after]
96
+ options[:before] = options[:before].to_i if options[:before]
94
97
  paginate 'athlete/activities', options, Strava::Models::Activity, &block
95
98
  end
96
99
 
@@ -17,6 +17,21 @@ module Strava
17
17
  paginate "clubs/#{id}/activities", options, Strava::Models::Activity, &block
18
18
  end
19
19
 
20
+ #
21
+ # List club / group events.
22
+ #
23
+ # @option options [String] :id
24
+ # Club id.
25
+ # @option options [Integer] :page
26
+ # Page number.
27
+ # @option options [Integer] :per_page
28
+ # Number of items per page. Defaults to 30.
29
+ #
30
+ def club_events(id_or_options, options = {}, &block)
31
+ id, options = parse_args(id_or_options, options)
32
+ paginate "clubs/#{id}/group_events", options, Strava::Models::ClubEvent, &block
33
+ end
34
+
20
35
  #
21
36
  # List club administrators.
22
37
  #
@@ -5,6 +5,10 @@ module Strava
5
5
  response[:body]['message'] || super
6
6
  end
7
7
 
8
+ def headers
9
+ response[:headers]
10
+ end
11
+
8
12
  def errors
9
13
  response[:body]['errors']
10
14
  end
@@ -27,6 +27,7 @@ module Strava
27
27
  property 'date_preference'
28
28
  property 'measurement_preference'
29
29
  property 'clubs', transform_with: ->(v) { v.map { |r| Strava::Models::Club.new(r) } }
30
+ property 'ftp'
30
31
  property 'weight'
31
32
  property 'bikes', transform_with: ->(v) { v.map { |r| Strava::Models::Gear.new(r) } }
32
33
  property 'shoes', transform_with: ->(v) { v.map { |r| Strava::Models::Gear.new(r) } }
@@ -0,0 +1,28 @@
1
+ module Strava
2
+ module Models
3
+ class ClubEvent < Model
4
+ property 'id'
5
+ property 'resource_state'
6
+ property 'title'
7
+ property 'club_id'
8
+ property 'club', transform_with: ->(c) { Strava::Models::Club.new(c) }
9
+ property 'organizing_athlete', transform_with: ->(oa) { Strava::Models::Athlete.new(oa) }
10
+ property 'activity_type'
11
+ property 'created_at', transform_with: ->(v) { Time.parse(v) }
12
+ property 'route_id'
13
+ property 'route', transform_with: ->(r) { Strava::Models::Route.new(r) }
14
+ property 'women_only'
15
+ property 'private'
16
+ property 'skill_levels'
17
+ property 'terrain'
18
+ property 'upcoming_occurrences', transform_with: ->(upcoming) { upcoming.map { |o| Time.parse(o) } }
19
+ property 'zone'
20
+ property 'address'
21
+ property 'start_latlng'
22
+
23
+ def strava_url
24
+ "https://www.strava.com/clubs/#{club_id}/group_events/#{id}"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -11,6 +11,9 @@ module Strava
11
11
  property 'brand_name'
12
12
  property 'model_name'
13
13
  property 'description'
14
+ property 'frame_type'
15
+ property 'weight'
16
+ property 'retired'
14
17
  end
15
18
  end
16
19
  end
@@ -1,3 +1,3 @@
1
1
  module Strava
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '0.4.2'.freeze
3
3
  end
@@ -8,26 +8,28 @@ module Strava
8
8
  end
9
9
 
10
10
  def connection
11
- options = {
12
- headers: headers.merge('Accept' => 'application/json; charset=utf-8')
13
- }
11
+ @connection ||= begin
12
+ options = {
13
+ headers: headers.merge('Accept' => 'application/json; charset=utf-8')
14
+ }
14
15
 
15
- options[:headers]['User-Agent'] = user_agent if user_agent
16
- options[:proxy] = proxy if proxy
17
- options[:ssl] = { ca_path: ca_path, ca_file: ca_file } if ca_path || ca_file
16
+ options[:headers]['User-Agent'] = user_agent if user_agent
17
+ options[:proxy] = proxy if proxy
18
+ options[:ssl] = { ca_path: ca_path, ca_file: ca_file } if ca_path || ca_file
18
19
 
19
- request_options = {}
20
- request_options[:timeout] = timeout if timeout
21
- request_options[:open_timeout] = open_timeout if open_timeout
22
- options[:request] = request_options if request_options.any?
20
+ request_options = {}
21
+ request_options[:timeout] = timeout if timeout
22
+ request_options[:open_timeout] = open_timeout if open_timeout
23
+ options[:request] = request_options if request_options.any?
23
24
 
24
- ::Faraday::Connection.new(endpoint, options) do |connection|
25
- connection.use ::Faraday::Request::Multipart
26
- connection.use ::Faraday::Request::UrlEncoded
27
- connection.use ::Strava::Web::Response::RaiseError
28
- connection.use ::FaradayMiddleware::ParseJson, content_type: /\bjson$/
29
- connection.response :logger, logger if logger
30
- connection.adapter ::Faraday.default_adapter
25
+ ::Faraday::Connection.new(endpoint, options) do |connection|
26
+ connection.use ::Faraday::Request::Multipart
27
+ connection.use ::Faraday::Request::UrlEncoded
28
+ connection.use ::Strava::Web::Response::RaiseError
29
+ connection.use ::FaradayMiddleware::ParseJson, content_type: /\bjson$/
30
+ connection.response :logger, logger if logger
31
+ connection.adapter ::Faraday.default_adapter
32
+ end
31
33
  end
32
34
  end
33
35
  end
@@ -7,10 +7,10 @@ module Strava
7
7
  def on_complete(env)
8
8
  case env[:status]
9
9
  when 404
10
- raise Faraday::Error::ResourceNotFound, response_values(env)
10
+ raise Faraday::ResourceNotFound, response_values(env)
11
11
  when 407
12
12
  # mimic the behavior that we get with proxy requests with HTTPS
13
- raise Faraday::Error::ConnectionFailed, %(407 "Proxy Authentication Required ")
13
+ raise Faraday::ConnectionFailed, %(407 "Proxy Authentication Required ")
14
14
  when ClientErrorStatuses
15
15
  raise Strava::Errors::Fault, response_values(env)
16
16
  end
@@ -12,7 +12,7 @@ module Strava
12
12
  attr_accessor(*Config::ATTRIBUTES)
13
13
 
14
14
  def reset
15
- self.endpoint = 'https://api.strava.com/api/v3'
15
+ self.endpoint = 'https://www.strava.com/api/v3'
16
16
  self.client_id = nil
17
17
  self.client_secret = nil
18
18
  end
@@ -25,6 +25,7 @@ require_relative 'strava/models/map'
25
25
  require_relative 'strava/models/activity'
26
26
  require_relative 'strava/models/club'
27
27
  require_relative 'strava/models/club_admin'
28
+ require_relative 'strava/models/club_event'
28
29
  require_relative 'strava/models/club_member'
29
30
  require_relative 'strava/models/segment_effort'
30
31
  require_relative 'strava/models/photos'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strava-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-05 00:00:00.000000000 Z
11
+ date: 2021-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0.9'
33
+ version: 1.0.0
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: '0.9'
40
+ version: 1.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: faraday_middleware
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description:
69
+ description:
70
70
  email: dblock@dblock.org
71
71
  executables:
72
72
  - strava-oauth-token
@@ -105,6 +105,7 @@ files:
105
105
  - lib/strava/models/authorization.rb
106
106
  - lib/strava/models/club.rb
107
107
  - lib/strava/models/club_admin.rb
108
+ - lib/strava/models/club_event.rb
108
109
  - lib/strava/models/club_member.rb
109
110
  - lib/strava/models/comment.rb
110
111
  - lib/strava/models/explorer_segment.rb
@@ -154,7 +155,7 @@ homepage: http://github.com/dblock/strava-ruby-client
154
155
  licenses:
155
156
  - MIT
156
157
  metadata: {}
157
- post_install_message:
158
+ post_install_message:
158
159
  rdoc_options: []
159
160
  require_paths:
160
161
  - lib
@@ -169,9 +170,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
170
  - !ruby/object:Gem::Version
170
171
  version: 1.3.6
171
172
  requirements: []
172
- rubyforge_project:
173
- rubygems_version: 2.7.6
174
- signing_key:
173
+ rubygems_version: 3.1.3
174
+ signing_key:
175
175
  specification_version: 4
176
176
  summary: Strava API Ruby client.
177
177
  test_files: []