espn 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +91 -6
  3. data/lib/espn.rb +5 -0
  4. data/lib/espn/arguments.rb +41 -0
  5. data/lib/espn/client.rb +29 -5
  6. data/lib/espn/client/athletes.rb +39 -21
  7. data/lib/espn/client/audio.rb +20 -19
  8. data/lib/espn/client/headlines.rb +58 -27
  9. data/lib/espn/client/medals.rb +8 -0
  10. data/lib/espn/client/notes.rb +31 -21
  11. data/lib/espn/client/now.rb +11 -8
  12. data/lib/espn/client/scores.rb +33 -21
  13. data/lib/espn/client/sports.rb +20 -14
  14. data/lib/espn/client/standings.rb +20 -16
  15. data/lib/espn/client/teams.rb +39 -21
  16. data/lib/espn/client/video.rb +14 -17
  17. data/lib/espn/configuration.rb +29 -12
  18. data/lib/espn/error.rb +15 -3
  19. data/lib/espn/helpers.rb +39 -0
  20. data/lib/espn/mapper.rb +142 -0
  21. data/lib/espn/request.rb +86 -7
  22. data/lib/espn/version.rb +1 -1
  23. data/lib/faraday/response/raise_espn_error.rb +33 -11
  24. data/spec/espn/arguments_spec.rb +76 -0
  25. data/spec/espn/client/athletes_spec.rb +38 -47
  26. data/spec/espn/client/audio_spec.rb +30 -29
  27. data/spec/espn/client/headlines_spec.rb +80 -35
  28. data/spec/espn/client/medals_spec.rb +1 -1
  29. data/spec/espn/client/notes_spec.rb +39 -45
  30. data/spec/espn/client/now_spec.rb +1 -2
  31. data/spec/espn/client/scores_spec.rb +56 -39
  32. data/spec/espn/client/sports_spec.rb +56 -18
  33. data/spec/espn/client/standings_spec.rb +42 -19
  34. data/spec/espn/client/teams_spec.rb +61 -43
  35. data/spec/espn/client/video_spec.rb +9 -13
  36. data/spec/espn/helpers_spec.rb +31 -0
  37. data/spec/espn/mapper_spec.rb +136 -0
  38. data/spec/espn/request_spec.rb +65 -0
  39. data/spec/espn_spec.rb +11 -2
  40. data/spec/faraday/response/raise_espn_error_spec.rb +80 -0
  41. data/spec/responses/athletes.json +51 -0
  42. data/spec/responses/audio.json +101 -0
  43. data/spec/responses/headlines.json +174 -0
  44. data/spec/responses/medals.json +273 -0
  45. data/spec/responses/notes.json +100 -0
  46. data/spec/responses/now.json +44 -0
  47. data/spec/responses/scores.json +209 -0
  48. data/spec/responses/sports.json +164 -0
  49. data/spec/responses/standings.json +2689 -0
  50. data/spec/responses/teams.json +51 -0
  51. data/spec/responses/videos.json +28 -0
  52. data/spec/spec_helper.rb +11 -2
  53. metadata +37 -3
  54. data/lib/espn/connection.rb +0 -32
@@ -1,5 +1,13 @@
1
1
  module ESPN
2
2
  class Client
3
+
4
+ # Public: The mapping to the MEDALS API of the ESPN developer API.
5
+ #
6
+ # Examples
7
+ #
8
+ # class Client
9
+ # include ESPN::Client::Medals
10
+ # end
3
11
  module Medals
4
12
 
5
13
  # Public: Get medal counts and competition from the olympic games.
@@ -1,33 +1,43 @@
1
1
  module ESPN
2
2
  class Client
3
+
4
+ # Public: The mapping to the RESEARCH NOTES API of the ESPN developer API.
5
+ #
6
+ # Examples
7
+ #
8
+ # class Client
9
+ # include ESPN::Client::Notes
10
+ # end
3
11
  module Notes
4
12
 
13
+ # Public: Get a specific note from the ESPN developer API.
14
+ #
15
+ # id - The id of a specific note.
16
+ # opts - Hash options used to refine the selection. You can find a full
17
+ # list of options on the ESPN developer API website (default: {}).
18
+ #
19
+ # Returns a Hashie::Mash.
20
+ def note(id, opts={})
21
+ get("sports/news/notes/#{id}", opts).notes.first
22
+ end
23
+
5
24
  # Public: Get Exclusive factoids produced by ESPN's Stats and Information
