Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
### 3.0.0 (Next)

* [#96](https://github.com/dblock/strava-ruby-client/pull/96): Update and refactor models to spec - [@dblock](https://github.com/dblock).
* [#94](https://github.com/dblock/strava-ruby-client/pull/94): Adds video fields to `Strava::Models::Photo` - [@dblock](https://github.com/dblock).
* [#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).
* [#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).
Expand Down
2 changes: 1 addition & 1 deletion LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2018 Daniel Doubrovkine and Contributors
Copyright (c) 2018-2025 Daniel Doubrovkine and Contributors

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
Expand Down
124 changes: 51 additions & 73 deletions README.md

Large diffs are not rendered by default.

50 changes: 50 additions & 0 deletions UPGRADING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,56 @@

### Upgrading to >= 3.0.0

#### Breaking Model Changes

The models have been updated and now closer align to the API documentation.

- `Activity` was renamed to `DetailedActivity`, and `SummaryActivity`, `ClubActivity` and `MetaActivity` were added
- `Athlete` was renamed to `DetailedAthlete`, and `SummaryAthlete`, and `MetaAthlete` were added
- `Club` was renamed to `DetailedClub`, and `SummaryClub`, and `MetaClub` were added
- `Gear` was renamed to `DetailedGear` and `SummaryGear` was added
- `Photo` was renamed to `DetailedPhoto`, and `Photos` was renamed to `DetailedPhotos`, `PhotosSummary` and `PhotosSummaryPrimary` were added
- `Segment` was renamed to `DetailedSegment`, `SummarySegment` was added and `SegmentStats` was removed
- `SegmentEffort` was renamed to `DetailedSegmentEffort` and `SummarySegmentEffort` was added
- `ClubMember` was renamed to `ClubAthlete`, and `ClubAdmin` was removed
- `RunningRace` was removed, `BaseStream`, `StatsVisibility`, `SummaryPRSegmentEffort`, `UpdatableActivity`, `Xoms`, `Destination`, `LocalLegend` and `Waypoint` were added.

There are several API changes.

- **Activities:**
- `create_activity()` now returns `DetailedActivity` instead of `Activity`
- `activity()` now returns `DetailedActivity` instead of `Activity`
- `activity_photos()` now returns `DetailedPhoto` instead of `Photo`
- `activity_kudos()` now returns `SummaryAthlete` instead of `Athlete`

- **Athletes:**
- `athlete()` now returns `DetailedAthlete` instead of `Athlete`
- `update_athlete()` now returns `DetailedAthlete` instead of `Athlete`

- **Clubs:**
- `club_activities()` now returns `ClubActivity` instead of `Activity`
- `club_admins()` now returns `ClubAthlete` instead of `ClubAdmin`
- `club()` now returns `DetailedClub` instead of `Club`
- `club_members()` now returns `ClubAthlete` instead of `ClubMember`

- **Gears:**
- `gear()` now returns `DetailedGear` instead of `Gear`

- **Segment Efforts:**
- `segment_effort()` now returns `DetailedSegmentEffort` instead of `SegmentEffort`
- `segment_efforts()` now returns `DetailedSegmentEffort` instead of `SegmentEffort`

- **Segments:**
- `starred_segments()` now returns `SummarySegment` instead of `Segment`
- `segment()` now returns `DetailedSegment` instead of `Segment`
- `star_segment()` now returns `DetailedSegment` instead of `Segment`

**Removed Methods:**

- **`running_race(id)`** - The `client.running_race(id)` method has been removed along with the entire `RunningRaces` endpoint module.

See [#96](https://github.com/dblock/strava-ruby-client/pull/96) for details.

#### Removed `id` from `Strava::Models::Photo`

The Strava Photos API returns `unique_id` and does not return `id`. The latter has been removed.
Expand Down
2 changes: 2 additions & 0 deletions bin/strava-activities.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
access_token: access_token
)

puts "Logged in as #{client.athlete.name}."

client.athlete_activities.each do |activity|
puts activity.name
end
84 changes: 54 additions & 30 deletions lib/strava-ruby-client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,50 +20,75 @@
require_relative 'strava/errors/upload_error'
require_relative 'strava/errors/ratelimit_error'

require_relative 'strava/models/mixins/time'
require_relative 'strava/models/mixins/time_in_hours'
require_relative 'strava/models/mixins/average_speed'
require_relative 'strava/models/mixins/distance'
require_relative 'strava/models/mixins/elevation'
require_relative 'strava/models/mixins/elapsed_time'
require_relative 'strava/models/mixins/elevation_gain'
require_relative 'strava/models/mixins/elevation_difference'
require_relative 'strava/models/mixins/estimated_moving_time'
require_relative 'strava/models/mixins/http_response'
require_relative 'strava/models/mixins/moving_time'
require_relative 'strava/models/mixins/sport_type'
require_relative 'strava/models/mixins/start_date_local'
require_relative 'strava/models/mixins/total_elevation_gain'

require_relative 'strava/models/model'
require_relative 'strava/models/response'
require_relative 'strava/models/token'
require_relative 'strava/models/athlete'
require_relative 'strava/models/map'
require_relative 'strava/models/activity'
require_relative 'strava/models/club'
require_relative 'strava/models/club_admin'
require_relative 'strava/models/club_event'
require_relative 'strava/models/club_member'
require_relative 'strava/models/segment_effort'
require_relative 'strava/models/photos'
require_relative 'strava/models/photo'
require_relative 'strava/models/similar_activities'
require_relative 'strava/models/trend'
require_relative 'strava/models/split'
require_relative 'strava/models/lap'
require_relative 'strava/models/gear'
require_relative 'strava/models/segment'
require_relative 'strava/models/authorization'

require_relative 'strava/models/achievement'
require_relative 'strava/models/activity_stats'
require_relative 'strava/models/activity_total'
require_relative 'strava/models/activity_zone'
require_relative 'strava/models/timed_zone_range'
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/zones'
require_relative 'strava/models/destination'
require_relative 'strava/models/detailed_activity'
require_relative 'strava/models/detailed_athlete'
require_relative 'strava/models/detailed_club'
require_relative 'strava/models/detailed_gear'
require_relative 'strava/models/detailed_photo'
require_relative 'strava/models/detailed_photos'
require_relative 'strava/models/detailed_segment_effort'
require_relative 'strava/models/detailed_segment'
require_relative 'strava/models/explorer_segment'
require_relative 'strava/models/heart_rate_zone_ranges'
require_relative 'strava/models/kudoser'
require_relative 'strava/models/lap'
require_relative 'strava/models/local_legend'
require_relative 'strava/models/map'
require_relative 'strava/models/meta_activity'
require_relative 'strava/models/meta_athlete'
require_relative 'strava/models/meta_club'
require_relative 'strava/models/photos_summary_primary'
require_relative 'strava/models/photos_summary'
require_relative 'strava/models/power_zone_ranges'
require_relative 'strava/models/zone_range'
require_relative 'strava/models/activity_total'
require_relative 'strava/models/activity_stats'
require_relative 'strava/models/route'
require_relative 'strava/models/kudoser'
require_relative 'strava/models/running_race'
require_relative 'strava/models/achievement'
require_relative 'strava/models/segment_stats'
require_relative 'strava/models/explorer_segment'
require_relative 'strava/models/similar_activities'
require_relative 'strava/models/split'
require_relative 'strava/models/stats_visibility'
require_relative 'strava/models/stream_set'
require_relative 'strava/models/stream'
require_relative 'strava/models/summary_activity'
require_relative 'strava/models/summary_athlete'
require_relative 'strava/models/summary_club'
require_relative 'strava/models/summary_gear'
require_relative 'strava/models/summary_pr_segment_effort'
require_relative 'strava/models/summary_segment_effort'
require_relative 'strava/models/summary_segment'
require_relative 'strava/models/timed_zone_range'
require_relative 'strava/models/trend'
require_relative 'strava/models/updatable_activity'
require_relative 'strava/models/upload'
require_relative 'strava/models/authorization'
require_relative 'strava/models/waypoint'
require_relative 'strava/models/xoms'
require_relative 'strava/models/zone_range'
require_relative 'strava/models/zones'

require_relative 'strava/web/raise_response_error'
require_relative 'strava/web/connection'
Expand Down Expand Up @@ -91,7 +116,6 @@
require_relative 'strava/api/endpoints/clubs'
require_relative 'strava/api/endpoints/gears'
require_relative 'strava/api/endpoints/routes'
require_relative 'strava/api/endpoints/running_races'
require_relative 'strava/api/endpoints/segment_efforts'
require_relative 'strava/api/endpoints/segments'
require_relative 'strava/api/endpoints/streams'
Expand Down
1 change: 0 additions & 1 deletion lib/strava/api/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ class Client < Strava::Web::Client
include Endpoints::Clubs
include Endpoints::Gears
include Endpoints::Routes
include Endpoints::RunningRaces
include Endpoints::SegmentEfforts
include Endpoints::Segments
include Endpoints::Streams
Expand Down
12 changes: 6 additions & 6 deletions lib/strava/api/endpoints/activities.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ module Activities
# Create an activity.
#
def create_activity(options = {})
Strava::Models::Activity.new(post('activities', options))
Strava::Models::DetailedActivity.new(post('activities', options))
end

#
Expand All @@ -19,7 +19,7 @@ def create_activity(options = {})
#
def activity(id_or_options, options = {})
id, options = parse_args(id_or_options, options)
Strava::Models::Activity.new(get("activities/#{id}", options))
Strava::Models::DetailedActivity.new(get("activities/#{id}", options))
end

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

#
Expand All @@ -65,7 +65,7 @@ def activity_photos(id_or_options, options = {}, &block)
#
def activity_kudos(id_or_options, options = {}, &block)
id, options = parse_args(id_or_options, options)
paginate "activities/#{id}/kudos", options, Strava::Models::Athlete, &block
paginate "activities/#{id}/kudos", options, Strava::Models::SummaryAthlete, &block
end

#
Expand Down Expand Up @@ -97,7 +97,7 @@ def athlete_activities(options = {}, &block)
options = options.dup if options.key?(:after) || options.key?(:before)
options[:after] = options[:after].to_i if options[:after]
options[:before] = options[:before].to_i if options[:before]
paginate 'athlete/activities', options, Strava::Models::Activity, &block
paginate 'athlete/activities', options, Strava::Models::SummaryActivity, &block
end

#
Expand Down Expand Up @@ -133,7 +133,7 @@ def activity_zones(id_or_options, options = {})
#
def update_activity(id_or_options, options = {})
id, options = parse_args(id_or_options, options)
Strava::Models::Activity.new(put("activities/#{id}", options))
Strava::Models::DetailedActivity.new(put("activities/#{id}", options))
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/strava/api/endpoints/athletes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ module Athletes
# Returns the currently authenticated athlete.
#
def athlete
Strava::Models::Athlete.new(get('athlete'))
Strava::Models::DetailedAthlete.new(get('athlete'))
end

#
Expand Down Expand Up @@ -36,7 +36,7 @@ def athlete_stats(id_or_options, options = {})
# The weight of the athlete in kilograms.
#
def update_athlete(options = {})
Strava::Models::Athlete.new(put('athlete', options))
Strava::Models::DetailedAthlete.new(put('athlete', options))
end
end
end
Expand Down
10 changes: 5 additions & 5 deletions lib/strava/api/endpoints/clubs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ module Clubs
#
def club_activities(id_or_options, options = {}, &block)
id, options = parse_args(id_or_options, options)
paginate "clubs/#{id}/activities", options, Strava::Models::Activity, &block
paginate "clubs/#{id}/activities", options, Strava::Models::ClubActivity, &block
end

#
Expand Down Expand Up @@ -46,7 +46,7 @@ def club_events(id_or_options, options = {}, &block)
#
def club_admins(id_or_options, options = {}, &block)
id, options = parse_args(id_or_options, options)
paginate "clubs/#{id}/admins", options, Strava::Models::ClubAdmin, &block
paginate "clubs/#{id}/admins", options, Strava::Models::ClubAthlete, &block
end

#
Expand All @@ -57,7 +57,7 @@ def club_admins(id_or_options, options = {}, &block)
#
def club(id_or_options, options = {})
id, options = parse_args(id_or_options, options)
Strava::Models::Club.new(get("clubs/#{id}", options))
Strava::Models::DetailedClub.new(get("clubs/#{id}", options))
end

#
Expand All @@ -72,7 +72,7 @@ def club(id_or_options, options = {})
#
def club_members(id_or_options, options = {}, &block)
id, options = parse_args(id_or_options, options)
paginate "clubs/#{id}/members", options, Strava::Models::ClubMember, &block
paginate "clubs/#{id}/members", options, Strava::Models::ClubAthlete, &block
end

#
Expand All @@ -84,7 +84,7 @@ def club_members(id_or_options, options = {}, &block)
# Number of items per page. Defaults to 30.
#
def athlete_clubs(options = {}, &block)
paginate 'athlete/clubs', options, Strava::Models::Club, &block
paginate 'athlete/clubs', options, Strava::Models::SummaryClub, &block
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/strava/api/endpoints/gears.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ module Gears
#
def gear(id_or_options, options = {})
id, options = parse_args(id_or_options, options)
Strava::Models::Gear.new(get("gear/#{id}", options))
Strava::Models::DetailedGear.new(get("gear/#{id}", options))
end
end
end
Expand Down
20 changes: 0 additions & 20 deletions lib/strava/api/endpoints/running_races.rb

This file was deleted.

4 changes: 2 additions & 2 deletions lib/strava/api/endpoints/segment_efforts.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ module SegmentEfforts
#
def segment_effort(id_or_options, options = {})
id, options = parse_args(id_or_options, options)
Strava::Models::SegmentEffort.new(get("segment_efforts/#{id}", options))
Strava::Models::DetailedSegmentEffort.new(get("segment_efforts/#{id}", options))
end

#
Expand All @@ -27,7 +27,7 @@ def segment_effort(id_or_options, options = {})
#
def segment_efforts(id_or_options, options = {}, &block)
id, options = parse_args(id_or_options, options)
paginate "segments/#{id}/all_efforts", options, Strava::Models::SegmentEffort, &block
paginate "segments/#{id}/all_efforts", options, Strava::Models::DetailedSegmentEffort, &block
end
end
end
Expand Down
6 changes: 3 additions & 3 deletions lib/strava/api/endpoints/segments.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def explore_segments(options = {})
# Number of items per page. Defaults to 30.
#
def starred_segments(options = {}, &block)
paginate 'segments/starred', options, Strava::Models::Segment, &block
paginate 'segments/starred', options, Strava::Models::SummarySegment, &block
end

#
Expand All @@ -45,7 +45,7 @@ def starred_segments(options = {}, &block)
#
def segment(id_or_options, options = {})
id, options = parse_args(id_or_options, options)
Strava::Models::Segment.new(get("segments/#{id}", options))
Strava::Models::DetailedSegment.new(get("segments/#{id}", options))
end

#
Expand All @@ -59,7 +59,7 @@ def segment(id_or_options, options = {})
def star_segment(id_or_options, options = {})
id, options = parse_args(id_or_options, options)
throw ArgumentError.new('Required argument :starred missing') if options[:starred].nil?
Strava::Models::Segment.new(put("segments/#{id}/starred", options))
Strava::Models::DetailedSegment.new(put("segments/#{id}/starred", options))
end
end
end
Expand Down
Loading