sportradar-api 0.1.38 → 0.9.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +13 -10
  4. data/Guardfile +7 -0
  5. data/lib/sportradar/api/config.rb +4 -5
  6. data/lib/sportradar/api/content.rb +12 -4
  7. data/lib/sportradar/api/content/article.rb +1 -12
  8. data/lib/sportradar/api/content/article_list.rb +1 -12
  9. data/lib/sportradar/api/data.rb +16 -0
  10. data/lib/sportradar/api/error.rb +5 -2
  11. data/lib/sportradar/api/football/stat_pack.rb +4 -17
  12. data/lib/sportradar/api/football/stat_pack/defense.rb +1 -1
  13. data/lib/sportradar/api/football/stat_pack/extra_points.rb +4 -4
  14. data/lib/sportradar/api/football/stat_pack/passing.rb +1 -1
  15. data/lib/sportradar/api/football/stat_pack/penalties.rb +4 -3
  16. data/lib/sportradar/api/football/stat_pack/rushing.rb +1 -1
  17. data/lib/sportradar/api/images.rb +19 -6
  18. data/lib/sportradar/api/images/asset.rb +2 -26
  19. data/lib/sportradar/api/images/asset_list.rb +1 -12
  20. data/lib/sportradar/api/live_images.rb +5 -1
  21. data/lib/sportradar/api/nfl.rb +73 -17
  22. data/lib/sportradar/api/nfl/changelog.rb +2 -24
  23. data/lib/sportradar/api/nfl/conference.rb +1 -13
  24. data/lib/sportradar/api/nfl/depth_chart.rb +1 -0
  25. data/lib/sportradar/api/nfl/division.rb +1 -13
  26. data/lib/sportradar/api/nfl/drive.rb +2 -20
  27. data/lib/sportradar/api/nfl/franchise.rb +0 -1
  28. data/lib/sportradar/api/nfl/game.rb +14 -14
  29. data/lib/sportradar/api/nfl/game_statistic.rb +73 -15
  30. data/lib/sportradar/api/nfl/hierarchy.rb +3 -30
  31. data/lib/sportradar/api/nfl/league_depth_chart.rb +1 -4
  32. data/lib/sportradar/api/nfl/play.rb +11 -5
  33. data/lib/sportradar/api/nfl/player.rb +6 -10
  34. data/lib/sportradar/api/nfl/position.rb +1 -13
  35. data/lib/sportradar/api/nfl/quarter.rb +1 -6
  36. data/lib/sportradar/api/nfl/scoring.rb +4 -4
  37. data/lib/sportradar/api/nfl/season.rb +4 -44
  38. data/lib/sportradar/api/nfl/team.rb +6 -35
  39. data/lib/sportradar/api/nfl/team_depth_chart.rb +8 -7
  40. data/lib/sportradar/api/nfl/week.rb +1 -14
  41. data/lib/sportradar/api/request.rb +15 -18
  42. data/lib/sportradar/api/soccer.rb +55 -11
  43. data/lib/sportradar/api/soccer/boxscore.rb +1 -12
  44. data/lib/sportradar/api/soccer/category.rb +1 -12
  45. data/lib/sportradar/api/soccer/hierarchy.rb +2 -14
  46. data/lib/sportradar/api/soccer/match.rb +3 -3
  47. data/lib/sportradar/api/soccer/player.rb +4 -31
  48. data/lib/sportradar/api/soccer/ranking.rb +1 -14
  49. data/lib/sportradar/api/soccer/schedule.rb +1 -12
  50. data/lib/sportradar/api/soccer/season.rb +1 -14
  51. data/lib/sportradar/api/soccer/standing.rb +1 -12
  52. data/lib/sportradar/api/soccer/summary.rb +1 -13
  53. data/lib/sportradar/api/soccer/team.rb +4 -3
  54. data/lib/sportradar/api/soccer/tournament.rb +1 -14
  55. data/lib/sportradar/api/soccer/tournament_group.rb +1 -11
  56. data/lib/sportradar/api/version.rb +1 -1
  57. data/sportradar-api.gemspec +2 -0
  58. metadata +17 -3
  59. data/lib/sportradar/api/nfl/stat.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e68c5d56ded6c6b5326249ae1f58e1e072cbe676