6
25
  # Group from the ESPN API.
7
26
  #
8
- # opts - Hash options used to refine the selection (default: {}).
9
- # - :sport - The name of the sport (default: nil).
10
- # - :league - The name of the league (default: nil).
11
- # - :note_id - The id of the note (default: nil).
27
+ # sport - A Symbol or String of the sport (optional).
28
+ # league - A Symbol or String of the league. If a league is passed, but
29
+ # not a sport, an attempt will be made to map the league to a
30
+ # sport (required).
31
+ # opts - Hash options used to refine the selection. If sport and/or
32
+ # league are passed in, they will override the mapped values
33
+ # You can find a full list of options on the ESPN developer API
34
+ # website (default: {}).
12
35
  #
13
36
  # Returns an Array of Hashie::Mash.
14
- def notes(opts={})
15
- url = 'sports'
16
-
17
- unless opts[:sport].to_s.empty?
18
- url += "/#{opts[:sport]}"
19
- unless opts[:league].to_s.empty?
20
- url += "/#{opts[:league]}"
21
- end
22
- end
23
-
24
- url += '/news/notes'
25
-
26
- unless opts[:note_id].to_s.empty?
27
- url += "/#{opts[:note_id]}"
28
- end
29
-
30
- get(url, opts)
37
+ def notes(*args)
38
+ arguments = ESPN::Arguments.new(args)
39
+ pattern = "sports/:sport/:league/news/notes"
40
+ get(pattern, arguments.options).notes
31
41
  end
32
42
 
33
43
  end
@@ -1,21 +1,24 @@
1
1
  module ESPN
2
2
  class Client
3
+
4
+ # Public: The mapping to the ESPN NOW API of the ESPN developer API.
5
+ #
6
+ # Examples
7
+ #
8
+ # class Client
9
+ # include ESPN::Client::Now
10
+ # end
3
11
  module Now
4
12
 
5
13
  # Public: Get stream of the latest content published on ESPN.com.
6
14
  #
7
15
  # opts - Hash options used to refine the selection (default: {}).
8
- # - :method - The type of content to retrieve (default: nil).
16
+ # :method - The type of content to retrieve (default: nil).
9
17
  #
10
18
  # Returns an Array of Hashie::Mash
11
19
  def now(opts={})
12
- url = 'now'
13
-
14
- unless opts[:method].to_s.empty?
15
- url += "/#{opts[:method]}"
16
- end
17
-
18
- get(url, opts)
20
+ pattern = 'now/:method'
21
+ get(pattern, opts).feed
19
22
  end
20
23
 
21
24
  end
@@ -1,32 +1,44 @@
1
1
  module ESPN
2
2
  class Client
3
+
4
+ # Public: The mapping to the SCORES & SCHEDULES API of the ESPN developer
5
+ # API.
6
+ #
7
+ # Examples
8
+ #
9
+ # class Client
10
+ # include ESPN::Client::Scores
11
+ # end
3
12
  module Scores
4
13
 
14
+ # Public: Get the score for a specific event from the ESPN API.
15
+ #
16
+ # id - The id of an event to get the scores for.
17
+ # opts - Hash options used to refine the selection. You can find a full
18
+ # list of options on the ESPN developer API website (default: {}).
19
+ #
20
+ # Returns a Hashie::Mash.
21
+ def score(id, opts={})
22
+ get("sports/events/#{id}", opts).sports.first.leagues.first.events.first
23
+ end
24
+
5
25
  # Public: Get schedule and scores information from the ESPN API.
6
26
  #
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
- # - :event_id - The event to get information about (default: nil).
27
+ # sport - A Symbol or String of the sport (optional).
28
+ # league - A Symbol or String of the league. If a league is passed, but
29
+ # not a sport, an attempt will be made to map the league to a
30
+ # sport (required).
31
+ # opts - Hash options used to refine the selection. If sport and/or
32
+ # league are passed in, they will override the mapped values
33
+ # You can find a full list of options on the ESPN developer API
34
+ # website (default: {}).
35
+ # :id - The id of a specific event (default: nil, optional).
11
36
  #
12
37
  # Returns an Array of Hashie::Mash.
