espn 0.0.2 → 0.1.1
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 +15 -0
- data/LICENSE.md +20 -0
- data/README.md +38 -3
- data/espn.gemspec +6 -2
- data/lib/espn.rb +13 -3
- data/lib/espn/client.rb +34 -7
- data/lib/espn/client/athletes.rb +34 -0
- data/lib/espn/client/audio.rb +37 -0
- data/lib/espn/client/headlines.rb +42 -0
- data/lib/espn/client/medals.rb +16 -0
- data/lib/espn/client/notes.rb +35 -0
- data/lib/espn/client/now.rb +23 -0
- data/lib/espn/client/scores.rb +34 -0
- data/lib/espn/client/sports.rb +16 -8
- data/lib/espn/client/standings.rb +29 -0
- data/lib/espn/client/teams.rb +23 -8
- data/lib/espn/client/video.rb +30 -0
- data/lib/espn/configuration.rb +40 -8
- data/lib/espn/request.rb +8 -0
- data/lib/espn/version.rb +4 -1
- data/spec/espn/client/athletes_spec.rb +73 -0
- data/spec/espn/client/audio_spec.rb +46 -0
- data/spec/espn/client/headlines_spec.rb +64 -0
- data/spec/espn/client/medals_spec.rb +14 -0
- data/spec/espn/client/notes_spec.rb +73 -0
- data/spec/espn/client/now_spec.rb +22 -0
- data/spec/espn/client/scores_spec.rb +73 -0
- data/spec/espn/client/sports_spec.rb +41 -0
- data/spec/espn/client/standings_spec.rb +41 -0
- data/spec/espn/client/teams_spec.rb +73 -0
- data/spec/espn/client/video_spec.rb +30 -0
- data/spec/espn/client_spec.rb +49 -0
- data/spec/espn/configuration_spec.rb +30 -0
- data/spec/espn_spec.rb +31 -0
- data/spec/spec_helper.rb +11 -0
- metadata +62 -39
- data/.gitignore +0 -3
- data/Gemfile +0 -3
- data/Gemfile.lock +0 -65
data/lib/espn/client/sports.rb
CHANGED
@@ -2,16 +2,24 @@ module ESPN
|
|
2
2
|
class Client
|
3
3
|
module Sports
|
4
4
|
|
5
|
-
# Get
|
5
|
+
# Public: Get sports and leagues supported in the ESPN API.
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# opts - Hash options used to refine the selection (default: {}).
|
8
|
+
# - :sport - The name of the sport (default: nil).
|
9
|
+
# - :league - The name of the league (default: nil).
|
8
10
|
#
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
# Returns an Array of Hashie::Mash.
|
12
|
+
def sports(opts={})
|
13
|
+
url = 'sports'
|
14
|
+
|
15
|
+
unless opts[:sport].to_s.empty?
|
16
|
+
url += "/#{opts[:sport]}"
|
17
|
+
unless opts[:league].to_s.empty?
|
18
|
+
url += "/#{opts[:league]}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
get(url, opts)
|
15
23
|
end
|
16
24
|
|
17
25
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module ESPN
|
2
|
+
class Client
|
3
|
+
module Standings
|
4
|
+
|
5
|
+
# Public: Get the latest league and divisional standings from ESPN.
|
6
|
+
#
|
7
|
+
# opts - Hash options used to refine the selection (default: {}).
|
8
|
+
# - :sport - The name of the sport (default: nil).
|
9
|
+
# - :league - The name of the league (default: nil).
|
10
|
+
#
|
11
|
+
# Returns an Array of Hashie::Mash.
|
12
|
+
def standings(opts={})
|
13
|
+
url = 'sports'
|
14
|
+
|
15
|
+
unless opts[:sport].to_s.empty?
|
16
|
+
url += "/#{opts[:sport]}"
|
17
|
+
unless opts[:league].to_s.empty?
|
18
|
+
url += "/#{opts[:league]}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
url += '/standings'
|
23
|
+
|
24
|
+
get(url, opts)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/espn/client/teams.rb
CHANGED
@@ -2,16 +2,31 @@ module ESPN
|
|
2
2
|
class Client
|
3
3
|
module Teams
|
4
4
|
|
5
|
-
# Get
|
5
|
+
# Public: Get sport team stats and information from the ESPN API.
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# opts - Hash options used to refine the selection (default: {}).
|
8
|
+
# - :sport - The name of the sport (default: nil).
|
9
|
+
# - :league - The name of the league (default: nil).
|
10
|
+
# - :team_id - The id of the team (default: nil).
|
8
11
|
#
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
# Returns an Array of Hashie::Mash.
|
13
|
+
def teams(opts={})
|
14
|
+
url = 'sports'
|
15
|
+
|
16
|
+
unless opts[:sport].to_s.empty?
|
17
|
+
url += "/#{opts[:sport]}"
|
18
|
+
unless opts[:league].to_s.empty?
|
19
|
+
url += "/#{opts[:league]}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
url += '/teams'
|
24
|
+
|
25
|
+
unless opts[:team_id].to_s.empty?
|
26
|
+
url += "/#{opts[:team_id]}"
|
27
|
+
end
|
28
|
+
|
29
|
+
get(url, opts)
|
15
30
|
end
|
16
31
|
|
17
32
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module ESPN
|
2
|
+
class Client
|
3
|
+
module Video
|
4
|
+
|
5
|
+
# Public: Get video clip and channel information from ESPN.
|
6
|
+
#
|
7
|
+
# opts - Hash options used to refine the selection (default: {}).
|
8
|
+
# - :category_id - The id of the category (default: nil).
|
9
|
+
# - :clip_id - The id of the clip (default: nil).
|
10
|
+
#
|
11
|
+
# Returns an Array of Hashie::Mash.
|
12
|
+
def video(opts={})
|
13
|
+
url = 'video/channels'
|
14
|
+
|
15
|
+
unless opts[:category_id].to_s.empty?
|
16
|
+
url += "/#{opts[:category_id]}"
|
17
|
+
end
|
18
|
+
|
19
|
+
url += '/clips'
|
20
|
+
|
21
|
+
unless opts[:clip_id].to_s.empty?
|
22
|
+
url += "/#{opts[:clip_id]}"
|
23
|
+
end
|
24
|
+
|
25
|
+
get(url, opts)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/espn/configuration.rb
CHANGED
@@ -2,35 +2,67 @@ require 'faraday'
|
|
2
2
|
require 'espn/version'
|
3
3
|
|
4
4
|
module ESPN
|
5
|
+
|
6
|
+
# Public: All methods useful for configuration. This module should be extended
|
7
|
+
# in the ESPN module, so ESPN can be configured.
|
8
|
+
#
|
9
|
+
# Examples
|
10
|
+
#
|
11
|
+
# module ESPN
|
12
|
+
# extend Configuration
|
13
|
+
# end
|
5
14
|
module Configuration
|
6
|
-
VALID_OPTIONS_KEYS = [
|
7
|
-
:adapter,
|
8
|
-
:api_version,
|
9
|
-
:proxy,
|
10
|
-
:api_key,
|
11
|
-
:timeout,
|
12
|
-
:open_timeout,
|
13
|
-
:user_agent].freeze
|
14
15
|
|
16
|
+
# Public: Array of all configuration options for an ESPN::Client.
|
17
|
+
VALID_OPTIONS_KEYS = [:adapter, :api_version, :proxy, :api_key, :timeout,
|
18
|
+
:open_timeout, :user_agent].freeze
|
19
|
+
|
20
|
+
# Public: The default adapter used for requests.
|
15
21
|
DEFAULT_ADAPTER = Faraday.default_adapter
|
22
|
+
|
23
|
+
# Public: The default API Version.
|
16
24
|
DEFAULT_API_VERSION = 1
|
25
|
+
|
26
|
+
# Public: The default user agent.
|
17
27
|
DEFAULT_USER_AGENT = "ESPN Ruby Gem #{ESPN::VERSION}".freeze
|
28
|
+
|
29
|
+
# Public: The default timeout for HTTP Requests.
|
18
30
|
DEFAULT_TIMEOUT = 10
|
19
31
|
|
32
|
+
# Public: Create an attr_accessor for each VALID_OPTIONS_KEYS when this
|
33
|
+
# module is extended into another.
|
20
34
|
attr_accessor(*VALID_OPTIONS_KEYS)
|
21
35
|
|
36
|
+
# Internal: Hook when this module is extended in another, we call #reset.
|
37
|
+
#
|
38
|
+
# Returns nothing.
|
22
39
|
def self.extended(base)
|
23
40
|
base.reset
|
24
41
|
end
|
25
42
|
|
43
|
+
# Public: The ability to configure ESPN default options.
|
44
|
+
#
|
45
|
+
# Examples
|
46
|
+
#
|
47
|
+
# ESPN.configure do |c|
|
48
|
+
# c.api_key = 'abc123'
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# Yields ESPN::Configuration.
|
26
52
|
def configure
|
27
53
|
yield self
|
28
54
|
end
|
29
55
|
|
56
|
+
# Public: Get all valid options with their defaults.
|
57
|
+
#
|
58
|
+
# Returns a Hash.
|
30
59
|
def options
|
31
60
|
VALID_OPTIONS_KEYS.inject({}){|o,k| o.merge!(k => send(k)) }
|
32
61
|
end
|
33
62
|
|
63
|
+
# Public: Reset all valid options to their defaults.
|
64
|
+
#
|
65
|
+
# Returns nothing.
|
34
66
|
def reset
|
35
67
|
self.adapter = DEFAULT_ADAPTER
|
36
68
|
self.api_version = DEFAULT_API_VERSION
|
data/lib/espn/request.rb
CHANGED
@@ -9,6 +9,14 @@ module ESPN
|
|
9
9
|
private
|
10
10
|
|
11
11
|
def request(method, path, options)
|
12
|
+
|
13
|
+
# TODO: Decide if I want to delete these or not. There is probably
|
14
|
+
# a better way to do this, if so, by filtering them out.
|
15
|
+
%w( sport league method section team_id headline_id category_id clip_id
|
16
|
+
athlete_id event_id note_id podcast_id recording_id ).each do |k|
|
17
|
+
options.delete(k.to_sym)
|
18
|
+
end
|
19
|
+
|
12
20
|
response = connection.send(method) do |request|
|
13
21
|
request.url(path, options)
|
14
22
|
request.options[:timeout] = timeout
|
data/lib/espn/version.rb
CHANGED
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ESPN::Client::Athletes do
|
4
|
+
before do
|
5
|
+
@client = ESPN::Client.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#athletes' do
|
9
|
+
|
10
|
+
it 'gets all athletes' do
|
11
|
+
stub_get('sports/athletes')
|
12
|
+
@client.athletes
|
13
|
+
assert_requested :get, espn_url('sports/athletes')
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with a sport param' do
|
17
|
+
it 'should include the sport in the request' do
|
18
|
+
stub_get('sports/baseball/athletes')
|
19
|
+
@client.athletes(sport: 'baseball')
|
20
|
+
assert_requested :get, espn_url('sports/baseball/athletes')
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with a athlete_id param' do
|
24
|
+
it 'should include the sport and athlete_id params in the request' do
|
25
|
+
stub_get('sports/baseball/athletes/5')
|
26
|
+
@client.athletes(sport: 'baseball', athlete_id: 5)
|
27
|
+
assert_requested :get, espn_url('sports/baseball/athletes/5')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with a sport and a league param' do
|
33
|
+
it 'should include the sport and league params in the request' do
|
34
|
+
stub_get('sports/baseball/mlb/athletes')
|
35
|
+
@client.athletes(sport: 'baseball', league: 'mlb')
|
36
|
+
assert_requested :get, espn_url('sports/baseball/mlb/athletes')
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'with a athlete_id param' do
|
40
|
+
it 'should include the sport, league and athlete_id params' do
|
41
|
+
stub_get('sports/baseball/mlb/athletes/1')
|
42
|
+
@client.athletes(sport: 'baseball', league: 'mlb', athlete_id: 1)
|
43
|
+
assert_requested :get, espn_url('sports/baseball/mlb/athletes/1')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'with a athlete_id param' do
|
49
|
+
it 'should include the athlete_id in the request' do
|
50
|
+
stub_get('sports/athletes/5')
|
51
|
+
@client.athletes(athlete_id: 5)
|
52
|
+
assert_requested :get, espn_url('sports/athletes/5')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with a league param and no sport param' do
|
57
|
+
it 'should not include either in the request' do
|
58
|
+
stub_get('sports/athletes')
|
59
|
+
@client.athletes(league: 'mlb')
|
60
|
+
assert_requested :get, espn_url('sports/athletes')
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'with a athlete_id param' do
|
64
|
+
it 'should include the athlete_id in the request' do
|
65
|
+
stub_get('sports/athletes/2')
|
66
|
+
@client.athletes(league: 'mlb', athlete_id: 2)
|
67
|
+
assert_requested :get, espn_url('sports/athletes/2')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ESPN::Client::Audio do
|
4
|
+
before do
|
5
|
+
@client = ESPN::Client.new
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should get all podcasts' do
|
9
|
+
stub_get('audio/podcasts')
|
10
|
+
@client.audio
|
11
|
+
assert_requested :get, espn_url('audio/podcasts')
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'with a method param' do
|
15
|
+
context 'if method is podcast_recordings' do
|
16
|
+
it 'should include podcasts/recordings in the request' do
|
17
|
+
stub_get('audio/podcasts/recordings')
|
18
|
+
@client.audio(method: 'podcast_recordings')
|
19
|
+
assert_requested :get, espn_url('audio/podcasts/recordings')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should include the method in the request' do
|
24
|
+
stub_get('audio/recordings')
|
25
|
+
@client.audio(method: 'recordings')
|
26
|
+
assert_requested :get, espn_url('audio/recordings')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with a podcast_id param' do
|
31
|
+
it 'should include the podcast_id in the param' do
|
32
|
+
stub_get('audio/podcasts/1')
|
33
|
+
@client.audio(podcast_id: 1)
|
34
|
+
assert_requested :get, espn_url('audio/podcasts/1')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'with a recording_id param' do
|
39
|
+
it 'should include the recording_id in the param' do
|
40
|
+
stub_get('audio/podcasts/2')
|
41
|
+
@client.audio(recording_id: 2)
|
42
|
+
assert_requested :get, espn_url('audio/podcasts/2')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ESPN::Client::Headlines do
|
4
|
+
before do
|
5
|
+
@client = ESPN::Client.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#headlines' do
|
9
|
+
it 'should get headlines for sports by default' do
|
10
|
+
stub_get('sports/news')
|
11
|
+
@client.headlines
|
12
|
+
assert_requested :get, espn_url('sports/news')
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'with a section param' do
|
16
|
+
it 'should get headlines for that section' do
|
17
|
+
stub_get('cities/news')
|
18
|
+
@client.headlines(section: 'cities')
|
19
|
+
assert_requested :get, espn_url('cities/news')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with a sport param' do
|
24
|
+
it 'should include the sport in the request' do
|
25
|
+
stub_get('sports/baseball/news')
|
26
|
+
@client.headlines(sport: 'baseball')
|
27
|
+
assert_requested :get, espn_url('sports/baseball/news')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'with a sport and league param' do
|
32
|
+
it 'should include both params in the request' do
|
33
|
+
stub_get('sports/baseball/mlb/news')
|
34
|
+
@client.headlines(sport: 'baseball', league: 'mlb')
|
35
|
+
assert_requested :get, espn_url('sports/baseball/mlb/news')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'with a league param but no sport param' do
|
40
|
+
it 'should not include the league in the request' do
|
41
|
+
stub_get('sports/news')
|
42
|
+
@client.headlines(league: 'mlb')
|
43
|
+
assert_requested :get, espn_url('sports/news')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'with a method param' do
|
48
|
+
it 'should include the method in the request' do
|
49
|
+
stub_get('sports/news/headlines/top')
|
50
|
+
@client.headlines(method: 'top')
|
51
|
+
assert_requested :get, espn_url('sports/news/headlines/top')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'with a headline_id param' do
|
56
|
+
it 'should include the headline_id in the request' do
|
57
|
+
stub_get('sports/news/5')
|
58
|
+
@client.headlines(headline_id: 5)
|
59
|
+
assert_requested :get, espn_url('sports/news/5')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ESPN::Client::Medals do
|
4
|
+
before do
|
5
|
+
@client = ESPN::Client.new
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should get all medals' do
|
9
|
+
stub_get('sports/olympics/medals')
|
10
|
+
@client.medals
|
11
|
+
assert_requested :get, espn_url('sports/olympics/medals')
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ESPN::Client::Notes do
|
4
|
+
before do
|
5
|
+
@client = ESPN::Client.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#notes' do
|
9
|
+
|
10
|
+
it 'gets all notes' do
|
11
|
+
stub_get('sports/news/notes')
|
12
|
+
@client.notes
|
13
|
+
assert_requested :get, espn_url('sports/news/notes')
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with a sport param' do
|
17
|
+
it 'should include the sport in the request' do
|
18
|
+
stub_get('sports/baseball/news/notes')
|
19
|
+
@client.notes(sport: 'baseball')
|
20
|
+
assert_requested :get, espn_url('sports/baseball/news/notes')
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with a note_id param' do
|
24
|
+
it 'should include the sport and note_id params in the request' do
|
25
|
+
stub_get('sports/baseball/news/notes/5')
|
26
|
+
@client.notes(sport: 'baseball', note_id: 5)
|
27
|
+
assert_requested :get, espn_url('sports/baseball/news/notes/5')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with a sport and a league param' do
|
33
|
+
it 'should include the sport and league params in the request' do
|
34
|
+
stub_get('sports/baseball/mlb/news/notes')
|
35
|
+
@client.notes(sport: 'baseball', league: 'mlb')
|
36
|
+
assert_requested :get, espn_url('sports/baseball/mlb/news/notes')
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'with a note_id param' do
|
40
|
+
it 'should include the sport, league and note_id params' do
|
41
|
+
stub_get('sports/baseball/mlb/news/notes/1')
|
42
|
+
@client.notes(sport: 'baseball', league: 'mlb', note_id: 1)
|
43
|
+
assert_requested :get, espn_url('sports/baseball/mlb/news/notes/1')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'with a note_id param' do
|
49
|
+
it 'should include the note_id in the request' do
|
50
|
+
stub_get('sports/news/notes/5')
|
51
|
+
@client.notes(note_id: 5)
|
52
|
+
assert_requested :get, espn_url('sports/news/notes/5')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with a league param and no sport param' do
|
57
|
+
it 'should not include either in the request' do
|
58
|
+
stub_get('sports/news/notes')
|
59
|
+
@client.notes(league: 'mlb')
|
60
|
+
assert_requested :get, espn_url('sports/news/notes')
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'with a note_id param' do
|
64
|
+
it 'should include the note_id in the request' do
|
65
|
+
stub_get('sports/news/notes/2')
|
66
|
+
@client.notes(league: 'mlb', note_id: 2)
|
67
|
+
assert_requested :get, espn_url('sports/news/notes/2')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|