4
- data.tar.gz: d9eabd459f9c16ddf6958e8b8830e0e4edd41f1b
3
+ metadata.gz: 7ab71356ca8ef7269e48d33fa48e0e3c3873805f
4
+ data.tar.gz: 735eaa178acfb965fee08b05b605b1feac531163
5
5
  SHA512:
6
- metadata.gz: 8574fb47d121b992b73949d57c2376962c28df1941c9f75a8c7aab90b60a9779ed80f1a41113355957cd4c7ab52c909c75e6f9238b219938fb1f16264b84ed68
7
- data.tar.gz: 9813afb059d56baee69f6f52925f3ecbca6ef254bf970b02e856431268ff0febdbd85e28f39e2366524060291d076f1926bcc6fc096f02cbe52eae0fec0cd4bd
6
+ metadata.gz: 9c7e016ad2c0f78ce88b1eae511749e30a49c3a715fb7384ecc6a48659026bf9a74cc2742942b0ccfa623e22dbb2d25855fc41b062c09ceedd11d03fd4f205e3
7
+ data.tar.gz: 5c406a3ad852e7b30d5db2893820870b6cdfcc3d85e8b9276526eb0639d3a8c26cdbe8dfebb06eaedb8630769758041301a48382d09dfc60b11f810c37e9f710
data/.gitignore CHANGED
@@ -8,6 +8,7 @@
8
8
  /tmp/
9
9
  *.bundle
10
10
  *.so
11
+ *.swp
11
12
  *.o
12
13
  *.a
13
14
  mkmf.log
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.1.38)
4
+ sportradar-api (0.9.0)
5
5
  activesupport
6
6
  httparty (>= 0.14.0)
7
7
 
@@ -14,14 +14,16 @@ GEM
14
14
  minitest (~> 5.1)
15
15
  tzinfo (~> 1.1)
16
16
  addressable (2.4.0)
17
+ codeclimate-test-reporter (0.6.0)
18
+ simplecov (>= 0.7.1, < 1.0.0)
17
19
  coderay (1.1.1)
18
20
  concurrent-ruby (1.0.2)
19
- coveralls (0.8.14)
21
+ coveralls (0.8.15)
20
22
  json (>= 1.8, < 3)
21
23
  simplecov (~> 0.12.0)
22
24
  term-ansicolor (~> 1.3)
23
25
  thor (~> 0.19.1)
24
- tins (~> 1.6.0)
26
+ tins (>= 1.6.0, < 2)
25
27
  crack (0.4.3)
26
28
  safe_yaml (~> 1.0.0)
27
29
  docile (1.1.5)
@@ -38,26 +40,26 @@ GEM
38
40
  shellany (~> 0.0)
39
41
  thor (>= 0.18.1)
40
42
  guard-compat (1.2.1)
41
- guard-minitest (2.4.5)
43
+ guard-minitest (2.4.6)
42
44
  guard-compat (~> 1.2)
43
45
  minitest (>= 3.0)
44
46
  hashdiff (0.3.0)
45
47
  httparty (0.14.0)
46
48
  multi_xml (>= 0.5.2)
47
49
  i18n (0.7.0)
48
- json (1.8.3)
50
+ json (2.0.2)
49
51
  listen (3.1.5)
50
52
  rb-fsevent (~> 0.9, >= 0.9.4)
51
53
  rb-inotify (~> 0.9, >= 0.9.7)
52
54
  ruby_dep (~> 1.2)
53
55
  lumberjack (1.0.10)
54
56
  method_source (0.8.2)
55
- minitest (5.9.0)
57
+ minitest (5.9.1)
56
58
  minitest-focus (1.1.2)
