espn 0.1.3 → 0.2.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.
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