Skip to content

Commit 9c78eb6

Browse files
committed
Update and refactor models to spec.
1 parent 0f88a17 commit 9c78eb6

File tree

178 files changed

+17665
-5292
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

178 files changed

+17665
-5292
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
### 3.0.0 (Next)
22

3+
* [#96](https://github.com/dblock/strava-ruby-client/pull/96): Update and refactor models to spec - [@dblock](https://github.com/dblock).
34
* [#94](https://github.com/dblock/strava-ruby-client/pull/94): Adds video fields to `Strava::Models::Photo` - [@dblock](https://github.com/dblock).
45
* [#92](https://github.com/dblock/strava-ruby-client/pull/92): Fixes `Hashie::Trash` serialization warning for `object_id` of `Strava::Webhooks::Models::Event` - [@simonneutert](https://github.com/simonneutert).
56
* [#95](https://github.com/dblock/strava-ruby-client/pull/95): Fixed `club_events` returning `Strava::Models::ClubEvent` with an empty string in `created_at` - [@dblock](https://github.com/dblock).

LICENSE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2018 Daniel Doubrovkine and Contributors
3+
Copyright (c) 2018-2025 Daniel Doubrovkine and Contributors
44

55
Permission is hereby granted, free of charge, to any person obtaining
66
a copy of this software and associated documentation files (the

README.md

Lines changed: 51 additions & 73 deletions
Large diffs are not rendered by default.

UPGRADING.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,56 @@
22

33
### Upgrading to >= 3.0.0
44

5+
#### Breaking Model Changes
6+
7+
The models have been updated and now closer align to the API documentation.
8+
9+
- `Activity` was renamed to `DetailedActivity`, and `SummaryActivity`, `ClubActivity` and `MetaActivity` were added
10+
- `Athlete` was renamed to `DetailedAthlete`, and `SummaryAthlete`, and `MetaAthlete` were added
11+
- `Club` was renamed to `DetailedClub`, and `SummaryClub`, and `MetaClub` were added
12+
- `Gear` was renamed to `DetailedGear` and `SummaryGear` was added
13+
- `Photo` was renamed to `DetailedPhoto`, and `Photos` was renamed to `DetailedPhotos`, `PhotosSummary` and `PhotosSummaryPrimary` were added
14+
- `Segment` was renamed to `DetailedSegment`, `SummarySegment` was added and `SegmentStats` was removed
15+
- `SegmentEffort` was renamed to `DetailedSegmentEffort` and `SummarySegmentEffort` was added
16+
- `ClubMember` was renamed to `ClubAthlete`, and `ClubAdmin` was removed
17+
- `RunningRace` was removed, `BaseStream`, `StatsVisibility`, `SummaryPRSegmentEffort`, `UpdatableActivity`, and `Waypoint` were added.
18+
19+
There are several API changes.
20+
21+
- **Activities:**
22+
- `create_activity()` now returns `DetailedActivity` instead of `Activity`
23+
- `activity()` now returns `DetailedActivity` instead of `Activity`
24+
- `activity_photos()` now returns `DetailedPhoto` instead of `Photo`
25+
- `activity_kudos()` now returns `SummaryAthlete` instead of `Athlete`
26+
27+
- **Athletes:**
28+
- `athlete()` now returns `DetailedAthlete` instead of `Athlete`
29+
- `update_athlete()` now returns `DetailedAthlete` instead of `Athlete`
30+
31+
- **Clubs:**
32+
- `club_activities()` now returns `ClubActivity` instead of `Activity`
33+
- `club_admins()` now returns `ClubAthlete` instead of `ClubAdmin`
34+
- `club()` now returns `DetailedClub` instead of `Club`
35+
- `club_members()` now returns `ClubAthlete` instead of `ClubMember`
36+
37+
- **Gears:**
38+
- `gear()` now returns `DetailedGear` instead of `Gear`
39+
40+
- **Segment Efforts:**
41+
- `segment_effort()` now returns `DetailedSegmentEffort` instead of `SegmentEffort`
42+
- `segment_efforts()` now returns `DetailedSegmentEffort` instead of `SegmentEffort`
43+
44+
- **Segments:**
45+
- `starred_segments()` now returns `SummarySegment` instead of `Segment`
46+
- `segment()` now returns `DetailedSegment` instead of `Segment`
47+
- `star_segment()` now returns `DetailedSegment` instead of `Segment`
48+
49+
**Removed Methods:**
50+
51+
- **`running_race(id)`** - The `client.running_race(id)` method has been removed along with the entire `RunningRaces` endpoint module.
52+
53+
See [#96](https://github.com/dblock/strava-ruby-client/pull/96) for details.
54+
555
#### Removed `id` from `Strava::Models::Photo`
656

757
The Strava Photos API returns `unique_id` and does not return `id`. The latter has been removed.

bin/strava-activities.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
access_token: access_token
99
)
1010

11+
puts "Logged in as #{client.athlete.name}."
12+
1113
client.athlete_activities.each do |activity|
1214
puts activity.name
1315
end

lib/strava-ruby-client.rb

Lines changed: 51 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,50 +20,72 @@
2020
require_relative 'strava/errors/upload_error'
2121
require_relative 'strava/errors/ratelimit_error'
2222

23-
require_relative 'strava/models/mixins/time'
23+
require_relative 'strava/models/mixins/time_in_hours'
24+
require_relative 'strava/models/mixins/average_speed'
2425
require_relative 'strava/models/mixins/distance'
25-
require_relative 'strava/models/mixins/elevation'
26+
require_relative 'strava/models/mixins/elapsed_time'
27+
require_relative 'strava/models/mixins/elevation_gain'
28+
require_relative 'strava/models/mixins/elevation_difference'
29+
require_relative 'strava/models/mixins/estimated_moving_time'
2630
require_relative 'strava/models/mixins/http_response'
31+
require_relative 'strava/models/mixins/moving_time'
32+
require_relative 'strava/models/mixins/sport_type'
2733
require_relative 'strava/models/mixins/start_date_local'
34+
require_relative 'strava/models/mixins/total_elevation_gain'
2835

2936
require_relative 'strava/models/model'
3037
require_relative 'strava/models/response'
3138
require_relative 'strava/models/token'
32-
require_relative 'strava/models/athlete'
33-
require_relative 'strava/models/map'
34-
require_relative 'strava/models/activity'
35-
require_relative 'strava/models/club'
36-
require_relative 'strava/models/club_admin'
37-
require_relative 'strava/models/club_event'
38-
require_relative 'strava/models/club_member'
39-
require_relative 'strava/models/segment_effort'
40-
require_relative 'strava/models/photos'
41-
require_relative 'strava/models/photo'
42-
require_relative 'strava/models/similar_activities'
43-
require_relative 'strava/models/trend'
44-
require_relative 'strava/models/split'
45-
require_relative 'strava/models/lap'
46-
require_relative 'strava/models/gear'
47-
require_relative 'strava/models/segment'
39+
require_relative 'strava/models/authorization'
40+
41+
require_relative 'strava/models/achievement'
42+
require_relative 'strava/models/activity_stats'
43+
require_relative 'strava/models/activity_total'
4844
require_relative 'strava/models/activity_zone'
49-
require_relative 'strava/models/timed_zone_range'
45+
require_relative 'strava/models/base_stream'
46+
require_relative 'strava/models/club_activity'
47+
require_relative 'strava/models/club_athlete'
48+
require_relative 'strava/models/club_event'
5049
require_relative 'strava/models/comment'
51-
require_relative 'strava/models/zones'
50+
require_relative 'strava/models/detailed_activity'
51+
require_relative 'strava/models/detailed_athlete'
52+
require_relative 'strava/models/detailed_club'
53+
require_relative 'strava/models/detailed_gear'
54+
require_relative 'strava/models/detailed_photo'
55+
require_relative 'strava/models/detailed_photos'
56+
require_relative 'strava/models/detailed_segment_effort'
57+
require_relative 'strava/models/detailed_segment'
58+
require_relative 'strava/models/explorer_segment'
5259
require_relative 'strava/models/heart_rate_zone_ranges'
60+
require_relative 'strava/models/kudoser'
61+
require_relative 'strava/models/lap'
62+
require_relative 'strava/models/map'
63+
require_relative 'strava/models/meta_activity'
64+
require_relative 'strava/models/meta_athlete'
65+
require_relative 'strava/models/meta_club'
66+
require_relative 'strava/models/photos_summary_primary'
67+
require_relative 'strava/models/photos_summary'
5368
require_relative 'strava/models/power_zone_ranges'
54-
require_relative 'strava/models/zone_range'
55-
require_relative 'strava/models/activity_total'
56-
require_relative 'strava/models/activity_stats'
5769
require_relative 'strava/models/route'
58-
require_relative 'strava/models/kudoser'
59-
require_relative 'strava/models/running_race'
60-
require_relative 'strava/models/achievement'
61-
require_relative 'strava/models/segment_stats'
62-
require_relative 'strava/models/explorer_segment'
70+
require_relative 'strava/models/similar_activities'
71+
require_relative 'strava/models/split'
72+
require_relative 'strava/models/stats_visibility'
6373
require_relative 'strava/models/stream_set'
6474
require_relative 'strava/models/stream'
75+
require_relative 'strava/models/summary_activity'
76+
require_relative 'strava/models/summary_athlete'
77+
require_relative 'strava/models/summary_club'
78+
require_relative 'strava/models/summary_gear'
79+
require_relative 'strava/models/summary_pr_segment_effort'
80+
require_relative 'strava/models/summary_segment_effort'
81+
require_relative 'strava/models/summary_segment'
82+
require_relative 'strava/models/timed_zone_range'
83+
require_relative 'strava/models/trend'
84+
require_relative 'strava/models/updatable_activity'
6585
require_relative 'strava/models/upload'
66-
require_relative 'strava/models/authorization'
86+
require_relative 'strava/models/waypoint'
87+
require_relative 'strava/models/zone_range'
88+
require_relative 'strava/models/zones'
6789

6890
require_relative 'strava/web/raise_response_error'
6991
require_relative 'strava/web/connection'
@@ -91,7 +113,6 @@
91113
require_relative 'strava/api/endpoints/clubs'
92114
require_relative 'strava/api/endpoints/gears'
93115
require_relative 'strava/api/endpoints/routes'
94-
require_relative 'strava/api/endpoints/running_races'
95116
require_relative 'strava/api/endpoints/segment_efforts'
96117
require_relative 'strava/api/endpoints/segments'
97118
require_relative 'strava/api/endpoints/streams'

lib/strava/api/client.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ class Client < Strava::Web::Client
88
include Endpoints::Clubs
99
include Endpoints::Gears
1010
include Endpoints::Routes
11-
include Endpoints::RunningRaces
1211
include Endpoints::SegmentEfforts
1312
include Endpoints::Segments
1413
include Endpoints::Streams

lib/strava/api/endpoints/activities.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module Activities
88
# Create an activity.
99
#
1010
def create_activity(options = {})
11-
Strava::Models::Activity.new(post('activities', options))
11+
Strava::Models::DetailedActivity.new(post('activities', options))
1212
end
1313

1414
#
@@ -19,7 +19,7 @@ def create_activity(options = {})
1919
#
2020
def activity(id_or_options, options = {})
2121
id, options = parse_args(id_or_options, options)
22-
Strava::Models::Activity.new(get("activities/#{id}", options))
22+
Strava::Models::DetailedActivity.new(get("activities/#{id}", options))
2323
end
2424

2525
#
@@ -50,7 +50,7 @@ def activity_comments(id_or_options, options = {}, &block)
5050
def activity_photos(id_or_options, options = {}, &block)
5151
id, options = parse_args(id_or_options, options)
5252
options[:size] = 5000 unless options[:size] # to retrieve full size photos
53-
paginate "activities/#{id}/photos", options, Strava::Models::Photo, &block
53+
paginate "activities/#{id}/photos", options, Strava::Models::DetailedPhoto, &block
5454
end
5555

5656
#
@@ -65,7 +65,7 @@ def activity_photos(id_or_options, options = {}, &block)
6565
#
6666
def activity_kudos(id_or_options, options = {}, &block)
6767
id, options = parse_args(id_or_options, options)
68-
paginate "activities/#{id}/kudos", options, Strava::Models::Athlete, &block
68+
paginate "activities/#{id}/kudos", options, Strava::Models::SummaryAthlete, &block
6969
end
7070

7171
#
@@ -97,7 +97,7 @@ def athlete_activities(options = {}, &block)
9797
options = options.dup if options.key?(:after) || options.key?(:before)
9898
options[:after] = options[:after].to_i if options[:after]
9999
options[:before] = options[:before].to_i if options[:before]
100-
paginate 'athlete/activities', options, Strava::Models::Activity, &block
100+
paginate 'athlete/activities', options, Strava::Models::SummaryActivity, &block
101101
end
102102

103103
#
@@ -133,7 +133,7 @@ def activity_zones(id_or_options, options = {})
133133
#
134134
def update_activity(id_or_options, options = {})
135135
id, options = parse_args(id_or_options, options)
136-
Strava::Models::Activity.new(put("activities/#{id}", options))
136+
Strava::Models::DetailedActivity.new(put("activities/#{id}", options))
137137
end
138138
end
139139
end

lib/strava/api/endpoints/athletes.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module Athletes
88
# Returns the currently authenticated athlete.
99
#
1010
def athlete
11-
Strava::Models::Athlete.new(get('athlete'))
11+
Strava::Models::DetailedAthlete.new(get('athlete'))
1212
end
1313

1414
#
@@ -36,7 +36,7 @@ def athlete_stats(id_or_options, options = {})
3636
# The weight of the athlete in kilograms.
3737
#
3838
def update_athlete(options = {})
39-
Strava::Models::Athlete.new(put('athlete', options))
39+
Strava::Models::DetailedAthlete.new(put('athlete', options))
4040
end
4141
end
4242
end

lib/strava/api/endpoints/clubs.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module Clubs
1616
#
1717
def club_activities(id_or_options, options = {}, &block)
1818
id, options = parse_args(id_or_options, options)
19-
paginate "clubs/#{id}/activities", options, Strava::Models::Activity, &block
19+
paginate "clubs/#{id}/activities", options, Strava::Models::ClubActivity, &block
2020
end
2121

2222
#
@@ -46,7 +46,7 @@ def club_events(id_or_options, options = {}, &block)
4646
#
4747
def club_admins(id_or_options, options = {}, &block)
4848
id, options = parse_args(id_or_options, options)
49-
paginate "clubs/#{id}/admins", options, Strava::Models::ClubAdmin, &block
49+
paginate "clubs/#{id}/admins", options, Strava::Models::ClubAthlete, &block
5050
end
5151

5252
#
@@ -57,7 +57,7 @@ def club_admins(id_or_options, options = {}, &block)
5757
#
5858
def club(id_or_options, options = {})
5959
id, options = parse_args(id_or_options, options)
60-
Strava::Models::Club.new(get("clubs/#{id}", options))
60+
Strava::Models::DetailedClub.new(get("clubs/#{id}", options))
6161
end
6262

6363
#
@@ -72,7 +72,7 @@ def club(id_or_options, options = {})
7272
#
7373
def club_members(id_or_options, options = {}, &block)
7474
id, options = parse_args(id_or_options, options)
75-
paginate "clubs/#{id}/members", options, Strava::Models::ClubMember, &block
75+
paginate "clubs/#{id}/members", options, Strava::Models::ClubAthlete, &block
7676
end
7777

7878
#
@@ -84,7 +84,7 @@ def club_members(id_or_options, options = {}, &block)
8484
# Number of items per page. Defaults to 30.
8585
#
8686
def athlete_clubs(options = {}, &block)
87-
paginate 'athlete/clubs', options, Strava::Models::Club, &block
87+
paginate 'athlete/clubs', options, Strava::Models::SummaryClub, &block
8888
end
8989
end
9090
end

0 commit comments

Comments
 (0)