57
59
  minitest (>= 4, < 6)
58
60
  multi_xml (0.5.5)
59
61
  nenv (0.3.0)
60
- notiffany (0.1.0)
62
+ notiffany (0.1.1)
61
63
  nenv (~> 0.1)
62
64
  shellany (~> 0.0)
63
65
  pry (0.10.4)
@@ -68,7 +70,7 @@ GEM
68
70
  rb-fsevent (0.9.7)
69
71
  rb-inotify (0.9.7)
70
72
  ffi (>= 0.5.0)
71
- ruby_dep (1.3.1)
73
+ ruby_dep (1.4.0)
72
74
  safe_yaml (1.0.4)
73
75
  shellany (0.0.1)
74
76
  simplecov (0.12.0)
@@ -77,11 +79,11 @@ GEM
77
79
  simplecov-html (~> 0.10.0)
78
80
  simplecov-html (0.10.0)
79
81
  slop (3.6.0)
80
- term-ansicolor (1.3.2)
82
+ term-ansicolor (1.4.0)
81
83
  tins (~> 1.0)
82
84
  thor (0.19.1)
83
85
  thread_safe (0.3.5)
84
- tins (1.6.0)
86
+ tins (1.12.0)
85
87
  tzinfo (1.2.2)
86
88
  thread_safe (~> 0.1)
87
89
  vcr (3.0.3)
@@ -95,6 +97,7 @@ PLATFORMS
95
97
 
96
98
  DEPENDENCIES
97
99
  bundler (~> 1.12)
100
+ codeclimate-test-reporter
98
101
  coveralls
99
102
  dotenv
100
103
  guard
data/Guardfile ADDED
@@ -0,0 +1,7 @@
1
+ guard :minitest do
2
+ # with Minitest::Unit
3
+ watch(%r{^test/(.*)\/?test_(.*)\.rb$})
4
+ watch(%r{^test/(.*)\/?(.*)_test\.rb$})
5
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
6
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
7
+ end
@@ -14,7 +14,7 @@ module Sportradar
14
14
  end
15
15
 
16
16
  class Config
17
- attr_accessor :api_key, :api_timeout, :use_ssl, :format
17
+ attr_accessor :api_timeout, :use_ssl, :format
18
18
 
19
19
  def initialize
20
20
  @api_key = ENV['API_KEY']
@@ -24,10 +24,9 @@ module Sportradar
24
24
  end
25
25
 
26
26
  def reset
27
- self.api_key = ENV['API_KEY']
28
- self.api_timeout = ENV.fetch('SPORTRADAR_API_TIMEOUT', 15 )
29
- self.use_ssl = ENV.fetch('SPORTRADAR_API_USE_SSL', true)
30
- self.format = ENV.fetch("SPORTRADAR_API_FORMAT", :xml).to_s
27
+ @api_timeout = ENV.fetch('SPORTRADAR_API_TIMEOUT', 15 )
28
+ @use_ssl = ENV.fetch('SPORTRADAR_API_USE_SSL', true)
29
+ @format = ENV.fetch("SPORTRADAR_API_FORMAT", :xml).to_s
31
30
  end
32
31
  end
33
32
  end
@@ -10,16 +10,24 @@ module Sportradar
10
10
  @access_level = access_level
11
11
  end
12
12
 
13
- def news( date = Date.today, content_type = 'all' )
13
+ def news( date = Date.today, content_type: 'all' )
14
14
  raise Sportradar::Api::Error::InvalidType unless allowed_news_types.include? content_type
15
15
  response = get request_url("#{provider }/news/#{date_path(date)}/#{content_type}")
16
- Sportradar::Api::Content::ArticleList.new response["content"] if response.success? && response["content"]
16
+ if response.success? && response["content"]
17
+ Sportradar::Api::Content::ArticleList.new response["content"]
18
+ else
19
+ response
20
+ end
17
21
  end
18
22
 
