strava-api 0.13.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.
@@ -0,0 +1,166 @@
1
+ require 'helper'
2
+ require 'mocha'
3
+ require 'json'
4
+
5
+ class TestSegments < Test::Unit::TestCase
6
+ def setup
7
+ @s = StravaApi::Base.new
8
+ end
9
+ def test_segments_index
10
+ #curl http://www.strava.com/api/v1/segments?name=hawk%20hill
11
+ api_result = JSON.parse segments_index_json
12
+ api_result.stubs(:parsed_response).returns("")
13
+ StravaApi::Base.stubs(:get).with('/segments', {:query => {:name => 'Hawk Hill'}}).returns(api_result)
14
+
15
+ result = @s.segments('Hawk Hill')
16
+
17
+ assert result.is_a?(Array)
18
+
19
+ result.each do |segment|
20
+ assert segment.is_a?(StravaApi::Segment)
21
+ end
22
+ end
23
+
24
+ def test_segments_index_that_returns_nothing
25
+ #curl http://www.strava.com/api/v1/segments?name=hawk%20hillxxxy
26
+ api_result = JSON.parse '{"segments":[]}'
27
+ api_result.stubs(:parsed_response).returns("")
28
+ StravaApi::Base.stubs(:get).with('/segments', {:query => {:name => 'Hawk Hill98xcasdf'}}).returns(api_result)
29
+
30
+ result = @s.segments('Hawk Hill98xcasdf')
31
+
32
+ assert result.is_a?(Array)
33
+ assert result.empty?
34
+ end
35
+
36
+ def test_segment_show
37
+ #rl http://www.strava.com/api/v1/segments/99243
38
+ api_result = JSON.parse segment_show_json
39
+ api_result.stubs(:parsed_response).returns("")
40
+ StravaApi::Base.stubs(:get).with('/segments/99243', { :query => {} }).returns(api_result)
41
+
42
+ result = @s.segment_show(99243)
43
+
44
+ assert result.is_a?(StravaApi::Segment)
45
+ assert result.name == "Hawk Hill Saddle"
46
+ assert result.id == 99243
47
+ assert result.average_grade == 4.63873
48
+ assert result.climb_category == "4"
49
+ assert result.elevation_gain == 76.553
50
+ assert result.distance == 1771.88
51
+ assert result.elevation_high == 172.694
52
+ assert result.elevation_low == 90.5013
53
+ end
54
+
55
+ def test_segment_efforts_with_invalid_id
56
+ api_result = JSON.parse '{"error":"Invalid segments/0"}'
57
+ api_result.stubs(:parsed_response).returns("")
58
+ StravaApi::Base.stubs(:get).with('/segments/0/efforts', {:query => {}}).returns(api_result)
59
+
60
+ expect_error(StravaApi::InvalidResponseError) { @s.segment_efforts(0) }
61
+
62
+ assert @s.errors.include?("Invalid segments/0")
63
+ end
64
+
65
+ def test_segment_efforts_index
66
+ #curl http://www.strava.com/api/v1/segments/99243/efforts
67
+ #note: cut some out because the response was so long
68
+ api_result = JSON.parse segment_efforts_index_json
69
+ api_result.stubs(:parsed_response).returns("")
70
+ StravaApi::Base.stubs(:get).with('/segments/99243/efforts', {:query => {}}).returns(api_result)
71
+
72
+ result = @s.segment_efforts(99243)
73
+
74
+ assert result.is_a?(Array)
75
+
76
+ result.each do |effort|
77
+ assert effort.is_a?(StravaApi::Effort)
78
+ end
79
+ end
80
+
81
+ def test_segment_efforts_index_by_athlete_id
82
+ #curl http://www.strava.com/api/v1/segments/99243/efforts?athleteId=1377
83
+ api_result = JSON.parse segment_efforts_index_by_athlete_id_json
84
+ api_result.stubs(:parsed_response).returns("")
85
+ StravaApi::Base.stubs(:get).with('/segments/99243/efforts', {:query => {'athleteId' => 1377}}).returns(api_result)
86
+
87
+ result = @s.segment_efforts(99243, {:athlete_id => 1377})
88
+
89
+ assert result.is_a?(Array)
90
+
91
+ result.each do |effort|
92
+ assert effort.is_a?(StravaApi::Effort)
93
+ assert effort.athlete.id == 1377, "#{effort.athlete.id} != 1377"
94
+ end
95
+ end
96
+
97
+ def test_segment_efforts_index_by_athlete_id_and_start_date
98
+ #curl "http://www.strava.com/api/v1/segments/99243/efforts?athleteId=1377&startDate=2010-07-01"
99
+ api_result = JSON.parse segment_efforts_index_by_athlete_id_and_start_date_json
100
+ api_result.stubs(:parsed_response).returns("")
101
+ StravaApi::Base.stubs(:get).with('/segments/99243/efforts', {:query => {'athleteId' => 1377, 'startDate' => Date.civil(2010,7,1)}}).returns(api_result)
102
+
103
+ result = @s.segment_efforts(99243, {:athlete_id => 1377, :start_date => Date.civil(2010,7,1)})
104
+
105
+ assert result.is_a?(Array)
106
+
107
+ result.each do |effort|
108
+ assert effort.is_a?(StravaApi::Effort)
109
+ assert effort.athlete.id == 1377, "#{effort.athlete.id} != 1377"
110
+
111
+ #works with the real api call, but the stub that is just JSON parsing isn't converting times to Time objects
112
+ #assert effort.start_date >= Time.utc(2010,7,1), "#{effort.start_date} < 2010-7-1"
113
+ end
114
+ end
115
+
116
+ def test_segment_efforts_index_by_club_id_and_best
117
+ #using test data for club 15
118
+ #curl http://www.strava.com/api/v1/segments/99243/efforts?clubId=15&best=true
119
+ api_result = JSON.parse segment_efforts_index_by_club_id_and_best_json
120
+ api_result.stubs(:parsed_response).returns("")
121
+ StravaApi::Base.stubs(:get).with('/segments/99243/efforts', {:query => {'clubId' => 15, 'best' => true}}).returns(api_result)
122
+
123
+ result = @s.segment_efforts(99243, {:club_id => 15, :best => true})
124
+
125
+ assert result.is_a?(Array)
126
+
127
+ result.each do |effort|
128
+ assert effort.is_a?(StravaApi::Effort)
129
+ end
130
+
131
+ athletes = result.collect {|e| e.athlete.username}.sort
132
+ i = 0
133
+ while i < athletes.length do
134
+ assert athletes[i] != athletes[i+1], "Problem -- two athletes in the list with the same username"
135
+ i += 1
136
+ end
137
+ end
138
+
139
+ def test_segment_efforts_index_using_offset
140
+ #curl http://www.strava.com/api/v1/segments/99243/efforts
141
+ api_result = JSON.parse segment_efforts_index_using_offset_json
142
+ api_result.stubs(:parsed_response).returns("")
143
+ StravaApi::Base.stubs(:get).with('/segments/99243/efforts', {:query => {}}).returns(api_result)
144
+
145
+ api_result2 = JSON.parse segment_efforts_index_using_offset_50_json
146
+ api_result2.stubs(:parsed_response).returns("")
147
+ StravaApi::Base.stubs(:get).with('/segments/99243/efforts', {:query => {'offset' => 50}}).returns(api_result2)
148
+
149
+ set_1 = @s.segment_efforts(99243)
150
+ set_2 = @s.segment_efforts(99243, :offset => 50)
151
+
152
+ assert set_1.is_a?(Array)
153
+ assert set_2.is_a?(Array)
154
+
155
+ set_1.each {|ride| assert ride.is_a?(StravaApi::Effort)}
156
+ set_2.each {|ride| assert ride.is_a?(StravaApi::Effort)}
157
+
158
+ #but there shouldn't be any overlap
159
+ set_1_ids = set_1.collect(&:id)
160
+ set_2_ids = set_2.collect(&:id)
161
+
162
+ set_1_ids.each do |set_1_id|
163
+ assert !set_2_ids.include?(set_1_id), "Error: #{set_1_id} is included in both sets"
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,36 @@
1
+ require 'helper'
2
+ require 'mocha'
3
+ require 'json'
4
+
5
+ class TestStravaApi < Test::Unit::TestCase
6
+ def setup
7
+ @s = StravaApi::Base.new
8
+ end
9
+
10
+ def test_effort_show
11
+ #curl http://www.strava.com/api/v1/efforts/688432
12
+ api_result = JSON.parse '{"effort":{"ride":{"name":"02/28/10 San Francisco, CA","id":77563},"averageSpeed":14317.7658862876,"startDate":"2010-02-28T18:10:07Z","averageWatts":287.765,"startDateLocal":"2010-02-28T10:10:07Z","maximumSpeed":18894.384,"timeZoneOffset":-8.0,"athlete":{"username":"julianbill","name":"Julian Bill","id":1139},"elevationGain":151.408,"distance":2344.82,"elapsedTime":598,"segment":{"name":"Panoramic to Pan Toll","id":156},"id":688432,"movingTime":598}}'
13
+ api_result.stubs(:parsed_response).returns("")
14
+ StravaApi::Base.stubs(:get).with('/efforts/688432', { :query => {} }).returns(api_result)
15
+
16
+ result = @s.effort_show(688432)
17
+
18
+ assert result.is_a?(StravaApi::Effort)
19
+ assert result.elapsed_time == 598
20
+ assert result.athlete.is_a?(StravaApi::Member)
21
+ assert result.athlete.name == "Julian Bill"
22
+ assert result.average_speed == 14317.7658862876
23
+ assert result.id == 688432
24
+ #assert result.start_date == Time.parse('2010-02-28T18:10:07Z')
25
+ assert result.time_zone_offset == -8.0
26
+ assert result.maximum_speed == 18894.384
27
+ assert result.average_watts == 287.765
28
+ assert result.elevation_gain == 151.408
29
+ assert result.ride.is_a?(StravaApi::Ride)
30
+ assert result.ride.name == "02/28/10 San Francisco, CA"
31
+ assert result.moving_time == 598
32
+ assert result.distance == 2344.82
33
+ assert result.segment.is_a?(StravaApi::Segment)
34
+ assert result.segment.name == "Panoramic to Pan Toll"
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: strava-api
3
+ version: !ruby/object:Gem::Version
4
+ hash: 43
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 13
9
+ - 0
10
+ version: 0.13.0
11
+ platform: ruby
12
+ authors:
13
+ - Steven Chanin
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-04 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: httparty
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 5
30
+ segments:
31
+ - 0
32
+ - 6
33
+ - 1
34
+ version: 0.6.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: mocha
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 43
46
+ segments:
47
+ - 0
48
+ - 9
49
+ - 8
50
+ version: 0.9.8
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ description: Strava (http://www.strava.com/) allows access to it's data via a JSON api. This gem wraps that API an allows you to interact with Ruby classes instead.
54
+ email: schanin@devleverage.com
55
+ executables: []
56
+
57
+ extensions: []
58
+
59
+ extra_rdoc_files:
60
+ - LICENSE
61
+ - README.rdoc
62
+ files:
63
+ - LICENSE
64
+ - README.rdoc
65
+ - Rakefile
66
+ - lib/strava-api.rb
67
+ - lib/strava-api/base.rb
68
+ - lib/strava-api/bike.rb
69
+ - lib/strava-api/club.rb
70
+ - lib/strava-api/clubs.rb
71
+ - lib/strava-api/effort.rb
72
+ - lib/strava-api/efforts.rb
73
+ - lib/strava-api/exceptions.rb
74
+ - lib/strava-api/hash_based_store.rb
75
+ - lib/strava-api/member.rb
76
+ - lib/strava-api/ride.rb
77
+ - lib/strava-api/rides.rb
78
+ - lib/strava-api/segment.rb
79
+ - lib/strava-api/segments.rb
80
+ - test/helper.rb
81
+ - test/test_base.rb
82
+ - test/test_club.rb
83
+ - test/test_clubs.rb
84
+ - test/test_effort.rb
85
+ - test/test_hash_based_store.rb
86
+ - test/test_ride.rb
87
+ - test/test_rides.rb
88
+ - test/test_segment.rb
89
+ - test/test_segments.rb
90
+ - test/test_strava.rb
91
+ has_rdoc: true
92
+ homepage: http://github.com/stevenchanin/strava-api
93
+ licenses: []
94
+
95
+ post_install_message:
96
+ rdoc_options:
97
+ - --charset=UTF-8
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ hash: 3
106
+ segments:
107
+ - 0
108
+ version: "0"
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 3
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ requirements: []
119
+
120
+ rubyforge_project:
121
+ rubygems_version: 1.3.7
122
+ signing_key:
123
+ specification_version: 3
124
+ summary: Provides a Ruby interface to the Strava api
125
+ test_files:
126
+ - test/helper.rb
127
+ - test/test_base.rb
128
+ - test/test_club.rb
129
+ - test/test_clubs.rb
130
+ - test/test_effort.rb
131
+ - test/test_hash_based_store.rb
132
+ - test/test_ride.rb
133
+ - test/test_rides.rb
134
+ - test/test_segment.rb
135
+ - test/test_segments.rb
136
+ - test/test_strava.rb