strava-ruby-client 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +710 -88
- data/bin/strava-webhooks.rb +56 -0
- data/lib/strava-ruby-client.rb +37 -0
- data/lib/strava/api/client.rb +11 -141
- data/lib/strava/api/endpoints/activities.rb +120 -0
- data/lib/strava/api/endpoints/athletes.rb +42 -0
- data/lib/strava/api/endpoints/clubs.rb +75 -0
- data/lib/strava/api/endpoints/gears.rb +18 -0
- data/lib/strava/api/endpoints/routes.rb +55 -0
- data/lib/strava/api/endpoints/running_races.rb +30 -0
- data/lib/strava/api/endpoints/segment_efforts.rb +33 -0
- data/lib/strava/api/endpoints/segments.rb +111 -0
- data/lib/strava/api/endpoints/streams.rb +61 -0
- data/lib/strava/api/endpoints/uploads.rb +40 -0
- data/lib/strava/logger.rb +1 -1
- data/lib/strava/models/achievement.rb +9 -0
- data/lib/strava/models/activity.rb +11 -5
- data/lib/strava/models/activity_stats.rb +17 -0
- data/lib/strava/models/activity_total.rb +17 -0
- data/lib/strava/models/athlete.rb +10 -0
- data/lib/strava/models/club.rb +6 -0
- data/lib/strava/models/club_admin.rb +13 -0
- data/lib/strava/models/club_member.rb +16 -0
- data/lib/strava/models/explorer_segment.rb +19 -0
- data/lib/strava/models/gear.rb +5 -0
- data/lib/strava/models/heart_rate_zone_ranges.rb +8 -0
- data/lib/strava/models/kudoser.rb +10 -0
- data/lib/strava/models/lap.rb +3 -0
- data/lib/strava/models/mixins/distance.rb +18 -0
- data/lib/strava/models/power_zone_ranges.rb +7 -0
- data/lib/strava/models/route.rb +27 -0
- data/lib/strava/models/running_race.rb +33 -0
- data/lib/strava/models/segment.rb +15 -3
- data/lib/strava/models/segment_effort.rb +7 -2
- data/lib/strava/models/segment_leaderboard.rb +10 -0
- data/lib/strava/models/segment_leaderboard_entry.rb +12 -0
- data/lib/strava/models/segment_stats.rb +15 -0
- data/lib/strava/models/stream.rb +10 -0
- data/lib/strava/models/stream_set.rb +17 -0
- data/lib/strava/models/upload.rb +11 -0
- data/lib/strava/models/zone_range.rb +8 -0
- data/lib/strava/models/zones.rb +8 -0
- data/lib/strava/version.rb +1 -1
- data/lib/strava/web/client.rb +11 -1
- data/lib/strava/web/connection.rb +1 -1
- data/lib/strava/webhooks/client.rb +58 -0
- data/lib/strava/webhooks/config.rb +33 -0
- data/lib/strava/webhooks/models/challenge.rb +15 -0
- data/lib/strava/webhooks/models/event.rb +15 -0
- data/lib/strava/webhooks/models/subscription.rb +14 -0
- metadata +37 -2
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'dotenv/load'
|
4
|
+
require 'strava-ruby-client'
|
5
|
+
require 'webrick'
|
6
|
+
|
7
|
+
logger = ::Logger.new(STDOUT)
|
8
|
+
logger.level = Logger::INFO
|
9
|
+
|
10
|
+
client = Strava::Webhooks::Client.new(
|
11
|
+
client_id: ENV['STRAVA_CLIENT_ID'],
|
12
|
+
client_secret: ENV['STRAVA_CLIENT_SECRET'],
|
13
|
+
logger: logger
|
14
|
+
)
|
15
|
+
|
16
|
+
case ARGV[0]
|
17
|
+
when 'create' then
|
18
|
+
callback_url = ARGV[1]
|
19
|
+
raise 'Missing callback_url.' unless callback_url
|
20
|
+
|
21
|
+
client.logger.info "Subscribing to #{callback_url} ..."
|
22
|
+
subscription = client.create_push_subscription(callback_url: callback_url, verify_token: 'token')
|
23
|
+
puts subscription
|
24
|
+
when 'delete'
|
25
|
+
id = ARGV[1]
|
26
|
+
raise 'Missing id.' unless id
|
27
|
+
|
28
|
+
client.logger.info "Unsubscribing #{id} ..."
|
29
|
+
client.delete_push_subscription(id: id)
|
30
|
+
client.logger.info 'Done.'
|
31
|
+
when 'handle'
|
32
|
+
server = WEBrick::HTTPServer.new(Port: 4242)
|
33
|
+
|
34
|
+
trap 'INT' do
|
35
|
+
server.shutdown
|
36
|
+
end
|
37
|
+
|
38
|
+
server.mount_proc '/' do |req, res|
|
39
|
+
case req.request_method
|
40
|
+
when 'GET' then
|
41
|
+
challenge = Strava::Webhooks::Models::Challenge.new(req.query)
|
42
|
+
res.content_type = 'application/json'
|
43
|
+
res.body = challenge.response.to_json
|
44
|
+
when 'POST' then
|
45
|
+
event = Strava::Webhooks::Models::Event.new(JSON.parse(req.body))
|
46
|
+
server.logger.info event
|
47
|
+
res.content_type = 'application/json'
|
48
|
+
res.body = { ok: true }.to_json
|
49
|
+
end
|
50
|
+
end
|
51
|
+
server.start
|
52
|
+
else
|
53
|
+
client.push_subscriptions.each do |s|
|
54
|
+
puts s
|
55
|
+
end
|
56
|
+
end
|
data/lib/strava-ruby-client.rb
CHANGED
@@ -24,6 +24,8 @@ require_relative 'strava/models/athlete'
|
|
24
24
|
require_relative 'strava/models/map'
|
25
25
|
require_relative 'strava/models/activity'
|
26
26
|
require_relative 'strava/models/club'
|
27
|
+
require_relative 'strava/models/club_admin'
|
28
|
+
require_relative 'strava/models/club_member'
|
27
29
|
require_relative 'strava/models/segment_effort'
|
28
30
|
require_relative 'strava/models/photos'
|
29
31
|
require_relative 'strava/models/photo'
|
@@ -36,6 +38,23 @@ require_relative 'strava/models/segment'
|
|
36
38
|
require_relative 'strava/models/activity_zone'
|
37
39
|
require_relative 'strava/models/timed_zone_range'
|
38
40
|
require_relative 'strava/models/comment'
|
41
|
+
require_relative 'strava/models/zones'
|
42
|
+
require_relative 'strava/models/heart_rate_zone_ranges'
|
43
|
+
require_relative 'strava/models/power_zone_ranges'
|
44
|
+
require_relative 'strava/models/zone_range'
|
45
|
+
require_relative 'strava/models/activity_total'
|
46
|
+
require_relative 'strava/models/activity_stats'
|
47
|
+
require_relative 'strava/models/route'
|
48
|
+
require_relative 'strava/models/kudoser'
|
49
|
+
require_relative 'strava/models/running_race'
|
50
|
+
require_relative 'strava/models/achievement'
|
51
|
+
require_relative 'strava/models/segment_stats'
|
52
|
+
require_relative 'strava/models/segment_leaderboard'
|
53
|
+
require_relative 'strava/models/segment_leaderboard_entry'
|
54
|
+
require_relative 'strava/models/explorer_segment'
|
55
|
+
require_relative 'strava/models/stream_set'
|
56
|
+
require_relative 'strava/models/stream'
|
57
|
+
require_relative 'strava/models/upload'
|
39
58
|
|
40
59
|
require_relative 'strava/web/raise_error'
|
41
60
|
require_relative 'strava/web/connection'
|
@@ -46,6 +65,24 @@ require_relative 'strava/web/client'
|
|
46
65
|
require_relative 'strava/oauth/config'
|
47
66
|
require_relative 'strava/oauth/client'
|
48
67
|
|
68
|
+
require_relative 'strava/webhooks/config'
|
69
|
+
require_relative 'strava/webhooks/client'
|
70
|
+
require_relative 'strava/webhooks/models/challenge'
|
71
|
+
require_relative 'strava/webhooks/models/subscription'
|
72
|
+
require_relative 'strava/webhooks/models/event'
|
73
|
+
|
49
74
|
require_relative 'strava/api/config'
|
50
75
|
require_relative 'strava/api/cursor'
|
76
|
+
|
77
|
+
require_relative 'strava/api/endpoints/activities'
|
78
|
+
require_relative 'strava/api/endpoints/athletes'
|
79
|
+
require_relative 'strava/api/endpoints/clubs'
|
80
|
+
require_relative 'strava/api/endpoints/gears'
|
81
|
+
require_relative 'strava/api/endpoints/routes'
|
82
|
+
require_relative 'strava/api/endpoints/running_races'
|
83
|
+
require_relative 'strava/api/endpoints/segment_efforts'
|
84
|
+
require_relative 'strava/api/endpoints/segments'
|
85
|
+
require_relative 'strava/api/endpoints/streams'
|
86
|
+
require_relative 'strava/api/endpoints/uploads'
|
87
|
+
|
51
88
|
require_relative 'strava/api/client'
|
data/lib/strava/api/client.rb
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
module Strava
|
2
2
|
module Api
|
3
3
|
class Client < Strava::Web::Client
|
4
|
+
include Endpoints::Activities
|
5
|
+
include Endpoints::Athletes
|
6
|
+
include Endpoints::Clubs
|
7
|
+
include Endpoints::Gears
|
8
|
+
include Endpoints::Routes
|
9
|
+
include Endpoints::RunningRaces
|
10
|
+
include Endpoints::SegmentEfforts
|
11
|
+
include Endpoints::Segments
|
12
|
+
include Endpoints::Streams
|
13
|
+
include Endpoints::Uploads
|
14
|
+
|
4
15
|
attr_accessor(*Config::ATTRIBUTES)
|
5
16
|
|
6
17
|
def initialize(options = {})
|
@@ -14,147 +25,6 @@ module Strava
|
|
14
25
|
{ 'Authorization' => "Bearer #{access_token}" }
|
15
26
|
end
|
16
27
|
|
17
|
-
#
|
18
|
-
# Get logged-in athlete.
|
19
|
-
#
|
20
|
-
def athlete
|
21
|
-
Strava::Models::Athlete.new(get('athlete'))
|
22
|
-
end
|
23
|
-
|
24
|
-
#
|
25
|
-
# Get logged-in athlete.
|
26
|
-
#
|
27
|
-
def activity(options = {})
|
28
|
-
throw ArgumentError.new('Required argument :id missing') if options[:id].nil?
|
29
|
-
Strava::Models::Activity.new(get("activities/#{options[:id]}", options.except(:id)))
|
30
|
-
end
|
31
|
-
|
32
|
-
#
|
33
|
-
# List logged-in athlete activities.
|
34
|
-
#
|
35
|
-
# @option options [Integer] :before
|
36
|
-
# An epoch timestamp to use for filtering activities that have taken place before a certain time.
|
37
|
-
# @option options [Integer] :after
|
38
|
-
# An epoch timestamp to use for filtering activities that have taken place after a certain time.
|
39
|
-
# @option options [Integer] :page
|
40
|
-
# Page number.
|
41
|
-
# @option options [Integer] :per_page
|
42
|
-
# Number of items per page. Defaults to 30.
|
43
|
-
#
|
44
|
-
def athlete_activities(options = {}, &block)
|
45
|
-
paginate 'athlete/activities', options, Strava::Models::Activity, &block
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
# Create an activity.
|
50
|
-
#
|
51
|
-
def create_activity(options = {})
|
52
|
-
Strava::Models::Activity.new(post('activities', options))
|
53
|
-
end
|
54
|
-
|
55
|
-
#
|
56
|
-
# Update an activity.
|
57
|
-
# @option options [Boolean] :commute
|
58
|
-
# Whether this activity is a commute.
|
59
|
-
# @option options [Boolean] :trainer
|
60
|
-
# Whether this activity was recorded on a training machine.
|
61
|
-
# @option options [String] :description
|
62
|
-
# The description of the activity.
|
63
|
-
# @option options [String] :name
|
64
|
-
# The name of the activity.
|
65
|
-
# @option options [String] :type
|
66
|
-
# Activity type.
|
67
|
-
# @option options [String] :gear_id
|
68
|
-
# Identifier for the gear associated with the activity. Specifying "none" clears gear from activity.
|
69
|
-
#
|
70
|
-
def update_activity(options = {})
|
71
|
-
throw ArgumentError.new('Required argument :id missing') if options[:id].nil?
|
72
|
-
Strava::Models::Activity.new(put("activities/#{options[:id]}", options.except(:id)))
|
73
|
-
end
|
74
|
-
|
75
|
-
#
|
76
|
-
# List logged-in athlete clubs.
|
77
|
-
#
|
78
|
-
# @option options [Integer] :page
|
79
|
-
# Page number.
|
80
|
-
# @option options [Integer] :per_page
|
81
|
-
# Number of items per page. Defaults to 30.
|
82
|
-
#
|
83
|
-
def athlete_clubs(options = {}, &block)
|
84
|
-
paginate 'athlete/clubs', options, Strava::Models::Club, &block
|
85
|
-
end
|
86
|
-
|
87
|
-
#
|
88
|
-
# List club activities.
|
89
|
-
#
|
90
|
-
# @option options [String] :id
|
91
|
-
# Club id.
|
92
|
-
# @option options [Integer] :page
|
93
|
-
# Page number.
|
94
|
-
# @option options [Integer] :per_page
|
95
|
-
# Number of items per page. Defaults to 30.
|
96
|
-
#
|
97
|
-
def club_activities(options = {}, &block)
|
98
|
-
throw ArgumentError.new('Required argument :id missing') if options[:id].nil?
|
99
|
-
paginate "clubs/#{options[:id]}/activities", options.except(:id), Strava::Models::Activity, &block
|
100
|
-
end
|
101
|
-
|
102
|
-
#
|
103
|
-
# List activity comments.
|
104
|
-
#
|
105
|
-
# @option options [String] :id
|
106
|
-
# Activity id.
|
107
|
-
# @option options [Integer] :page
|
108
|
-
# Page number.
|
109
|
-
# @option options [Integer] :per_page
|
110
|
-
# Number of items per page. Defaults to 30.
|
111
|
-
#
|
112
|
-
def activity_comments(options = {}, &block)
|
113
|
-
throw ArgumentError.new('Required argument :id missing') if options[:id].nil?
|
114
|
-
paginate "activities/#{options[:id]}/comments", options.except(:id), Strava::Models::Comment, &block
|
115
|
-
end
|
116
|
-
|
117
|
-
#
|
118
|
-
# List activity kudoers.
|
119
|
-
#
|
120
|
-
# @option options [String] :id
|
121
|
-
# Activity id.
|
122
|
-
# @option options [Integer] :page
|
123
|
-
# Page number.
|
124
|
-
# @option options [Integer] :per_page
|
125
|
-
# Number of items per page. Defaults to 30.
|
126
|
-
#
|
127
|
-
def activity_kudos(options = {}, &block)
|
128
|
-
throw ArgumentError.new('Required argument :id missing') if options[:id].nil?
|
129
|
-
paginate "activities/#{options[:id]}/kudos", options.except(:id), Strava::Models::Athlete, &block
|
130
|
-
end
|
131
|
-
|
132
|
-
#
|
133
|
-
# Get activity zones.
|
134
|
-
#
|
135
|
-
# @option options [String] :id
|
136
|
-
# Activity id.
|
137
|
-
#
|
138
|
-
def activity_zones(options = {})
|
139
|
-
throw ArgumentError.new('Required argument :id missing') if options[:id].nil?
|
140
|
-
get("activities/#{options[:id]}/zones", options).map do |row|
|
141
|
-
Strava::Models::ActivityZone.new(row)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
#
|
146
|
-
# Get activity laps.
|
147
|
-
#
|
148
|
-
# @option options [String] :id
|
149
|
-
# Activity id.
|
150
|
-
#
|
151
|
-
def activity_laps(options = {})
|
152
|
-
throw ArgumentError.new('Required argument :id missing') if options[:id].nil?
|
153
|
-
get("activities/#{options[:id]}/laps", options).map do |row|
|
154
|
-
Strava::Models::Lap.new(row)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
28
|
class << self
|
159
29
|
def configure
|
160
30
|
block_given? ? yield(Config) : Config
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module Strava
|
2
|
+
module Api
|
3
|
+
module Endpoints
|
4
|
+
module Activities
|
5
|
+
#
|
6
|
+
# Create an activity.
|
7
|
+
#
|
8
|
+
def create_activity(options = {})
|
9
|
+
Strava::Models::Activity.new(post('activities', options))
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# Get activity.
|
14
|
+
#
|
15
|
+
# @option options [String] :id
|
16
|
+
# Activity id.
|
17
|
+
#
|
18
|
+
def activity(id_or_options, options = {})
|
19
|
+
id, options = parse_args(id_or_options, options)
|
20
|
+
Strava::Models::Activity.new(get("activities/#{id}", options))
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
# List activity comments.
|
25
|
+
#
|
26
|
+
# @option options [String] :id
|
27
|
+
# Activity id.
|
28
|
+
# @option options [Integer] :page
|
29
|
+
# Page number.
|
30
|
+
# @option options [Integer] :per_page
|
31
|
+
# Number of items per page. Defaults to 30.
|
32
|
+
#
|
33
|
+
def activity_comments(id_or_options, options = {}, &block)
|
34
|
+
id, options = parse_args(id_or_options, options)
|
35
|
+
paginate "activities/#{id}/comments", options, Strava::Models::Comment, &block
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# List activity kudoers.
|
40
|
+
#
|
41
|
+
# @option options [String] :id
|
42
|
+
# Activity id.
|
43
|
+
# @option options [Integer] :page
|
44
|
+
# Page number.
|
45
|
+
# @option options [Integer] :per_page
|
46
|
+
# Number of items per page. Defaults to 30.
|
47
|
+
#
|
48
|
+
def activity_kudos(id_or_options, options = {}, &block)
|
49
|
+
id, options = parse_args(id_or_options, options)
|
50
|
+
paginate "activities/#{id}/kudos", options, Strava::Models::Athlete, &block
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Get activity laps.
|
55
|
+
#
|
56
|
+
# @option options [String] :id
|
57
|
+
# Activity id.
|
58
|
+
#
|
59
|
+
def activity_laps(id_or_options, options = {})
|
60
|
+
id, options = parse_args(id_or_options, options)
|
61
|
+
get("activities/#{id}/laps", options).map do |row|
|
62
|
+
Strava::Models::Lap.new(row)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# List logged-in athlete activities.
|
68
|
+
#
|
69
|
+
# @option options [Integer] :before
|
70
|
+
# An epoch timestamp to use for filtering activities that have taken place before a certain time.
|
71
|
+
# @option options [Integer] :after
|
72
|
+
# An epoch timestamp to use for filtering activities that have taken place after a certain time.
|
73
|
+
# @option options [Integer] :page
|
74
|
+
# Page number.
|
75
|
+
# @option options [Integer] :per_page
|
76
|
+
# Number of items per page. Defaults to 30.
|
77
|
+
#
|
78
|
+
def athlete_activities(options = {}, &block)
|
79
|
+
paginate 'athlete/activities', options, Strava::Models::Activity, &block
|
80
|
+
end
|
81
|
+
|
82
|
+
#
|
83
|
+
# Get activity zones.
|
84
|
+
#
|
85
|
+
# @option options [String] :id
|
86
|
+
# Activity id.
|
87
|
+
#
|
88
|
+
def activity_zones(id_or_options, options = {})
|
89
|
+
id, options = parse_args(id_or_options, options)
|
90
|
+
get("activities/#{id}/zones", options).map do |row|
|
91
|
+
Strava::Models::ActivityZone.new(row)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
#
|
96
|
+
# Update an activity.
|
97
|
+
#
|
98
|
+
# @option options [String] :id
|
99
|
+
# Activity id.
|
100
|
+
# @option options [Boolean] :commute
|
101
|
+
# Whether this activity is a commute.
|
102
|
+
# @option options [Boolean] :trainer
|
103
|
+
# Whether this activity was recorded on a training machine.
|
104
|
+
# @option options [String] :description
|
105
|
+
# The description of the activity.
|
106
|
+
# @option options [String] :name
|
107
|
+
# The name of the activity.
|
108
|
+
# @option options [String] :type
|
109
|
+
# Activity type.
|
110
|
+
# @option options [String] :gear_id
|
111
|
+
# Identifier for the gear associated with the activity. Specifying "none" clears gear from activity.
|
112
|
+
#
|
113
|
+
def update_activity(id_or_options, options = {})
|
114
|
+
id, options = parse_args(id_or_options, options)
|
115
|
+
Strava::Models::Activity.new(put("activities/#{id}", options))
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Strava
|
2
|
+
module Api
|
3
|
+
module Endpoints
|
4
|
+
module Athletes
|
5
|
+
#
|
6
|
+
# Returns the currently authenticated athlete.
|
7
|
+
#
|
8
|
+
def athlete
|
9
|
+
Strava::Models::Athlete.new(get('athlete'))
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# Returns the the authenticated athlete's heart rate and power zones.
|
14
|
+
#
|
15
|
+
def athlete_zones(options = {})
|
16
|
+
Strava::Models::Zones.new(get('athlete/zones', options))
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# Returns the activity stats of an athlete.
|
21
|
+
#
|
22
|
+
# @option options [String] :id
|
23
|
+
# Athlete id.
|
24
|
+
#
|
25
|
+
def athlete_stats(id_or_options, options = {})
|
26
|
+
id, options = parse_args(id_or_options, options)
|
27
|
+
Strava::Models::ActivityStats.new(get("athletes/#{id}/stats", options))
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
# Update the currently authenticated athlete.
|
32
|
+
#
|
33
|
+
# @option options [Float] :weight
|
34
|
+
# The weight of the athlete in kilograms.
|
35
|
+
#
|
36
|
+
def update_athlete(options = {})
|
37
|
+
Strava::Models::Athlete.new(put('athlete', options))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Strava
|
2
|
+
module Api
|
3
|
+
module Endpoints
|
4
|
+
module Clubs
|
5
|
+
#
|
6
|
+
# List club activities.
|
7
|
+
#
|
8
|
+
# @option options [String] :id
|
9
|
+
# Club id.
|
10
|
+
# @option options [Integer] :page
|
11
|
+
# Page number.
|
12
|
+
# @option options [Integer] :per_page
|
13
|
+
# Number of items per page. Defaults to 30.
|
14
|
+
#
|
15
|
+
def club_activities(id_or_options, options = {}, &block)
|
16
|
+
id, options = parse_args(id_or_options, options)
|
17
|
+
paginate "clubs/#{id}/activities", options, Strava::Models::Activity, &block
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# List club administrators.
|
22
|
+
#
|
23
|
+
# @option options [String] :id
|
24
|
+
# Club id.
|
25
|
+
# @option options [Integer] :page
|
26
|
+
# Page number.
|
27
|
+
# @option options [Integer] :per_page
|
28
|
+
# Number of items per page. Defaults to 30.
|
29
|
+
#
|
30
|
+
def club_admins(id_or_options, options = {}, &block)
|
31
|
+
id, options = parse_args(id_or_options, options)
|
32
|
+
paginate "clubs/#{id}/admins", options, Strava::Models::ClubAdmin, &block
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Get club.
|
37
|
+
#
|
38
|
+
# @option options [String] :id
|
39
|
+
# Club id.
|
40
|
+
#
|
41
|
+
def club(id_or_options, options = {})
|
42
|
+
id, options = parse_args(id_or_options, options)
|
43
|
+
Strava::Models::Club.new(get("clubs/#{id}", options))
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# List club members.
|
48
|
+
#
|
49
|
+
# @option options [String] :id
|
50
|
+
# Club id.
|
51
|
+
# @option options [Integer] :page
|
52
|
+
# Page number.
|
53
|
+
# @option options [Integer] :per_page
|
54
|
+
# Number of items per page. Defaults to 30.
|
55
|
+
#
|
56
|
+
def club_members(id_or_options, options = {}, &block)
|
57
|
+
id, options = parse_args(id_or_options, options)
|
58
|
+
paginate "clubs/#{id}/members", options, Strava::Models::ClubMember, &block
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
# List logged-in athlete clubs.
|
63
|
+
#
|
64
|
+
# @option options [Integer] :page
|
65
|
+
# Page number.
|
66
|
+
# @option options [Integer] :per_page
|
67
|
+
# Number of items per page. Defaults to 30.
|
68
|
+
#
|
69
|
+
def athlete_clubs(options = {}, &block)
|
70
|
+
paginate 'athlete/clubs', options, Strava::Models::Club, &block
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|