13
- def scores(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 += '/events'
24
-
25
- unless opts[:event_id].to_s.empty?
26
- url += "/#{opts[:event_id]}"
27
- end
28
-
29
- get(url, opts)
38
+ def scores(*args)
39
+ arguments = ESPN::Arguments.new(args)
40
+ pattern = 'sports/:sport/:league/events/:id'
41
+ get(pattern, arguments.options).sports.first.leagues.first.events
30
42
  end
31
43
 
32
44
  end
@@ -1,25 +1,31 @@
1
1
  module ESPN
2
2
  class Client
3
+
4
+ # Public: The mapping to the SPORTS API of the ESPN developer API.
5
+ #
6
+ # Examples
7
+ #
8
+ # class Client
9
+ # include ESPN::Client::Sports
10
+ # end
3
11
  module Sports
4
12
 
5
13
  # Public: Get sports and leagues supported in the ESPN API.
6
14
  #
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).
15
+ # sport - A Symbol or String of the sport (optional).
16
+ # league - A Symbol or String of the league. If a league is passed, but
17
+ # not a sport, an attempt will be made to map the league to a
18
+ # sport (required).
19
+ # opts - Hash options used to refine the selection. If sport and/or
20
+ # league are passed in, they will override the mapped values
21
+ # You can find a full list of options on the ESPN developer API
22
+ # website (default: {}).
10
23
  #
11
24
  # 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)
25
+ def sports(*args)
26
+ arguments = ESPN::Arguments.new(args)
27
+ pattern = 'sports/:sport/:league'
28
+ get(pattern, arguments.options).sports
23
29
  end
24
30
 
25
31
  end
@@ -1,27 +1,31 @@
1
1
  module ESPN
2
2
  class Client
3
+
4
+ # Public: The mapping to the STANDINGS API of the ESPN developer API.
5
+ #
6
+ # Examples
7
+ #
8
+ # class Client
9
+ # include ESPN::Client::Standings
10
+ # end
3
11
  module Standings
4
12
 
5
13
  # Public: Get the latest league and divisional standings from ESPN.
6
14
  #
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).
15
+ # sport - A Symbol or String of the sport (optional).
16
+ # league - A Symbol or String of the league. If a league is passed, but
17
+ # not a sport, an attempt will be made to map the league to a
18
+ # sport (required).
19
+ # opts - Hash options used to refine the selection. If sport and/or
20
+ # league are passed in, they will override the mapped values
21
+ # You can find a full list of options on the ESPN developer API
22
+ # website (default: {}).
10
23
  #
11
24
  # 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
+ def standings(*args)
26
+ arguments = ESPN::Arguments.new(args, {}, [:league])
27
+ pattern = 'sports/:sport/:league/standings'
28
+ get(pattern, arguments.options).sports.first.leagues.first.groups
25
29
  end
26
30
 
27
31
  end
@@ -1,32 +1,50 @@
1
1
  module ESPN
2
2
  class Client
3
+
4
+ # Public: The mapping to the TEAMS API of the ESPN developer API.
5
+ #
6
+ # Examples
7
+ #
8
+ # class Client
9
+ # include ESPN::Client::Teams
10
+ # end
3
11
  module Teams
4
12
 
13
+ # Public: Get a specific team from the ESPN API.
14
+ #
15
+ # id - An id of a team.
16
+ # sport - A Symbol or String of the sport (optional).
17
+ # league - A Symbol or String of the league. If a league is passed, but
18
+ # not a sport, an attempt will be made to map the league to a
19
+ # sport (required).
20
+ # opts - Hash options used to refine the selection. If sport and/or
21
+ # league are passed in, they will override the mapped values
22
+ # You can find a full list of options on the ESPN developer API
23
+ # website (default: {}).
24
+ #
25
+ # Returns a Hashie::Mash.
26
+ def team(id, *args)
27
+ arguments = ESPN::Arguments.new(args, {}, [:league])
28
+ pattern = "sports/:sport/:league/teams/#{id}"
29
+ get(pattern, arguments.options).sports.first.leagues.first.teams.first
30
+ end
31
+
5
32
  # Public: Get sport team stats and information from the ESPN API.
