diff --git a/CHANGELOG.md b/CHANGELOG.md index 24b3342..8a9a7fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### 3.1.0 (Next) +* [#110](https://github.com/dblock/strava-ruby-client/pull/110): Removes `club_activities`, `club_members`, and `club_admins`, which Strava retired on September 1, 2026 - [@dblock](https://github.com/dblock), [@Copilot](https://github.com/apps/copilot-swe-agent). * [#100](https://github.com/dblock/strava-ruby-client/pull/100): Adds comprehensive rdoc documentation - [@dblock](https://github.com/dblock). * [#103](https://github.com/dblock/strava-ruby-client/pull/103): Migrate Danger to use the `danger-pr-comment` reusable workflow - [@dblock](https://github.com/dblock), [@Copilot](https://github.com/apps/copilot-swe-agent). * [#104](https://github.com/dblock/strava-ruby-client/pull/104): Fixes `Danger Comment` workflow failing with a `contents: none` permissions error - [@dblock](https://github.com/dblock). diff --git a/README.md b/README.md index 0fe5ef9..5fd9e57 100644 --- a/README.md +++ b/README.md @@ -28,11 +28,8 @@ Unlike other clients, including [strava-api-v3](https://github.com/jaredholdcrof - [Get Athlete Stats](#get-athlete-stats) - [Update Athlete](#update-athlete) - [Clubs](#clubs) - - [List Club Activities](#list-club-activities) - [List Club Events](#list-club-events) - - [List Club Administrators](#list-club-administrators) - [Get Club](#get-club) - - [List Club Members](#list-club-members) - [List Athlete Clubs](#list-athlete-clubs) - [Gears](#gears) - [Get Equipment](#get-equipment) @@ -383,19 +380,7 @@ See [Strava::Models::DetailedAthlete](lib/strava/models/detailed_athlete.rb) for ### Clubs -#### List Club Activities - -Retrieve recent activities from members of a specific club. - -```ruby -activities = client.club_activities(108605) # => Array[Strava::Models::ClubActivity] - -activity = activities.first # => Strava::Models::ClubActivity - -activity.name # => 'Afternoon Run' -``` - -See [Strava::Models::ClubActivity](lib/strava/models/club_activity.rb) for all available properties. Note that Strava does not return activity or athlete ID via this API. +Strava removed the Club Activities, Club Members, and Club Admins endpoints on September 1, 2026 (see the [Strava API changelog](https://developers.strava.com/docs/changelog/)). The corresponding `club_activities`, `club_members`, and `club_admins` methods have been removed from this gem. #### List Club Events @@ -411,19 +396,6 @@ event.title # => 'First Group Event Ever! Yippieh!' See [Strava::Models::ClubEvent](lib/strava/models/club_event.rb) for all available properties. -#### List Club Administrators - -Returns a list of the administrators of a given club. - -```ruby -admins = client.club_admins(108605) # => Array[Strava::Models::ClubAthlete] - -admin = admins.first # => Strava::Models::ClubAthlete -admin.name # => 'Peter Ciaccia' -``` - -See [Strava::Models::ClubAthlete](lib/strava/models/club_athlete.rb) for all available properties. - #### Get Club Returns a given club using its identifier. @@ -436,19 +408,6 @@ club.name # => 'NYRR' See [Strava::Models::DetailedClub](lib/strava/models/detailed_club.rb) for all available properties. -#### List Club Members - -Returns a list of the members of a given club. - -```ruby -members = client.club_members(108605) # => Array[Strava::Models::ClubAthlete] - -member = members.first # => Strava::Models::ClubAthlete -member.name # => 'Peter Ciaccia' -``` - -See [Strava::Models::ClubAthlete](lib/strava/models/club_athlete.rb) for all available properties. - #### List Athlete Clubs Returns a list of the clubs whose membership includes the authenticated athlete. diff --git a/UPGRADING.md b/UPGRADING.md index 7b6a640..2524726 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -1,5 +1,14 @@ # Upgrading Strava-Ruby-Client +### Upgrading to >= 3.1.0 + +Strava removed the Club Activities, Club Members, and Club Admins API endpoints on September 1, 2026 (see the [Strava API changelog](https://developers.strava.com/docs/changelog/)). As a result: + +- `club_activities`, `club_members`, and `club_admins` methods were removed from `Strava::Client` +- `Strava::Models::ClubActivity` and `Strava::Models::ClubAthlete` were removed + +`club`, `club_events`, and `athlete_clubs` are unaffected and continue to work. + ### Upgrading to >= 3.0.0 The 3.0 version introduces numerous improvements along with several *breaking changes*. diff --git a/lib/strava-ruby-client.rb b/lib/strava-ruby-client.rb index 87f9445..f013549 100644 --- a/lib/strava-ruby-client.rb +++ b/lib/strava-ruby-client.rb @@ -44,8 +44,6 @@ require_relative 'strava/models/activity_total' require_relative 'strava/models/activity_zone' require_relative 'strava/models/base_stream' -require_relative 'strava/models/club_activity' -require_relative 'strava/models/club_athlete' require_relative 'strava/models/club_event' require_relative 'strava/models/comment' require_relative 'strava/models/destination' diff --git a/lib/strava/api/endpoints/clubs.rb b/lib/strava/api/endpoints/clubs.rb index 473164a..03de571 100644 --- a/lib/strava/api/endpoints/clubs.rb +++ b/lib/strava/api/endpoints/clubs.rb @@ -7,31 +7,15 @@ module Endpoints # API endpoints for Strava clubs. # # Clubs represent groups of athletes on Strava. Club API endpoints allow - # you to retrieve club information, list club members and administrators, - # and view recent club activities and events. + # you to retrieve club information and view recent club events. + # + # Note: the Club Activities, Club Members, and Club Admins endpoints were + # removed by Strava on September 1, 2026. # # @see https://developers.strava.com/docs/reference/#api-Clubs + # @see https://developers.strava.com/docs/changelog/ # module Clubs - # - # List club activities. - # - # @param id_or_options [String, Integer, Hash] Either a club ID or a hash of options including :id - # @param options [Hash] Additional options (if first parameter is an ID) - # @option options [Integer] :page Page number - # @option options [Integer] :per_page Number of items per page. Defaults to 30 - # - # @example With ID and options as separate arguments - # client.club_activities('12345', per_page: 10) - # - # @example With ID in options hash - # client.club_activities(id: '12345', per_page: 10) - # - def club_activities(id_or_options, options = {}, &block) - id, options = parse_args(id_or_options, options) - paginate "clubs/#{id}/activities", options, Strava::Models::ClubActivity, &block - end - # # List club / group events. # @@ -45,19 +29,6 @@ def club_events(id_or_options, options = {}, &block) paginate "clubs/#{id}/group_events", options, Strava::Models::ClubEvent, &block end - # - # List club administrators. - # - # @param id_or_options [String, Integer, Hash] Either a club ID or a hash of options including :id - # @param options [Hash] Additional options (if first parameter is an ID) - # @option options [Integer] :page Page number - # @option options [Integer] :per_page Number of items per page. Defaults to 30 - # - def club_admins(id_or_options, options = {}, &block) - id, options = parse_args(id_or_options, options) - paginate "clubs/#{id}/admins", options, Strava::Models::ClubAthlete, &block - end - # # Get club. # @@ -69,19 +40,6 @@ def club(id_or_options, options = {}) Strava::Models::DetailedClub.new(get("clubs/#{id}", options)) end - # - # List club members. - # - # @param id_or_options [String, Integer, Hash] Either a club ID or a hash of options including :id - # @param options [Hash] Additional options (if first parameter is an ID) - # @option options [Integer] :page Page number - # @option options [Integer] :per_page Number of items per page. Defaults to 30 - # - def club_members(id_or_options, options = {}, &block) - id, options = parse_args(id_or_options, options) - paginate "clubs/#{id}/members", options, Strava::Models::ClubAthlete, &block - end - # # List logged-in athlete clubs. # diff --git a/lib/strava/models/club_activity.rb b/lib/strava/models/club_activity.rb deleted file mode 100644 index de975d5..0000000 --- a/lib/strava/models/club_activity.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -module Strava - module Models - # - # Represents an activity posted to a club feed. - # - # Club activities are a simplified view of activities shared with a club. - # Note that Strava does not return activity or athlete IDs via this API endpoint, - # so you cannot link directly to the full activity or athlete profile. - # - # Includes helper mixins for formatting distance, time, elevation, and sport type. - # - # @example List club activities - # activities = client.club_activities(12345) - # activities.each do |activity| - # puts "#{activity.athlete.name}: #{activity.name}" - # puts "#{activity.distance_s} in #{activity.moving_time_in_hours_s}" - # puts "#{activity.sport_type_emoji} #{activity.workout_type}" - # end - # - # @see https://developers.strava.com/docs/reference/#api-models-ClubActivity - # - class ClubActivity < Strava::Models::Response - include Mixins::ElevationGain - include Mixins::SportType - - # @return [MetaAthlete] Athlete who posted the activity (without ID) - property 'athlete', transform_with: ->(v) { Strava::Models::MetaAthlete.new(v) } - - # @return [String] Activity name - property 'name' - - include Mixins::Distance - include Mixins::MovingTime - include Mixins::ElapsedTime - include Mixins::TotalElevationGain - include Mixins::SportType - - # @return [Integer, nil] Workout type (0=default, 1=race, 2=long run, 3=intervals, etc.) - property 'workout_type' - - # @return [Integer] Resource state indicator - property 'resource_state' - end - end -end diff --git a/lib/strava/models/club_athlete.rb b/lib/strava/models/club_athlete.rb deleted file mode 100644 index 9760792..0000000 --- a/lib/strava/models/club_athlete.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true - -module Strava - module Models - # - # Represents an athlete within a club context. - # - # This model provides athlete information along with their club membership - # status, showing whether they are a regular member, administrator, or owner. - # - # @example List club members - # members = client.club_members(12345) - # members.each do |member| - # puts member.name - # puts "Admin" if member.admin - # puts "Owner" if member.owner - # end - # - # @see https://developers.strava.com/docs/reference/#api-models-ClubAthlete - # - class ClubAthlete < Strava::Models::Response - # @return [Integer] Resource state indicator - property 'resource_state' - - # @return [String] Athlete's first name - property 'firstname' - - # @return [String] Athlete's last name - property 'lastname' - - # @return [String, nil] Membership type (e.g., "member") - property 'member' - - # @return [Boolean] Whether athlete is a club administrator - property 'admin' - - # @return [Boolean] Whether athlete is the club owner - property 'owner' - - # @return [String, nil] Membership status or type - property 'membership' - - # - # Returns the athlete's full name. - # - # @return [String, nil] Full name combining firstname and lastname, or nil if neither exists - # - def name - [firstname, lastname].compact.join(' ') if firstname || lastname - end - end - end -end diff --git a/spec/fixtures/strava/client/all_club_activities.yml b/spec/fixtures/strava/client/all_club_activities.yml deleted file mode 100644 index 0ad9ebe..0000000 --- a/spec/fixtures/strava/client/all_club_activities.yml +++ /dev/null @@ -1,466 +0,0 @@ ---- -http_interactions: -- request: - method: get - uri: https://www.strava.com/api/v3/clubs/209437/activities?page=1 - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer access-token - Accept: - - application/json; charset=utf-8 - User-Agent: - - Strava Ruby Client/3.0.0 - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Date: - - Sun, 19 Oct 2025 15:24:36 GMT - X-Envoy-Upstream-Service-Time: - - '4175' - Server: - - istio-envoy - Status: - - 200 OK - X-Ratelimit-Usage: - - '4,6' - X-Ratelimit-Limit: - - '200,2000' - Vary: - - Accept, Origin - Cache-Control: - - max-age=0, private, must-revalidate - Referrer-Policy: - - strict-origin-when-cross-origin - X-Permitted-Cross-Domain-Policies: - - none - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - 0e662343-df6d-47a3-aa60-067b4c43665b - X-Readratelimit-Limit: - - '100,1000' - X-Download-Options: - - noopen - Etag: - - W/"c1bedff30735ced8ac6ade9cfa8afde5" - X-Frame-Options: - - DENY - X-Readratelimit-Usage: - - '4,6' - X-Content-Type-Options: - - nosniff - X-Cache: - - Miss from cloudfront - Via: - - 1.1 def26d054ec95b961e8352e3cd4fae7e.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - JFK52-P3 - X-Amz-Cf-Id: - - ZzzTn6CVU0WkIMm80cW_yMNYYT1iefX6j_5K_grAlTlLEsKN2dV55g== - body: - encoding: UTF-8 - string: "[{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"ethan\",\"lastname\":\"L.\"},\"name\":\"Run - for The Nature Conservancy\",\"distance\":10399.9,\"moving_time\":6021,\"elapsed_time\":6021,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Jeanie\",\"lastname\":\"K.\"},\"name\":\"Extra - mile\",\"distance\":1678.4,\"moving_time\":600,\"elapsed_time\":606,\"total_elevation_gain\":6.8,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Lawrence\",\"lastname\":\"L.\"},\"name\":\"Lunch - Run\",\"distance\":1644.5,\"moving_time\":714,\"elapsed_time\":726,\"total_elevation_gain\":4.9,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"MIguel\",\"lastname\":\"S.\"},\"name\":\"Carrera - de mañana\",\"distance\":1344.6,\"moving_time\":720,\"elapsed_time\":720,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Rahul\",\"lastname\":\"C.\"},\"name\":\"Lunch - Run\",\"distance\":3423.2,\"moving_time\":1158,\"elapsed_time\":1158,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Ke'Mani\",\"lastname\":\"S.\"},\"name\":\"Morning - Run\",\"distance\":5001.8,\"moving_time\":1504,\"elapsed_time\":1525,\"total_elevation_gain\":27.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Kwon\",\"lastname\":\"A.\"},\"name\":\"Lunch - Run\",\"distance\":5085.8,\"moving_time\":1825,\"elapsed_time\":1977,\"total_elevation_gain\":25.4,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"James\",\"lastname\":\"K.\"},\"name\":\"Lunch - Run\",\"distance\":5014.0,\"moving_time\":1627,\"elapsed_time\":2135,\"total_elevation_gain\":37.4,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Chad\",\"lastname\":\"Z.\"},\"name\":\"Beautiful - fall \U0001F3C3‍♂️\",\"distance\":5389.7,\"moving_time\":1973,\"elapsed_time\":1973,\"total_elevation_gain\":18.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Madeline\",\"lastname\":\"Z.\"},\"name\":\"Morning - Run\",\"distance\":5305.9,\"moving_time\":2030,\"elapsed_time\":2102,\"total_elevation_gain\":0.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Ritchey\",\"lastname\":\"H.\"},\"name\":\"Morning - Run\",\"distance\":7840.3,\"moving_time\":2489,\"elapsed_time\":2635,\"total_elevation_gain\":19.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Juliano\",\"lastname\":\"P.\"},\"name\":\"Lunch - Run\",\"distance\":3778.1,\"moving_time\":2286,\"elapsed_time\":2592,\"total_elevation_gain\":3.6,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Bougis\",\"lastname\":\"9.\"},\"name\":\"Course - à pied dans l'après-midi\",\"distance\":9680.8,\"moving_time\":2959,\"elapsed_time\":2959,\"total_elevation_gain\":70.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"José - Carlos\",\"lastname\":\"H.\"},\"name\":\"Nike Run Club: domingo - Carrera - por la mañana\",\"distance\":7721.1,\"moving_time\":3030,\"elapsed_time\":3063,\"total_elevation_gain\":67.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Cosimo\",\"lastname\":\"P.\"},\"name\":\"Afternoon - Run\",\"distance\":8630.5,\"moving_time\":2941,\"elapsed_time\":2954,\"total_elevation_gain\":23.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Christopher\",\"lastname\":\"L.\"},\"name\":\"Morning - Run\",\"distance\":11276.6,\"moving_time\":3575,\"elapsed_time\":3796,\"total_elevation_gain\":63.8,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Coco\",\"lastname\":\"M.\"},\"name\":\"Morning - Run\",\"distance\":7685.5,\"moving_time\":3566,\"elapsed_time\":3607,\"total_elevation_gain\":59.9,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Shannon\",\"lastname\":\"M.\"},\"name\":\"Peloton - - 72 min Entertainment Run\",\"distance\":6557.5,\"moving_time\":4310,\"elapsed_time\":4310,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Laura\",\"lastname\":\"V.\"},\"name\":\"Carrera - por la mañana\",\"distance\":12884.5,\"moving_time\":4614,\"elapsed_time\":4620,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Michele\",\"lastname\":\"M.\"},\"name\":\"Nike - Run Club: Another Ten Mile Run\",\"distance\":16100.6,\"moving_time\":5394,\"elapsed_time\":6589,\"total_elevation_gain\":102.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"JULIAN\",\"lastname\":\"D.\"},\"name\":\"Carrera - por la mañana\",\"distance\":19030.8,\"moving_time\":6609,\"elapsed_time\":6714,\"total_elevation_gain\":192.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Asif\",\"lastname\":\"K.\"},\"name\":\"Morning - Run\",\"distance\":22546.9,\"moving_time\":6878,\"elapsed_time\":6878,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Joe\",\"lastname\":\"R.\"},\"name\":\"Morning - Run\",\"distance\":17756.5,\"moving_time\":6864,\"elapsed_time\":7995,\"total_elevation_gain\":27.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Marcia\",\"lastname\":\"M.\"},\"name\":\"Long - run 25k #roadtomarathon6\",\"distance\":25022.8,\"moving_time\":9299,\"elapsed_time\":9622,\"total_elevation_gain\":588.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Victor\",\"lastname\":\"N.\"},\"name\":\"Morning - Run\",\"distance\":24152.3,\"moving_time\":9039,\"elapsed_time\":9555,\"total_elevation_gain\":154.9,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Oscar - Fernando\",\"lastname\":\"P.\"},\"name\":\"Carrera de mañana\",\"distance\":32020.2,\"moving_time\":10702,\"elapsed_time\":11494,\"total_elevation_gain\":107.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":2},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Tami\",\"lastname\":\"S.\"},\"name\":\"Morning - Run\",\"distance\":32197.9,\"moving_time\":11068,\"elapsed_time\":11478,\"total_elevation_gain\":190.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Stephen\",\"lastname\":\"A.\"},\"name\":\"Morning - Run\",\"distance\":33245.3,\"moving_time\":10753,\"elapsed_time\":11500,\"total_elevation_gain\":203.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Gabriel\",\"lastname\":\"R.\"},\"name\":\"Morning - Run\",\"distance\":42576.5,\"moving_time\":11801,\"elapsed_time\":11817,\"total_elevation_gain\":183.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Mike - Hahn\",\"lastname\":\"|.\"},\"name\":\"Morning Trail Run\",\"distance\":16808.0,\"moving_time\":6700,\"elapsed_time\":7634,\"total_elevation_gain\":556.0,\"type\":\"Run\",\"sport_type\":\"TrailRun\",\"workout_type\":null}]" - recorded_at: Sun, 19 Oct 2025 15:24:36 GMT -- request: - method: get - uri: https://www.strava.com/api/v3/clubs/209437/activities?page=2 - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer access-token - Accept: - - application/json; charset=utf-8 - User-Agent: - - Strava Ruby Client/3.0.0 - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Date: - - Sun, 19 Oct 2025 15:24:41 GMT - X-Envoy-Upstream-Service-Time: - - '4544' - Server: - - istio-envoy - Status: - - 200 OK - X-Ratelimit-Usage: - - '5,7' - X-Ratelimit-Limit: - - '200,2000' - Vary: - - Accept, Origin - Cache-Control: - - max-age=0, private, must-revalidate - Referrer-Policy: - - strict-origin-when-cross-origin - X-Permitted-Cross-Domain-Policies: - - none - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - aa924bb7-f7c1-41e4-8c36-84d7f13af016 - X-Readratelimit-Limit: - - '100,1000' - X-Download-Options: - - noopen - Etag: - - W/"ddfd174bcc9eed3212a01f012357f30d" - X-Frame-Options: - - DENY - X-Readratelimit-Usage: - - '5,7' - X-Content-Type-Options: - - nosniff - X-Cache: - - Miss from cloudfront - Via: - - 1.1 20292965cdbba1b959488426be2ef49e.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - JFK52-P3 - X-Amz-Cf-Id: - - 9C0H5xFncbzDc1iqXysF2p3xs7qtNfXY74HIaRFIoqfsCyp6YYNgwg== - body: - encoding: UTF-8 - string: '[{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Corey","lastname":"A."},"name":"Morning - Run","distance":3656.3,"moving_time":1110,"elapsed_time":1315,"total_elevation_gain":38.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Eric","lastname":"M."},"name":"Morning - Run","distance":5095.9,"moving_time":1804,"elapsed_time":1804,"total_elevation_gain":0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Farida","lastname":"S."},"name":"Morning - Run","distance":5308.7,"moving_time":1965,"elapsed_time":2187,"total_elevation_gain":37.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Niyas","lastname":"K."},"name":"Evening - Run","distance":5019.2,"moving_time":1919,"elapsed_time":2398,"total_elevation_gain":1.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Mireya","lastname":"T."},"name":"Morning - Run","distance":6481.9,"moving_time":2617,"elapsed_time":2648,"total_elevation_gain":21.2,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Sara","lastname":"S."},"name":"Morning - Run","distance":8095.8,"moving_time":2624,"elapsed_time":2894,"total_elevation_gain":186.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Elizabeth","lastname":"D."},"name":"Lunch - Run","distance":8060.1,"moving_time":3360,"elapsed_time":3616,"total_elevation_gain":56.9,"type":"Run","sport_type":"Run","workout_type":0},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Michael","lastname":"W."},"name":"Morning - Run","distance":9070.1,"moving_time":2704,"elapsed_time":3667,"total_elevation_gain":36.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Christian","lastname":"P."},"name":"Afternoon - Run","distance":10015.5,"moving_time":2869,"elapsed_time":4141,"total_elevation_gain":72.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Ross","lastname":"F."},"name":"Recovery - Run","distance":9721.0,"moving_time":3960,"elapsed_time":4312,"total_elevation_gain":94.0,"type":"Run","sport_type":"Run","workout_type":0},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"shereen","lastname":"A."},"name":"Morning - Run","distance":12890.9,"moving_time":4390,"elapsed_time":4490,"total_elevation_gain":102.7,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Jorge","lastname":"V."},"name":"Morning - Run","distance":15021.9,"moving_time":5083,"elapsed_time":5083,"total_elevation_gain":55.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Rosita","lastname":"M."},"name":"Corsa - pomeridiana","distance":12266.3,"moving_time":4482,"elapsed_time":5103,"total_elevation_gain":33.8,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Brent","lastname":"G."},"name":"Morning - Run","distance":13726.1,"moving_time":5130,"elapsed_time":5136,"total_elevation_gain":129.6,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Silfrido - Enrique","lastname":"M."},"name":"Morning Run","distance":15018.7,"moving_time":5321,"elapsed_time":5327,"total_elevation_gain":47.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Brian","lastname":"R."},"name":"Morning - Run","distance":16335.7,"moving_time":4976,"elapsed_time":5283,"total_elevation_gain":19.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Olerunning","lastname":"T."},"name":"Nike - Run Club: Lauf am Sonntag","distance":13223.8,"moving_time":4995,"elapsed_time":5517,"total_elevation_gain":128.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"H","lastname":"T."},"name":"LDR","distance":11180.5,"moving_time":5411,"elapsed_time":5482,"total_elevation_gain":84.0,"type":"Run","sport_type":"Run","workout_type":0},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"ethan","lastname":"L."},"name":"Nike - Run Club: Sunday Morning Run","distance":10230.4,"moving_time":5642,"elapsed_time":6000,"total_elevation_gain":189.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Seigler","lastname":"O."},"name":"Carrera - por la mañana","distance":21015.9,"moving_time":6037,"elapsed_time":6928,"total_elevation_gain":80.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Eric","lastname":"R."},"name":"Morning - Run","distance":22547.8,"moving_time":7244,"elapsed_time":7288,"total_elevation_gain":37.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Devon","lastname":"L."},"name":"Long Saturday Run","distance":22613.6,"moving_time":7874,"elapsed_time":8304,"total_elevation_gain":116.3,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Tom","lastname":"F."},"name":"This - should cure my sickness. Great long run","distance":32198.5,"moving_time":7709,"elapsed_time":8790,"total_elevation_gain":196.0,"type":"Run","sport_type":"Run","workout_type":0},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Aileen","lastname":"C."},"name":"Morning - Run","distance":24232.1,"moving_time":9410,"elapsed_time":9410,"total_elevation_gain":0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Gigi - ","lastname":"B."},"name":"Morning Run","distance":16649.9,"moving_time":5670,"elapsed_time":9994,"total_elevation_gain":116.0,"type":"Run","sport_type":"Run","workout_type":0},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Frankie","lastname":"S."},"name":"Morning - Run","distance":25756.0,"moving_time":9051,"elapsed_time":10128,"total_elevation_gain":255.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Victor","lastname":"E."},"name":"Morning - Run","distance":30011.8,"moving_time":10125,"elapsed_time":10759,"total_elevation_gain":185.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Dustin","lastname":"W."},"name":"Morning - Run","distance":32210.9,"moving_time":10992,"elapsed_time":11047,"total_elevation_gain":238.0,"type":"Run","sport_type":"Run","workout_type":2},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Gerson","lastname":"B."},"name":"Carrera - por la mañana","distance":23030.1,"moving_time":12961,"elapsed_time":13321,"total_elevation_gain":662.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Kat","lastname":"L."},"name":"Morning - Run","distance":4296.4,"moving_time":1357,"elapsed_time":181983,"total_elevation_gain":11.0,"type":"Run","sport_type":"Run","workout_type":0}]' - recorded_at: Sun, 19 Oct 2025 15:24:41 GMT -- request: - method: get - uri: https://www.strava.com/api/v3/clubs/209437/activities?page=3 - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer access-token - Accept: - - application/json; charset=utf-8 - User-Agent: - - Strava Ruby Client/3.0.0 - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Date: - - Sun, 19 Oct 2025 15:24:45 GMT - X-Envoy-Upstream-Service-Time: - - '3401' - Server: - - istio-envoy - Status: - - 200 OK - X-Ratelimit-Usage: - - '6,8' - X-Ratelimit-Limit: - - '200,2000' - Vary: - - Accept, Origin - Cache-Control: - - max-age=0, private, must-revalidate - Referrer-Policy: - - strict-origin-when-cross-origin - X-Permitted-Cross-Domain-Policies: - - none - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - f52e3b02-a55e-486c-a11a-901d77dbb1aa - X-Readratelimit-Limit: - - '100,1000' - X-Download-Options: - - noopen - Etag: - - W/"dea48c89800210850745530a3efc5b94" - X-Frame-Options: - - DENY - X-Readratelimit-Usage: - - '6,8' - X-Content-Type-Options: - - nosniff - X-Cache: - - Miss from cloudfront - Via: - - 1.1 79edbcc14c21322a469003752cc30af0.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - JFK52-P3 - X-Amz-Cf-Id: - - lfwVr_OroyIuXJX3_Zl2xjeMMzSbjpPqIwh8Sdd60QcNh3X7iZnHzg== - body: - encoding: UTF-8 - string: "[{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Guillermo\",\"lastname\":\"C.\"},\"name\":\"Morning - Run\",\"distance\":607.0,\"moving_time\":210,\"elapsed_time\":259,\"total_elevation_gain\":3.2,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Steve\",\"lastname\":\"B.\"},\"name\":\"Morning - Run\",\"distance\":4275.6,\"moving_time\":1365,\"elapsed_time\":1376,\"total_elevation_gain\":14.6,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Henrique\",\"lastname\":\"R.\"},\"name\":\"Lunch - Run\",\"distance\":4109.8,\"moving_time\":1483,\"elapsed_time\":1483,\"total_elevation_gain\":8.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Harry\",\"lastname\":\"C.\"},\"name\":\"Morning - Run\",\"distance\":4051.3,\"moving_time\":1354,\"elapsed_time\":1796,\"total_elevation_gain\":37.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Cabrini\",\"lastname\":\"M.\"},\"name\":\"Morning - Run..fiirst ond since my knees started growling\",\"distance\":4999.5,\"moving_time\":2230,\"elapsed_time\":2230,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Peggy\",\"lastname\":\"D.\"},\"name\":\"Namiddagloop\",\"distance\":5041.1,\"moving_time\":2113,\"elapsed_time\":2414,\"total_elevation_gain\":50.4,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Daniel\",\"lastname\":\"M.\"},\"name\":\"Morning - Run\",\"distance\":8291.4,\"moving_time\":2648,\"elapsed_time\":2720,\"total_elevation_gain\":23.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Emily\",\"lastname\":\"Z.\"},\"name\":\"Afternoon - Run\",\"distance\":5247.7,\"moving_time\":1808,\"elapsed_time\":2823,\"total_elevation_gain\":49.6,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Diego - Andres\",\"lastname\":\"V.\"},\"name\":\"Carrera por la mañana\",\"distance\":3878.6,\"moving_time\":2065,\"elapsed_time\":3221,\"total_elevation_gain\":18.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Krunal\",\"lastname\":\"T.\"},\"name\":\"Morning - Run\",\"distance\":3009.9,\"moving_time\":2582,\"elapsed_time\":3349,\"total_elevation_gain\":1.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"David\",\"lastname\":\"S.\"},\"name\":\"Morning - Run\",\"distance\":10028.1,\"moving_time\":3629,\"elapsed_time\":3661,\"total_elevation_gain\":22.6,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Andres\",\"lastname\":\"P.\"},\"name\":\"Morning - Run\",\"distance\":14970.8,\"moving_time\":4329,\"elapsed_time\":4342,\"total_elevation_gain\":50.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Hernan\",\"lastname\":\"G.\"},\"name\":\"Carrera - por la mañana\",\"distance\":15233.4,\"moving_time\":4446,\"elapsed_time\":4512,\"total_elevation_gain\":63.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Min\",\"lastname\":\"P.\"},\"name\":\"Another - beautiful Sunday \U0001FAF6\",\"distance\":12428.1,\"moving_time\":4370,\"elapsed_time\":4649,\"total_elevation_gain\":83.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":0},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Ewa\",\"lastname\":\"K.\"},\"name\":\"Afternoon - Run\",\"distance\":12416.2,\"moving_time\":4551,\"elapsed_time\":4652,\"total_elevation_gain\":10.5,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Michael\",\"lastname\":\"P.\"},\"name\":\"Morning - Run\",\"distance\":16108.1,\"moving_time\":5088,\"elapsed_time\":5106,\"total_elevation_gain\":137.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Angie\",\"lastname\":\"A.\"},\"name\":\"Morning - Run\",\"distance\":15044.9,\"moving_time\":5093,\"elapsed_time\":5093,\"total_elevation_gain\":55.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Ivan\",\"lastname\":\"M.\"},\"name\":\"10K - con mis Pacers\",\"distance\":10249.7,\"moving_time\":3704,\"elapsed_time\":5169,\"total_elevation_gain\":42.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"ethan\",\"lastname\":\"L.\"},\"name\":\"Nike - Run Club: Sunday Morning Run\",\"distance\":10230.4,\"moving_time\":5642,\"elapsed_time\":6000,\"total_elevation_gain\":189.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"ethan\",\"lastname\":\"L.\"},\"name\":\"Nike - Run Club: Sunday Morning Run\",\"distance\":10230.4,\"moving_time\":5642,\"elapsed_time\":6000,\"total_elevation_gain\":189.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Jesse\",\"lastname\":\"F.\"},\"name\":\"Morning - Run\",\"distance\":19326.9,\"moving_time\":6545,\"elapsed_time\":6569,\"total_elevation_gain\":30.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Casper\",\"lastname\":\"V.\"},\"name\":\"Lunch - Run\",\"distance\":21121.2,\"moving_time\":7161,\"elapsed_time\":7376,\"total_elevation_gain\":131.6,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":0},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Chanel\",\"lastname\":\"D.\"},\"name\":\"Last - Long Run\",\"distance\":19316.9,\"moving_time\":7561,\"elapsed_time\":8305,\"total_elevation_gain\":156.8,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":0},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Oriana\",\"lastname\":\"M.\"},\"name\":\"Morning - Run\",\"distance\":21180.3,\"moving_time\":9746,\"elapsed_time\":9749,\"total_elevation_gain\":42.2,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"DW\",\"lastname\":\"V.\"},\"name\":\"“Last - 20” with the Front Runners\",\"distance\":34243.8,\"moving_time\":10860,\"elapsed_time\":12281,\"total_elevation_gain\":220.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Anthony\",\"lastname\":\"M.\"},\"name\":\"Morning - Run\",\"distance\":32981.7,\"moving_time\":11576,\"elapsed_time\":12661,\"total_elevation_gain\":197.6,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Richard\",\"lastname\":\"R.\"},\"name\":\"Morning - Run\",\"distance\":32724.8,\"moving_time\":11703,\"elapsed_time\":12699,\"total_elevation_gain\":200.2,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Jon\",\"lastname\":\"A.\"},\"name\":\"Morning - Run\",\"distance\":42756.9,\"moving_time\":14609,\"elapsed_time\":14613,\"total_elevation_gain\":262.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"David\",\"lastname\":\"R.\"},\"name\":\"Morning - Run\",\"distance\":28976.2,\"moving_time\":12630,\"elapsed_time\":15448,\"total_elevation_gain\":140.1,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Roger\",\"lastname\":\"F.\"},\"name\":\"Morning - Run\",\"distance\":32669.7,\"moving_time\":11952,\"elapsed_time\":16652,\"total_elevation_gain\":111.9,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null}]" - recorded_at: Sun, 19 Oct 2025 15:24:45 GMT -- request: - method: get - uri: https://www.strava.com/api/v3/clubs/209437/activities?page=4 - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer access-token - Accept: - - application/json; charset=utf-8 - User-Agent: - - Strava Ruby Client/3.0.0 - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Date: - - Sun, 19 Oct 2025 15:24:49 GMT - X-Envoy-Upstream-Service-Time: - - '3942' - Server: - - istio-envoy - Status: - - 200 OK - X-Ratelimit-Usage: - - '7,9' - X-Ratelimit-Limit: - - '200,2000' - Vary: - - Accept, Origin - Cache-Control: - - max-age=0, private, must-revalidate - Referrer-Policy: - - strict-origin-when-cross-origin - X-Permitted-Cross-Domain-Policies: - - none - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - eefe74e3-537d-48d2-93ca-76cb3c006ff6 - X-Readratelimit-Limit: - - '100,1000' - X-Download-Options: - - noopen - Etag: - - W/"9d8b07185da77a32e646c5b8aa17675c" - X-Frame-Options: - - DENY - X-Readratelimit-Usage: - - '7,9' - X-Content-Type-Options: - - nosniff - X-Cache: - - Miss from cloudfront - Via: - - 1.1 20292965cdbba1b959488426be2ef49e.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - JFK52-P3 - X-Amz-Cf-Id: - - eq1SVOVp-OB5ASL1fo-ziQexHG5IeZISXjld9xIkG4NIn9g4KMEyMg== - body: - encoding: UTF-8 - string: '[{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Carlos","lastname":"O."},"name":"Morning - Run","distance":4592.0,"moving_time":1560,"elapsed_time":1560,"total_elevation_gain":0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Fredy","lastname":"G."},"name":"Lunch - Run","distance":8013.6,"moving_time":2406,"elapsed_time":2422,"total_elevation_gain":46.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Oceane","lastname":"J."},"name":"5km","distance":5050.6,"moving_time":2160,"elapsed_time":2599,"total_elevation_gain":0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Angela","lastname":"D."},"name":"Morning - Run","distance":6446.8,"moving_time":2538,"elapsed_time":2650,"total_elevation_gain":41.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Manon","lastname":"B."},"name":"Course - à pied dans l''après-midi","distance":11218.3,"moving_time":3446,"elapsed_time":3748,"total_elevation_gain":99.0,"type":"Run","sport_type":"Run","workout_type":null},{"resource_state":2,"athlete":{"resource_state":2,"firstname":"Niamh","lastname":"K."},"name":"Afternoon - Run","distance":12047.0,"moving_time":4564,"elapsed_time":4722,"total_elevation_gain":69.0,"type":"Run","sport_type":"Run","workout_type":null}]' - recorded_at: Sun, 19 Oct 2025 15:24:49 GMT -- request: - method: get - uri: https://www.strava.com/api/v3/clubs/209437/activities?page=5 - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer access-token - Accept: - - application/json; charset=utf-8 - User-Agent: - - Strava Ruby Client/3.0.0 - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Date: - - Sun, 19 Oct 2025 15:24:52 GMT - X-Envoy-Upstream-Service-Time: - - '3194' - Server: - - istio-envoy - Status: - - 200 OK - X-Ratelimit-Usage: - - '8,10' - X-Ratelimit-Limit: - - '200,2000' - Vary: - - Accept, Origin - Cache-Control: - - max-age=0, private, must-revalidate - Referrer-Policy: - - strict-origin-when-cross-origin - X-Permitted-Cross-Domain-Policies: - - none - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - 5ac2779d-dd20-4684-903d-3c28c4a4283f - X-Readratelimit-Limit: - - '100,1000' - X-Download-Options: - - noopen - Etag: - - W/"4f53cda18c2baa0c0354bb5f9a3ecbe5" - X-Frame-Options: - - DENY - X-Readratelimit-Usage: - - '8,10' - X-Content-Type-Options: - - nosniff - X-Cache: - - Miss from cloudfront - Via: - - 1.1 92d8afc92e3597d245b2f6480cd44220.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - JFK52-P3 - X-Amz-Cf-Id: - - upI35MSvSv5VpVI-OCE6jZ2RZ6Db44v9PmVwOMw1s_7PlLV3gZzcuA== - body: - encoding: UTF-8 - string: "[]" - recorded_at: Sun, 19 Oct 2025 15:24:52 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/strava/client/club_activities.yml b/spec/fixtures/strava/client/club_activities.yml deleted file mode 100644 index 5f553c3..0000000 --- a/spec/fixtures/strava/client/club_activities.yml +++ /dev/null @@ -1,108 +0,0 @@ ---- -http_interactions: -- request: - method: get - uri: https://www.strava.com/api/v3/clubs/209437/activities - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer access-token - Accept: - - application/json; charset=utf-8 - User-Agent: - - Strava Ruby Client/3.0.0 - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Date: - - Sun, 19 Oct 2025 15:23:46 GMT - X-Envoy-Upstream-Service-Time: - - '4598' - Server: - - istio-envoy - Status: - - 200 OK - X-Ratelimit-Usage: - - '3,5' - X-Ratelimit-Limit: - - '200,2000' - Vary: - - Accept, Origin - Cache-Control: - - max-age=0, private, must-revalidate - Referrer-Policy: - - strict-origin-when-cross-origin - X-Permitted-Cross-Domain-Policies: - - none - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - 2b1a1972-f645-4089-94fe-749658141a06 - X-Readratelimit-Limit: - - '100,1000' - X-Download-Options: - - noopen - Etag: - - W/"62325d1702b2df5f565fc8d845b99d6f" - X-Frame-Options: - - DENY - X-Readratelimit-Usage: - - '3,5' - X-Content-Type-Options: - - nosniff - X-Cache: - - Miss from cloudfront - Via: - - 1.1 79edbcc14c21322a469003752cc30af0.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - JFK52-P3 - X-Amz-Cf-Id: - - SvqD7I9Og6Q68prc6qRHm6mNHUr6cxHP3JQlrBwJuDdjK4aEX10ugA== - body: - encoding: UTF-8 - string: "[{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"ethan\",\"lastname\":\"L.\"},\"name\":\"Run - for The Nature Conservancy\",\"distance\":10399.9,\"moving_time\":6021,\"elapsed_time\":6021,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Jeanie\",\"lastname\":\"K.\"},\"name\":\"Morning - Run\",\"distance\":1678.4,\"moving_time\":600,\"elapsed_time\":606,\"total_elevation_gain\":6.8,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Lawrence\",\"lastname\":\"L.\"},\"name\":\"Lunch - Run\",\"distance\":1644.5,\"moving_time\":714,\"elapsed_time\":726,\"total_elevation_gain\":4.9,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"MIguel\",\"lastname\":\"S.\"},\"name\":\"Carrera - de mañana\",\"distance\":1344.6,\"moving_time\":720,\"elapsed_time\":720,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Ke'Mani\",\"lastname\":\"S.\"},\"name\":\"Morning - Run\",\"distance\":5001.8,\"moving_time\":1504,\"elapsed_time\":1525,\"total_elevation_gain\":27.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Chad\",\"lastname\":\"Z.\"},\"name\":\"Beautiful - fall \U0001F3C3‍♂️\",\"distance\":5389.7,\"moving_time\":1973,\"elapsed_time\":1973,\"total_elevation_gain\":18.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Madeline\",\"lastname\":\"Z.\"},\"name\":\"Morning - Run\",\"distance\":5305.9,\"moving_time\":2030,\"elapsed_time\":2102,\"total_elevation_gain\":0.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Ritchey\",\"lastname\":\"H.\"},\"name\":\"Morning - Run\",\"distance\":7840.3,\"moving_time\":2489,\"elapsed_time\":2635,\"total_elevation_gain\":19.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Juliano\",\"lastname\":\"P.\"},\"name\":\"Lunch - Run\",\"distance\":3778.1,\"moving_time\":2286,\"elapsed_time\":2592,\"total_elevation_gain\":3.6,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Mireya\",\"lastname\":\"T.\"},\"name\":\"Morning - Run\",\"distance\":6481.9,\"moving_time\":2617,\"elapsed_time\":2648,\"total_elevation_gain\":21.2,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Bougis\",\"lastname\":\"9.\"},\"name\":\"Course - à pied dans l'après-midi\",\"distance\":9680.8,\"moving_time\":2959,\"elapsed_time\":2959,\"total_elevation_gain\":70.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"José - Carlos\",\"lastname\":\"H.\"},\"name\":\"Nike Run Club: domingo - Carrera - por la mañana\",\"distance\":7721.1,\"moving_time\":3030,\"elapsed_time\":3063,\"total_elevation_gain\":67.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Cosimo\",\"lastname\":\"P.\"},\"name\":\"Afternoon - Run\",\"distance\":8630.5,\"moving_time\":2941,\"elapsed_time\":2954,\"total_elevation_gain\":23.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Christopher\",\"lastname\":\"L.\"},\"name\":\"Morning - Run\",\"distance\":11276.6,\"moving_time\":3575,\"elapsed_time\":3796,\"total_elevation_gain\":63.8,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Coco\",\"lastname\":\"M.\"},\"name\":\"Morning - Run\",\"distance\":7685.5,\"moving_time\":3566,\"elapsed_time\":3607,\"total_elevation_gain\":59.9,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Shannon\",\"lastname\":\"M.\"},\"name\":\"Peloton - - 72 min Entertainment Run\",\"distance\":6557.5,\"moving_time\":4310,\"elapsed_time\":4310,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Laura\",\"lastname\":\"V.\"},\"name\":\"Carrera - por la mañana\",\"distance\":12884.5,\"moving_time\":4614,\"elapsed_time\":4620,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Jorge\",\"lastname\":\"V.\"},\"name\":\"Morning - Run\",\"distance\":15021.9,\"moving_time\":5083,\"elapsed_time\":5083,\"total_elevation_gain\":55.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Silfrido - Enrique\",\"lastname\":\"M.\"},\"name\":\"Morning Run\",\"distance\":15018.7,\"moving_time\":5321,\"elapsed_time\":5327,\"total_elevation_gain\":47.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Michele\",\"lastname\":\"M.\"},\"name\":\"Nike - Run Club: Another Ten Mile Run\",\"distance\":16100.6,\"moving_time\":5394,\"elapsed_time\":6589,\"total_elevation_gain\":102.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"JULIAN\",\"lastname\":\"D.\"},\"name\":\"Carrera - por la mañana\",\"distance\":19030.8,\"moving_time\":6609,\"elapsed_time\":6714,\"total_elevation_gain\":192.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Asif\",\"lastname\":\"K.\"},\"name\":\"Morning - Run\",\"distance\":22546.9,\"moving_time\":6878,\"elapsed_time\":6878,\"total_elevation_gain\":0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Joe\",\"lastname\":\"R.\"},\"name\":\"Morning - Run\",\"distance\":17756.5,\"moving_time\":6864,\"elapsed_time\":7995,\"total_elevation_gain\":27.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Marcia\",\"lastname\":\"M.\"},\"name\":\"Carrera - de mañana\",\"distance\":25022.8,\"moving_time\":9299,\"elapsed_time\":9622,\"total_elevation_gain\":588.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Victor\",\"lastname\":\"N.\"},\"name\":\"Morning - Run\",\"distance\":24152.3,\"moving_time\":9039,\"elapsed_time\":9555,\"total_elevation_gain\":154.9,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Oscar - Fernando\",\"lastname\":\"P.\"},\"name\":\"Carrera de mañana\",\"distance\":32020.2,\"moving_time\":10702,\"elapsed_time\":11494,\"total_elevation_gain\":107.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":2},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Tami\",\"lastname\":\"S.\"},\"name\":\"Morning - Run\",\"distance\":32197.9,\"moving_time\":11068,\"elapsed_time\":11478,\"total_elevation_gain\":190.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Stephen\",\"lastname\":\"A.\"},\"name\":\"Morning - Run\",\"distance\":33245.3,\"moving_time\":10753,\"elapsed_time\":11500,\"total_elevation_gain\":203.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Mike - Hahn\",\"lastname\":\"|.\"},\"name\":\"Morning Trail Run\",\"distance\":16808.0,\"moving_time\":6700,\"elapsed_time\":7634,\"total_elevation_gain\":556.0,\"type\":\"Run\",\"sport_type\":\"TrailRun\",\"workout_type\":null},{\"resource_state\":2,\"athlete\":{\"resource_state\":2,\"firstname\":\"Kat\",\"lastname\":\"L.\"},\"name\":\"Morning - Run\",\"distance\":4296.4,\"moving_time\":1357,\"elapsed_time\":181983,\"total_elevation_gain\":11.0,\"type\":\"Run\",\"sport_type\":\"Run\",\"workout_type\":0}]" - recorded_at: Sun, 19 Oct 2025 15:23:46 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/strava/client/club_admins.yml b/spec/fixtures/strava/client/club_admins.yml deleted file mode 100644 index ac29e14..0000000 --- a/spec/fixtures/strava/client/club_admins.yml +++ /dev/null @@ -1,77 +0,0 @@ ---- -http_interactions: -- request: - method: get - uri: https://www.strava.com/api/v3/clubs/108605/admins - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer access-token - Accept: - - application/json; charset=utf-8 - User-Agent: - - Strava Ruby Client/3.0.0 - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Date: - - Sat, 18 Oct 2025 23:04:33 GMT - X-Envoy-Upstream-Service-Time: - - '67' - Server: - - istio-envoy - Status: - - 200 OK - X-Ratelimit-Usage: - - '75,218' - X-Ratelimit-Limit: - - '200,2000' - Vary: - - Accept, Origin - Cache-Control: - - max-age=0, private, must-revalidate - Referrer-Policy: - - strict-origin-when-cross-origin - X-Permitted-Cross-Domain-Policies: - - none - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - f64ec571-568c-4ffb-8b83-112eea5d6442 - X-Readratelimit-Limit: - - '100,1000' - X-Download-Options: - - noopen - Etag: - - W/"3c81d8daf1a204ad10fb64775f40635c" - X-Frame-Options: - - DENY - X-Readratelimit-Usage: - - '74,217' - X-Content-Type-Options: - - nosniff - X-Cache: - - Miss from cloudfront - Via: - - 1.1 fa2ecff4e65c01748abe1c8c2a9dfb72.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - JFK52-P3 - X-Amz-Cf-Id: - - 6aKIzgvTqLEWX4OHp60h5Bbi1I1gkzmzK5HE5P78Q9SM6fy9ZXEO8A== - body: - encoding: UTF-8 - string: '[{"resource_state":2,"firstname":"New York","lastname":"R."}]' - recorded_at: Sat, 18 Oct 2025 23:04:33 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/strava/client/club_members.yml b/spec/fixtures/strava/client/club_members.yml deleted file mode 100644 index e86792c..0000000 --- a/spec/fixtures/strava/client/club_members.yml +++ /dev/null @@ -1,77 +0,0 @@ ---- -http_interactions: -- request: - method: get - uri: https://www.strava.com/api/v3/clubs/108605/members - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer access-token - Accept: - - application/json; charset=utf-8 - User-Agent: - - Strava Ruby Client/3.0.0 - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Date: - - Sat, 18 Oct 2025 23:04:42 GMT - X-Envoy-Upstream-Service-Time: - - '150' - Server: - - istio-envoy - Status: - - 200 OK - X-Ratelimit-Usage: - - '77,220' - X-Ratelimit-Limit: - - '200,2000' - Vary: - - Accept, Origin - Cache-Control: - - max-age=0, private, must-revalidate - Referrer-Policy: - - strict-origin-when-cross-origin - X-Permitted-Cross-Domain-Policies: - - none - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - 1f3c00fa-d0ee-4e59-ae3e-46652f3d9642 - X-Readratelimit-Limit: - - '100,1000' - X-Download-Options: - - noopen - Etag: - - W/"527895be64d3fbefba0b7d425047d3ca" - X-Frame-Options: - - DENY - X-Readratelimit-Usage: - - '76,219' - X-Content-Type-Options: - - nosniff - X-Cache: - - Miss from cloudfront - Via: - - 1.1 9d75edcf5a40394118428c99809b7ff6.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - JFK52-P3 - X-Amz-Cf-Id: - - 00kvVouqK0W3vn0khVqfTxvnjSmN3tUNtz7qOqROPwAdlnL15l1dJg== - body: - encoding: UTF-8 - string: '[{"resource_state":2,"firstname":"Alexandra","lastname":"G.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Alla","lastname":"R.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Ash","lastname":"L.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Beckham","lastname":"T.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Caro","lastname":"H.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Charlie","lastname":"O.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"daniela","lastname":"H.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Dave","lastname":"R.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"David","lastname":"D.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Emma","lastname":"K.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Felix","lastname":"P.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Francesca","lastname":"K.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Gaia","lastname":"S.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Grayden","lastname":"H.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Isaac","lastname":"S.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Jacopo","lastname":"M.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Jonatan","lastname":"N.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Jordan","lastname":"O.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Joris","lastname":"W.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Kurt","lastname":"S.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Lilly","lastname":"V.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Lula","lastname":"C.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"M","lastname":"L.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Mary","lastname":"A.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Michael","lastname":"L.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Mike","lastname":"S.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Nicole","lastname":"S.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Nēv","lastname":"S.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Pamela","lastname":"D.","membership":"member","admin":false,"owner":false},{"resource_state":2,"firstname":"Pamela","lastname":"S.","membership":"member","admin":false,"owner":false}]' - recorded_at: Sat, 18 Oct 2025 23:04:42 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/strava/api/client/endpoints/clubs/club_activities_spec.rb b/spec/strava/api/client/endpoints/clubs/club_activities_spec.rb deleted file mode 100644 index 02a98de..0000000 --- a/spec/strava/api/client/endpoints/clubs/club_activities_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Strava::Api::Client#club_activities' do - include_context 'with API client' - describe '#club_activities', vcr: { cassette_name: 'client/club_activities' } do - it 'returns club activities' do - club_activities = client.club_activities(id: 209_437) - expect(club_activities).to be_a Enumerable - expect(club_activities.count).to eq 30 - activity = club_activities.first - expect(activity).to be_a Strava::Models::ClubActivity - expect(activity.distance).to eq 10_399.9 - expect(activity.name).to eq 'Run for The Nature Conservancy' - expect(activity.athlete).to be_a Strava::Models::MetaAthlete - expect(activity.athlete.firstname).to eq 'ethan' - expect(activity.athlete.lastname).to eq 'L.' - end - - it 'returns club activities by id' do - club_activities = client.club_activities(209_437) - expect(club_activities).to be_a Enumerable - expect(club_activities.count).to eq 30 - end - end - - describe 'paginated #club_activities', vcr: { cassette_name: 'client/all_club_activities' } do - let(:club_activities) do - all = [] - client.club_activities(id: 209_437) do |activity| - all << activity - end - all - end - - it 'returns club activities' do - expect(club_activities).to be_a Enumerable - expect(club_activities.count).to eq 96 - end - end -end diff --git a/spec/strava/api/client/endpoints/clubs/club_admins_spec.rb b/spec/strava/api/client/endpoints/clubs/club_admins_spec.rb deleted file mode 100644 index 1fbbb00..0000000 --- a/spec/strava/api/client/endpoints/clubs/club_admins_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Strava::Api::Client#club_admins', vcr: { cassette_name: 'client/club_admins' } do - include_context 'with API client' - it 'returns club admins' do - club_admins = client.club_admins(id: 108_605) - expect(club_admins).to be_a Enumerable - expect(club_admins.count).to eq 1 - admin = club_admins.first - expect(admin).to be_a Strava::Models::ClubAthlete - expect(admin.name).to eq 'New York R.' - end - - it 'returns club admins by id' do - club_admins = client.club_admins(108_605) - expect(club_admins).to be_a Enumerable - expect(club_admins.count).to eq 1 - end -end diff --git a/spec/strava/api/client/endpoints/clubs/club_members_spec.rb b/spec/strava/api/client/endpoints/clubs/club_members_spec.rb deleted file mode 100644 index ca77899..0000000 --- a/spec/strava/api/client/endpoints/clubs/club_members_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Strava::Api::Client#club_members', vcr: { cassette_name: 'client/club_members' } do - include_context 'with API client' - it 'returns club members' do - club_members = client.club_members(id: 108_605) - expect(club_members).to be_a Enumerable - expect(club_members.count).to eq 30 - member = club_members.first - expect(member).to be_a Strava::Models::ClubAthlete - expect(member.firstname).to eq 'Alexandra' - end - - it 'returns club members by id' do - club_members = client.club_members(108_605) - expect(club_members).to be_a Enumerable - expect(club_members.count).to eq 30 - end -end