19
- def analysis( date = Date.today, content_type = 'all' )
23
+ def analysis( date = Date.today, content_type: 'all' )
20
24
  raise Sportradar::Api::Error::InvalidType unless allowed_analysis_types.include? content_type
21
25
  response = get request_url("#{provider }/analysis/#{date_path(date)}/#{content_type}")
22
- Sportradar::Api::Content::ArticleList.new response["content"] if response.success? && response["content"]
26
+ if response.success? && response["content"]
27
+ Sportradar::Api::Content::ArticleList.new response["content"]
28
+ else
29
+ response
30
+ end
23
31
  end
24
32
 
25
33
  private
@@ -16,7 +16,7 @@ module Sportradar
16
16
  @credit = data["credit"]
17
17
  @content = data["content"]["long"] if data["content"] && data["content"]["long"]
18
18
  @provider = OpenStruct.new(data["provider"]) if data["provider"]
19
- set_references
19
+ @references = parse_into_array(selector: response["refs"]["ref"], klass: Sportradar::Api::Content::Reference) if response["refs"] && response["refs"]["ref"]
20
20
  end
21
21
 
22
22
  def transaction?
@@ -27,17 +27,6 @@ module Sportradar
27
27
  injury == 'true'
28
28
  end
29
29
 
30
- private
31
- def set_references
32
- if response["refs"] && response["refs"]["ref"]
33
- if response["refs"]["ref"].is_a?(Array)
34
- @references = response["refs"]["ref"].map {|x| Sportradar::Api::Content::Reference.new x }
35
- elsif response["refs"]["ref"].is_a?(Hash)
36
- @references = [ Sportradar::Api::Content::Reference.new(response["refs"]["ref"]) ]
37
- end
38
- end
39
- end
40
-
41
30
  end
42
31
  end
43
32
  end
@@ -9,18 +9,7 @@ module Sportradar
9
9
  @provider = data["provider"]
10
10
  @start_time = Time.parse(data["start_time"]) if data["start_time"]
11
11
  @end_time = Time.parse(data["end_time"]) if data["end_time"]
12
- set_articles
13
- end
14
-
15
- private
16
- def set_articles
17
- if response["item"]
18
- if response["item"].is_a?(Array)
19
- @articles = response["item"].map {|x| Sportradar::Api::Content::Article.new x }
20
- elsif response["item"].is_a?(Hash)
21
- @articles = [ Sportradar::Api::Content::Article.new(response["item"]) ]
22
- end
23
- end
12
+ @articles = parse_into_array(selector: response["item"], klass: Sportradar::Api::Content::Article) if response["item"]
24
13
  end
25
14
 
26
15
  end
@@ -11,6 +11,22 @@ module Sportradar
11
11
  self.instance_variables.map{|attribute| attribute.to_s.gsub('@', '').to_sym }
12
12
  end
13
13
 
14
+ def parse_into_array(selector: , klass: )
15
+ if selector.is_a?(Array)
16
+ selector.map {|x| klass.new x }
17
+ elsif selector.is_a?(Hash)
18
+ [ klass.new(selector) ]
19
+ end
20
+ end
21
+
22
+ def parse_out_hashes(data_element)
23
+ if data_element && data_element.is_a?(Array)
24
+ data_element.find {|elem| elem.is_a?(Hash) }
25
+ else
26
+ data_element
27
+ end
28
+ end
29
+
14
30
  end
15
31
 
16
32
  end
@@ -15,11 +15,14 @@ module Sportradar
15
15
  attr_reader :message, :code, :response
16
16
 
17
17
  def initialize( code, message, response)
18
- @code = response_code
19
- @message = response_message
18
+ @code = code
19
+ @message = message
20
20
  @response = response
21
21
  end
22
22
 
23
+ def success?
24
+ false
25
+ end
23
26
  end
24
27
  end
25
28
  end
@@ -2,16 +2,13 @@ module Sportradar
2
2
  module Api
3
3
  module Football
4
4
  class StatPack < Data