6
33
  #
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).
34
+ # sport - A Symbol or String of the sport (optional).
35
+ # league - A Symbol or String of the league. If a league is passed, but
36
+ # not a sport, an attempt will be made to map the league to a
37
+ # sport (required).
38
+ # opts - Hash options used to refine the selection. If sport and/or
39
+ # league are passed in, they will override the mapped values
40
+ # You can find a full list of options on the ESPN developer API
41
+ # website (default: {}).
11
42
  #
12
43
  # 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)
44
+ def teams(*args)
45
+ arguments = ESPN::Arguments.new(args, {}, [:league])
46
+ pattern = 'sports/:sport/:league/teams'
47
+ get(pattern, arguments.options).sports.first.leagues.first.teams
30
48
  end
31
49
 
32
50
  end
@@ -1,28 +1,25 @@
1
1
  module ESPN
2
2
  class Client
3
+
4
+ # Public: The mapping to the VIDEO API of the ESPN developer API.
5
+ #
6
+ # Examples
7
+ #
8
+ # class Client
9
+ # include ESPN::Client::Video
10
+ # end
3
11
  module Video
4
12
 
5
13
  # Public: Get video clip and channel information from ESPN.
6
14
  #
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).
15
+ # channel_id - The id of a video channel.
16
+ # opts - Hash options used to refine the selection (default: {}).
17
+ # :clip_id - The id of the clip (default: nil).
10
18
  #
11
19
  # 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)
20
+ def videos(channel_id, opts={})
21
+ pattern = "video/channels/#{channel_id}/clips/:clip_id"
22
+ get(pattern, opts).channels
26
23
  end
27
24
 
28
25
  end
@@ -14,9 +14,30 @@ module ESPN
14
14
  module Configuration
15
15
 
16
16
  # Public: Array of all configuration options for an ESPN::Client.
17
- VALID_OPTIONS_KEYS = [:adapter, :api_version, :proxy, :api_key, :timeout,
17
+ VALID_OPTIONS_KEYS = [:adapter, :api_version, :api_key, :proxy, :timeout,
18
18
  :open_timeout, :user_agent].freeze
19
19
 
20
+ # Public: Gets/Sets the Symbol adapter.
21
+ attr_accessor :adapter
22
+
23
+ # Public: Gets/Sets the Fixnum api version.
24
+ attr_accessor :api_version
25
+
26
+ # Public: Gets/Sets the String api key.
27
+ attr_accessor :api_key
28
+
29
+ # Public: Gets/Sets the Fixnum open timeout.
30
+ attr_accessor :open_timeout
31
+
32
+ # Public: Gets/Sets the String proxy.
33
+ attr_accessor :proxy
34
+
35
+ # Public: Gets/Sets the Fixnum timeout.
36
+ attr_accessor :timeout
37
+
38
+ # Public: Gets/Sets the String user agent.
39
+ attr_accessor :user_agent
40
+
20
41
  # Public: The default adapter used for requests.
21
42
  DEFAULT_ADAPTER = Faraday.default_adapter
22
43
 
@@ -29,10 +50,6 @@ module ESPN
29
50
  # Public: The default timeout for HTTP Requests.
30
51
  DEFAULT_TIMEOUT = 10
31
52
 
32
- # Public: Create an attr_accessor for each VALID_OPTIONS_KEYS when this
33
- # module is extended into another.
34
- attr_accessor(*VALID_OPTIONS_KEYS)
35
-
36
53
  # Internal: Hook when this module is extended in another, we call #reset.
37
54
  #
38
55
  # Returns nothing.
@@ -64,13 +81,13 @@ module ESPN
64
81
  #
65
82
  # Returns nothing.
66
83
  def reset
67
- self.adapter = DEFAULT_ADAPTER
68
- self.api_version = DEFAULT_API_VERSION
69
- self.user_agent = DEFAULT_USER_AGENT
70
- self.timeout = DEFAULT_TIMEOUT
71
- self.open_timeout = DEFAULT_TIMEOUT
72
- self.api_key = nil
73
- self.proxy = nil
84
+ self.adapter = DEFAULT_ADAPTER
85
+ self.api_version = DEFAULT_API_VERSION
86
+ self.user_agent = DEFAULT_USER_AGENT
87
+ self.timeout = DEFAULT_TIMEOUT
88
+ self.open_timeout = DEFAULT_TIMEOUT
89
+ self.api_key = nil
90
+ self.proxy = nil
74
91
  end
75
92
  end
76
93
  end