opta_sd 1.0.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 (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +3 -0
  4. data/Gemfile +22 -0
  5. data/Gemfile.lock +63 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +400 -0
  8. data/Rakefile +1 -0
  9. data/config/opta_sd.yml +2 -0
  10. data/config/parameters.yml +74 -0
  11. data/errors.yml +21 -0
  12. data/lib/opta_sd.rb +42 -0
  13. data/lib/opta_sd/core.rb +119 -0
  14. data/lib/opta_sd/error.rb +31 -0
  15. data/lib/opta_sd/soccer/commentary.rb +21 -0
  16. data/lib/opta_sd/soccer/match.rb +20 -0
  17. data/lib/opta_sd/soccer/match_event.rb +13 -0
  18. data/lib/opta_sd/soccer/match_facts.rb +14 -0
  19. data/lib/opta_sd/soccer/match_preview.rb +14 -0
  20. data/lib/opta_sd/soccer/match_statistics.rb +14 -0
  21. data/lib/opta_sd/soccer/pass_matrix.rb +14 -0
  22. data/lib/opta_sd/soccer/player_career.rb +15 -0
  23. data/lib/opta_sd/soccer/possession.rb +13 -0
  24. data/lib/opta_sd/soccer/rankings.rb +14 -0
  25. data/lib/opta_sd/soccer/seasonal_stats.rb +14 -0
  26. data/lib/opta_sd/soccer/soccer.rb +19 -0
  27. data/lib/opta_sd/soccer/squads.rb +14 -0
  28. data/lib/opta_sd/soccer/team_standings.rb +22 -0
  29. data/lib/opta_sd/soccer/tournament_calendar.rb +24 -0
  30. data/lib/opta_sd/soccer/tournament_schedule.rb +14 -0
  31. data/lib/opta_sd/version.rb +3 -0
  32. data/opta_sd.gemspec +27 -0
  33. data/spec/commentary_spec.rb +39 -0
  34. data/spec/match_event_spec.rb +26 -0
  35. data/spec/match_facts_spec.rb +14 -0
  36. data/spec/match_preview_spec.rb +15 -0
  37. data/spec/match_spec.rb +32 -0
  38. data/spec/match_statistics_spec.rb +43 -0
  39. data/spec/pass_matrix_spec.rb +27 -0
  40. data/spec/player_career_spec.rb +38 -0
  41. data/spec/possession_spec.rb +23 -0
  42. data/spec/rankings_spec.rb +14 -0
  43. data/spec/seasonal_stats_spec.rb +26 -0
  44. data/spec/spec_helper.rb +15 -0
  45. data/spec/squads.rb +40 -0
  46. data/spec/team_standings_spec.rb +61 -0
  47. data/spec/tournament_schedule_spec.rb +13 -0
  48. data/spec/tournament_spec.rb +48 -0
  49. metadata +169 -0
@@ -0,0 +1,14 @@
1
+ module OptaSD
2
+ module Soccer
3
+ class Rankings < OptaSD::Soccer::SoccerCore
4
+
5
+ resource_params 'rankings', :tournament
6
+
7
+ def initialize
8
+ super
9
+ @feed_name = 'rankings'
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module OptaSD
2
+ module Soccer
3
+ class SeasonalStats < OptaSD::Soccer::SoccerCore
4
+
5
+ resource_params 'seasonstats', :tournament, :contestant, :competition
6
+
7
+ def initialize
8
+ super
9
+ @feed_name = 'seasonstats'
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ module OptaSD
2
+ module Soccer
3
+ class SoccerCore < OptaSD::Core
4
+
5
+ attr_accessor :params, :data
6
+
7
+ def initialize
8
+ super
9
+ @sport = 'soccerdata'
10
+ end
11
+
12
+ def resource(resource_id)
13
+ @resource = resource_id
14
+ self
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ module OptaSD
2
+ module Soccer
3
+ class Squads < OptaSD::Soccer::SoccerCore
4
+
5
+ boolean_params 'squads', :people, :detailed
6
+ resource_params 'squads', :tournament, :contestant
7
+
8
+ def initialize
9
+ super
10
+ @feed_name = 'squads'
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ module OptaSD
2
+ module Soccer
3
+ class TeamStandings < OptaSD::Soccer::SoccerCore
4
+
5
+ boolean_params 'standings', :live
6
+ resource_params 'standings', :stage, :tournament, :type
7
+
8
+ def initialize
9
+ super
10
+ @feed_name = 'standings'
11
+ end
12
+
13
+ %w(total home away form-total form-home form-away).each do |type_value|
14
+ define_method type_value.gsub('-','_') do
15
+ self.type(type_value)
16
+ self
17
+ end
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ module OptaSD
2
+ module Soccer
3
+ class TournamentCalendar < OptaSD::Soccer::SoccerCore
4
+
5
+ resource_params 'tournamentcalendar', :competition
6
+
7
+ def initialize
8
+ super
9
+ @feed_name = 'tournamentcalendar'
10
+ end
11
+
12
+ def active
13
+ @resource = @resource ? @resource + '/active' : 'active'
14
+ self
15
+ end
16
+
17
+ def authorized
18
+ @resource = @resource ? @resource + '/authorized' : 'authorized'
19
+ self
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ module OptaSD
2
+ module Soccer
3
+ class TournamentSchedule < OptaSD::Soccer::SoccerCore
4
+
5
+ resource_params 'tournamentschedule', :tournament
6
+
7
+ def initialize
8
+ super
9
+ @feed_name = 'tournamentschedule'
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module OptaSD
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,27 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require "opta_sd/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = "opta_sd"
9
+ s.version = OptaSD::VERSION
10
+ s.authors = ["Ali Al-Sheiba"]
11
+ s.email = ["ali.alsheiba@gmail.com"]
12
+ s.homepage = "https://github.com/ali-sheiba/opta_sd"
13
+ s.summary = "Opta Sports Data Soccer API."
14
+ s.description = "OPTA SD is a library to Integrate and Utilize Opta Sports Data Apis."
15
+ s.license = "MIT"
16
+
17
+ s.files = Dir["{config,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]
18
+ s.files = `git ls-files -z`.split("\x0")
19
+ s.executables = s.files.grep(%r{^bin\/}) { |f| File.basename(f) }
20
+ s.test_files = s.files.grep(%r{^(test|spec|features)\/})
21
+ s.require_paths = ['lib']
22
+
23
+ s.add_development_dependency "bundler"
24
+ s.add_development_dependency "rspec", '~> 3.5'
25
+ s.add_dependency "nokogiri", '~> 1.7', '>= 1.7.0.1'
26
+ s.add_dependency "json"
27
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::Commentary do
4
+
5
+ before do
6
+ @valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
7
+ end
8
+
9
+ it "gets all commentary" do
10
+ match = OptaSD::Soccer::Commentary.new.resource(@valid_match_id).get
11
+
12
+ expect(match.data).to include("message")
13
+ end
14
+
15
+ it "build commentary with type manual" do
16
+ match = OptaSD::Soccer::Commentary.new.resource(@valid_match_id).manual.get
17
+
18
+ url = match.send(:build_uri).to_s
19
+ expect(url).to include('type=manual')
20
+ expect(match.data).to include("message")
21
+ end
22
+
23
+ it "build commentary with type fallback" do
24
+ match = OptaSD::Soccer::Commentary.new.resource(@valid_match_id).fallback.get
25
+
26
+ url = match.send(:build_uri).to_s
27
+ expect(url).to include('type=fallback')
28
+ expect(match.data).to include("message")
29
+ end
30
+
31
+ it "build commentary with type auto" do
32
+ match = OptaSD::Soccer::Commentary.new.resource(@valid_match_id).auto.get
33
+
34
+ url = match.send(:build_uri).to_s
35
+ expect(url).to include('type=auto')
36
+ expect(match.data).to include("message")
37
+ end
38
+
39
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::MatchEvent do
4
+
5
+ before do
6
+ @valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
7
+ end
8
+
9
+ it "get match_event by resource" do
10
+ match = OptaSD::Soccer::MatchEvent.new.resource(@valid_match_id).get
11
+ expect(match.data).to include("matchInfo")
12
+ expect(match.data).to include("liveData")
13
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
14
+ end
15
+
16
+ it "get match_event by fixture" do
17
+ match = OptaSD::Soccer::MatchEvent.new.fixture(@valid_match_id).get
18
+ expect(match.data).to include("matchInfo")
19
+ expect(match.data).to include("liveData")
20
+ expect(match.data['liveData']).to include("matchDetails")
21
+ expect(match.data['liveData']).to include("event")
22
+ expect(match.data['liveData']['event'][0]).to include("qualifier")
23
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
24
+ end
25
+
26
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::MatchFacts do
4
+
5
+ before do
6
+ @valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
7
+ end
8
+
9
+ it "get match_facts by resource" do
10
+ match = OptaSD::Soccer::MatchFacts.new.resource(@valid_match_id).get
11
+ expect(match.data).to include("message")
12
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::MatchPreview do
4
+
5
+ before do
6
+ @valid_match_id = "cndzn1rr227qe4m9ozd6okba6"
7
+ end
8
+
9
+ it "get match_facts by resource" do
10
+ # match = OptaSD::Soccer::MatchPreview.new.resource(@valid_match_id)#.get
11
+ # sdapidocumentation Account not Authorised for this request
12
+ # expect(match.data).to include("message")
13
+ # expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::Match do
4
+
5
+ before do
6
+ @valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
7
+ @invalid_match_id = "invalid_match_id"
8
+ end
9
+
10
+ it "get match by response_id" do
11
+ match = OptaSD::Soccer::Match.new.resource(@valid_match_id).get
12
+
13
+ expect(match.data).to include("matchInfo")
14
+ expect(match.data).to_not include("liveData")
15
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
16
+ end
17
+
18
+ it "get a match details by resource id" do
19
+ match = OptaSD::Soccer::Match.new.resource(@valid_match_id).live.get
20
+
21
+ expect(match.data).to include("matchInfo")
22
+ expect(match.data).to include("liveData")
23
+ end
24
+
25
+ it "raise exceptions" do
26
+ expect{
27
+ match = OptaSD::Soccer::Match.new.resource(@invalid_match_id).get
28
+ }.to raise_error(OptaSD::Error, "User not Authorised") # this message should change once we get valid account
29
+ end
30
+
31
+
32
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::MatchStatistics do
4
+
5
+ before do
6
+ @valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
7
+ end
8
+
9
+ it "get statistics by resource" do
10
+ match = OptaSD::Soccer::MatchStatistics.new.resource(@valid_match_id).get
11
+ expect(match.data).to include("matchInfo")
12
+ expect(match.data).to include("liveData")
13
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
14
+ end
15
+
16
+ it "get statistics by fixture" do
17
+ match = OptaSD::Soccer::MatchStatistics.new.fixture(@valid_match_id).get
18
+
19
+ expect(match.data).to include("liveData")
20
+ expect(match.data['liveData']).to include("matchDetails")
21
+ expect(match.data['liveData']).to include("goal")
22
+ expect(match.data['liveData']).to include("missedPen")
23
+ expect(match.data['liveData']).to include("missedPen")
24
+ expect(match.data['liveData']).to include("card")
25
+ expect(match.data['liveData']).to include("substitute")
26
+ expect(match.data['liveData']).to include("lineUp")
27
+ expect(match.data['liveData']).to include("matchDetailsExtra")
28
+
29
+ expect(match.data).to include("matchInfo")
30
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
31
+ end
32
+
33
+ it "gets detailed statistics" do
34
+ detailed = OptaSD::Soccer::MatchStatistics.new.fixture(@valid_match_id).detailed.get
35
+ not_detailed = OptaSD::Soccer::MatchStatistics.new.fixture(@valid_match_id).get
36
+
37
+ detailed_player = detailed.data['liveData']['lineUp'][0]['player'][0]
38
+ not_detailed_player = not_detailed.data['liveData']['lineUp'][0]['player'][0]
39
+
40
+ expect(detailed_player['stat'].size).to be > not_detailed_player['stat'].size
41
+ end
42
+
43
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::PassMatrix do
4
+
5
+ before do
6
+ @valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
7
+ end
8
+
9
+ it "get pass_matrix by resource" do
10
+ match = OptaSD::Soccer::PassMatrix.new.resource(@valid_match_id).get
11
+ expect(match.data).to include("matchInfo")
12
+ expect(match.data).to include("liveData")
13
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
14
+ end
15
+
16
+ it "get pass_matrix by fixture" do
17
+ match = OptaSD::Soccer::PassMatrix.new.fixture(@valid_match_id).get
18
+
19
+ expect(match.data).to include("liveData")
20
+ player = match.data['liveData']['lineUp'][0]['player'][0]
21
+ expect(player).to include("playerPass")
22
+
23
+ expect(match.data).to include("matchInfo")
24
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
25
+ end
26
+
27
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::PlayerCareer do
4
+
5
+ before do
6
+ @player_uuid = "1c4gmhsc0mfjl2or3oxggg6hh"
7
+ @contestant_id = "apoawtpvac4zqlancmvw4nk4o"
8
+ end
9
+
10
+ it "get player career by resource" do
11
+ match = OptaSD::Soccer::PlayerCareer.new.resource(@player_uuid).get
12
+ expect(match.data).to include("person")
13
+ expect(match.data['person'][0]['id']).to eq(@player_uuid)
14
+ end
15
+
16
+ it "get player career by person params" do
17
+ match = OptaSD::Soccer::PlayerCareer.new.person(@player_uuid).get
18
+ expect(match.data).to include("person")
19
+ expect(match.data['person'][0]['id']).to eq(@player_uuid)
20
+ end
21
+
22
+ it "gets players career of contestant" do
23
+ match = OptaSD::Soccer::PlayerCareer.new.contestant(@contestant_id).get
24
+ expect(match.data).to include("person")
25
+ expect(match.data['person'].count).to be > 1
26
+ end
27
+
28
+ it "gets players career of contestant" do
29
+ active = OptaSD::Soccer::PlayerCareer.new.contestant(@contestant_id).active(true).get
30
+ active_url = active.send(:build_uri).to_s
31
+ expect(active_url).to include("active=yes")
32
+
33
+ inactive = OptaSD::Soccer::PlayerCareer.new.contestant(@contestant_id).active(false).get
34
+ inactive_url = inactive.send(:build_uri).to_s
35
+ expect(inactive_url).to include("active=no")
36
+ end
37
+
38
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::Possession do
4
+
5
+ before do
6
+ @valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
7
+ end
8
+
9
+ it "get possession by resource" do
10
+ match = OptaSD::Soccer::Possession.new.resource(@valid_match_id).get
11
+ expect(match.data).to include("matchInfo")
12
+ expect(match.data).to include("liveData")
13
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
14
+ end
15
+
16
+ it "get possession by fixture" do
17
+ match = OptaSD::Soccer::Possession.new.fixture(@valid_match_id).get
18
+ expect(match.data).to include("matchInfo")
19
+ expect(match.data).to include("liveData")
20
+ expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
21
+ end
22
+
23
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptaSD::Soccer::Rankings do
4
+
5
+ before do
6
+ @tournament_id = "bnni2f2e6ii20b1wmzcsbpj2o"
7
+ end
8
+
9
+ it "get match_facts by resource" do
10
+ ranking = OptaSD::Soccer::Rankings.new.resource(@tournament_id)#.get
11
+ # sdapidocumentation Account not Authorised for this request
12
+ # expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
13
+ end
14
+ end