5
- attr_accessor :response, :player, :name, :id, :position, :yards
5
+ attr_accessor :response, :player, :name, :id, :position, :yards, :players
6
6
 
7
7
  def initialize(data)
8
- @response = data
9
- set_stats
8
+ @response = data || {}
10
9
  @player = Sportradar::Api::Nfl::Player.new(response) if response['name'] # this isn't used yet, and we need to determine a better solution
11
- end
12
-
13
- def players
14
- @players ||= set_players
10
+ @players = parse_into_array(selector: response["player"], klass: Sportradar::Api::Nfl::Player) if response["player"]
11
+ set_stats
15
12
  end
16
13
 
17
14
  private
@@ -20,16 +17,6 @@ module Sportradar
20
17
  raise NotImplementedError, "Please implement `#{self.class}#set_stats`"
21
18
  end
22
19
 
23
- def set_players
24
- if response["player"]
25
- if response["player"].is_a? Hash
26
- @players = [ self.class.new(response["player"]) ]
27
- else
28
- @players = response["player"].map{ |hash| self.class.new(hash) }
29
- end
30
- end
31
- end
32
-
33
20
  end
34
21
  end
35
22
  end
@@ -2,7 +2,7 @@ module Sportradar
2
2
  module Api
3
3
  class Football::StatPack::Defense < Football::StatPack
4
4
  attr_accessor :tackles, :assists, :combined, :sacks, :sack_yards, :interceptions, :passes_defended, :forced_fumbles, :fumble_recoveries, :qb_hits, :tloss, :tloss_yards, :safeties, :sp_tackles, :sp_assists, :sp_forced_fumbles, :sp_fumble_recoveries, :sp_blocks, :misc_tackles, :misc_assists, :misc_forced_fumbles, :misc_fumble_recoveries, :missed_tackles
5
-
5
+
6
6
  def set_stats
7
7
  @tackles = response["tackles"]
8
8
  @assists = response["assists"]
@@ -5,9 +5,9 @@ module Sportradar
5
5
 
6
6
  def set_stats
7
7
  kick_data = response['kicks'] || response
8
- @attempts = kick_response["attempts"]
9
- @made = kick_response["made"]
10
- @blocked = kick_response["blocked"]
8
+ @attempts = kick_data["attempts"]
9
+ @made = kick_data["made"]
10
+ @blocked = kick_data["blocked"]
11
11
  if response['conversions']
12
12
  @pass_attempts = response["pass_attempts"]
13
13
  @pass_successes = response["pass_successes"]
@@ -24,7 +24,7 @@ module Sportradar
24
24
  end
25
25
 
26
26
  # # sample response
27
- # extra_points =
27
+ # extra_points =
28
28
  # {"kicks"=>
29
29
  # {"player"=>
30
30
  # [
@@ -7,7 +7,7 @@ module Sportradar
7
7
  @attempts = response["attempts"]
8
8
  @completions = response["completions"]
9
9
  @cmp_pct = response["cmp_pct"]
10
- # @yards = response["yards"]
10
+ # @yards = response["yards"] # 'yards' is air yards, which does not include sack yardage. air_yards is for college, net_yards for NFL
11
11
  @avg_yards = response["avg_yards"]
12
12
  @sacks = response["sacks"]
13
13
  @sack_yards = response["sack_yards"]
@@ -6,10 +6,11 @@ module Sportradar
6
6
  alias :count :penalties
7
7
 
8
8
  def set_stats
9
- @response = response[1] if response.is_a? Array
10
- @penalties = response['penalties']
11
- @yards = response['yards']
9
+ @response = (response.dig(1) || {}) if response.is_a? Array
10
+ @penalties = response.dig('penalties')
11
+ @yards = response.dig('yards')
12
12
  end
13
+
13
14
  def formatted
14
15
  "#{count}-#{yards}"
15
16
  end
@@ -15,6 +15,6 @@ module Sportradar
15
15
  @redzone_attempts = response["redzone_attempts"]
16
16
  end
17
17
  end
18
-
18
+
19
19
  end
20
20
  end
@@ -18,7 +18,11 @@ module Sportradar
18
18
  else
19
19
  response = get request_url("players/#{image_type}/manifests/all_assets")
20
20
  end
21
- Sportradar::Api::Images::AssetList.new response["assetlist"] if response.success? && response["assetlist"]
21
+ if response.success? && response["assetlist"]
22
+ Sportradar::Api::Images::AssetList.new response["assetlist"]
23
+ else
24
+ response
25
+ end
22
26
  end
23
27
 
24
28
  alias_method :all_players, :player_manifests
@@ -27,14 +31,22 @@ module Sportradar
27
31
  def coach_manifests
28
32
  raise Sportradar::Api::Error::InvalidLeague unless league.nil?
29
33
  response = get request_url("coaches/#{image_type}/manifests/all_assets")
30
- Sportradar::Api::Images::AssetList.new response["assetlist"] if response.success? && response["assetlist"]
34
+ if response.success? && response["assetlist"]
35
+ Sportradar::Api::Images::AssetList.new response["assetlist"]
36
+ else
37
+ response
38
+ end
31
39
  end
32
40
  alias_method :all_coaches, :coach_manifests
33
41
 
34
42
  def venue_manifests
35
43
  raise Sportradar::Api::Error::InvalidLeague unless league.nil?
36
44
  response = get request_url("venues/manifests/all_assets")
37
- Sportradar::Api::Images::AssetList.new response["assetlist"] if response.success? && response["assetlist"]
45
+ if response.success? && response["assetlist"]
46
+ Sportradar::Api::Images::AssetList.new response["assetlist"]
47
+ else
48
+ response
49
+ end
38
50
  end
39
51
  alias_method :all_venues, :venue_manifests
40
52
 
@@ -121,9 +133,10 @@ module Sportradar
121
133
  ['bundesliga', 'epl', 'serie-a', 'la-liga', 'ligue-1']
122
134
  end
123
135
 
124
- def additional_content_sports
125
- ['mlb', 'nba', 'nfl', 'nhl']
126
- end
136
+ # Was going to use this to prevent access to venues/coaches for sports that aren't this
137
+ # def additional_content_sports
138
+ # ['mlb', 'nba', 'nfl', 'nhl']
139
+ # end
127
140
 
128
141
  end
129
142
  end
@@ -12,34 +12,10 @@ module Sportradar
12
12
  @title = data["title"]
13
13
  @description = data["description"]
14
14
  @copyright = data["copyright"]
15
-
16
- set_links
17
- set_tags
18
- end
19
-
20
- private
21
-
22
- def set_links
23
- if response["links"] && response["links"]["link"]
24
- if response["links"]["link"].is_a?(Array)
25
- @links = response["links"]["link"].map {|x| Sportradar::Api::Images::Link.new x }
26
- elsif response["links"]["link"].is_a?(Hash)
27
- @links = [ Sportradar::Api::Images::Link.new(response["links"]["link"]) ]
28
- end
29
- end
15
+ @links = parse_into_array(selector: response["links"]["link"], klass: Sportradar::Api::Images::Link) if response["links"] && response["links"]["link"]
16
+ @tags = parse_into_array(selector: response["tags"]["tag"], klass: Sportradar::Api::Images::Tag) if response["tags"] && response["tags"]["tag"]
30
17
  end
31
18
 
32
- def set_tags
33
- if response["tags"] && response["tags"]["tag"]
34
- if response["tags"]["tag"].is_a?(Array)
35
- @tags = response["tags"]["tag"].map {|x| Sportradar::Api::Images::Tag.new x }
36
- elsif response["tags"]["tag"].is_a?(Hash)
37
- @tags = [ Sportradar::Api::Images::Tag.new(response["tags"]["tag"]) ]
38
- end
39
- end
40
- end
41
-
42
-
43
19
  end
44
20
  end
45
21
  end