sportradar-api 0.10.36 → 0.10.37
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/sportradar/api/baseball/events/lineup.rb +6 -4
- data/lib/sportradar/api/baseball/game.rb +6 -1
- data/lib/sportradar/api/baseball/lineup.rb +116 -0
- data/lib/sportradar/api/baseball/mlb/hierarchy.rb +1 -1
- data/lib/sportradar/api/baseball.rb +1 -0
- data/lib/sportradar/api/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f247035b5b96d133c376d8a8643ca3fa5f309343
|
4
|
+
data.tar.gz: 30a45462e9b7238c351e715b7e145794f15925e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a799d92f83998fdd7e4ebd76e01ab8a6b7c019ce764df524677532e83062ed8f6430bd4e0b3ba7d2e6477085f77cf78ab885e5180595908a996dd0ec85fddbad
|
7
|
+
data.tar.gz: 620a7c806d47335d538e974da3d478eff06f599a90451dae0da0c6409f992b510aa35aaa2f34f9bd22dfb0e8a08153bfbdc549c7a7995e2756d793d1a15cc3bf
|
data/Gemfile.lock
CHANGED
@@ -3,10 +3,11 @@ module Sportradar
|
|
3
3
|
module Baseball
|
4
4
|
class Event
|
5
5
|
class Lineup < Data
|
6
|
-
attr_accessor :response, :id, :hitter_id, :outcome, :description, :player_id, :order, :position, :team_id, :last_name, :first_name, :preferred_name, :jersey_number
|
6
|
+
attr_accessor :response, :id, :hitter_id, :outcome, :description, :event, :player_id, :order, :position, :team_id, :last_name, :first_name, :preferred_name, :jersey_number
|
7
7
|
|
8
8
|
def initialize(data, **opts)
|
9
|
-
@response = data
|
9
|
+
# @response = data
|
10
|
+
@event = opts[:event]
|
10
11
|
@id = data["id"]
|
11
12
|
@player_id = data["player_id"]
|
12
13
|
@order = data["order"]
|
@@ -15,13 +16,14 @@ module Sportradar
|
|
15
16
|
@last_name = data["last_name"]
|
16
17
|
@first_name = data["first_name"]
|
17
18
|
@preferred_name = data["preferred_name"]
|
18
|
-
@jersey_number = data["jersey_number"
|
19
|
+
@jersey_number = data["jersey_number"]
|
19
20
|
|
20
21
|
update(data)
|
21
22
|
end
|
22
23
|
|
23
24
|
def update(data, **opts)
|
24
|
-
|
25
|
+
lineup = event.half_inning.inning.game.lineup
|
26
|
+
lineup.update_from_lineup_event(data)
|
25
27
|
end
|
26
28
|
|
27
29
|
def data_key
|
@@ -2,7 +2,7 @@ module Sportradar
|
|
2
2
|
module Api
|
3
3
|
module Baseball
|
4
4
|
class Game < Data
|
5
|
-
attr_accessor :response, :id, :title, :home_id, :away_id, :score, :status, :coverage, :scheduled, :venue, :broadcast, :duration, :attendance, :team_stats, :player_stats, :changes
|
5
|
+
attr_accessor :response, :id, :title, :home_id, :away_id, :score, :status, :coverage, :scheduled, :venue, :broadcast, :duration, :attendance, :team_stats, :player_stats, :changes, :lineup
|
6
6
|
|
7
7
|
attr_reader :inning, :half, :outs, :bases, :pitchers, :final, :rescheduled, :inning_over
|
8
8
|
attr_reader :outcome, :count
|
@@ -19,6 +19,7 @@ module Sportradar
|
|
19
19
|
@team_stats = {}
|
20
20
|
@player_stats = {}
|
21
21
|
@scoring_raw = Scoring.new(data, game: self)
|
22
|
+
@lineup = Lineup.new(data, game: self)
|
22
23
|
@teams_hash = {}
|
23
24
|
@innings_hash = {}
|
24
25
|
@home_runs = nil
|
@@ -34,6 +35,9 @@ module Sportradar
|
|
34
35
|
|
35
36
|
update(data, **opts)
|
36
37
|
end
|
38
|
+
def lineup
|
39
|
+
@lineup ||= Lineup.new({}, game: self)
|
40
|
+
end
|
37
41
|
|
38
42
|
def timeouts
|
39
43
|
{}
|
@@ -127,6 +131,7 @@ module Sportradar
|
|
127
131
|
update_bases(data)
|
128
132
|
parse_pitchers(data) if data['home'] && data['away']
|
129
133
|
|
134
|
+
lineup.update(data, source: source)
|
130
135
|
if data['scoring']
|
131
136
|
parse_score(data['scoring'])
|
132
137
|
elsif data.dig('home', 'hits')
|
@@ -0,0 +1,116 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Baseball
|
4
|
+
class Lineup < Data
|
5
|
+
attr_reader :roster, :home, :away, :game
|
6
|
+
def initialize(data, game: nil)
|
7
|
+
@game = game
|
8
|
+
end
|
9
|
+
|
10
|
+
def update(data, source: nil)
|
11
|
+
case source
|
12
|
+
when :pbp
|
13
|
+
when :summary
|
14
|
+
@roster = (data.dig('home', 'roster') || []) + (data.dig('away', 'roster') || [])
|
15
|
+
return unless data.dig('home', 'lineup') && data.dig('away', 'lineup')
|
16
|
+
@home_team_lineup = data.dig('home', 'lineup')
|
17
|
+
@away_team_lineup = data.dig('away', 'lineup')
|
18
|
+
initialize_home
|
19
|
+
initialize_away
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def update_from_lineup_event(data)
|
24
|
+
if data.dig('lineup', 'team_id') == game.home_id
|
25
|
+
update_home(find_player(data.dig('lineup', 'player_id')), data.dig('lineup', 'order'))
|
26
|
+
elsif data.dig('lineup', 'team_id') == game.away_id
|
27
|
+
update_away(find_player(data.dig('lineup', 'player_id')), data.dig('lineup', 'order'))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def update_home(player, order)
|
32
|
+
return if order == 0
|
33
|
+
idx = home.index do |h|
|
34
|
+
h['order'] == order
|
35
|
+
end
|
36
|
+
home[idx] = { 'order' => order }
|
37
|
+
home[idx].merge!(player)
|
38
|
+
end
|
39
|
+
|
40
|
+
def update_away(player, order)
|
41
|
+
return if order == 0
|
42
|
+
idx = away.index do |h|
|
43
|
+
h['order'] == order
|
44
|
+
end
|
45
|
+
away[idx] = { 'order' => order}
|
46
|
+
away[idx].merge!(player)
|
47
|
+
end
|
48
|
+
|
49
|
+
def find_player(id)
|
50
|
+
roster.detect do |player|
|
51
|
+
player['id'] == id
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def initial_lineup
|
56
|
+
[
|
57
|
+
{ 'order' => 1 },
|
58
|
+
{ 'order' => 2 },
|
59
|
+
{ 'order' => 3 },
|
60
|
+
{ 'order' => 4 },
|
61
|
+
{ 'order' => 5 },
|
62
|
+
{ 'order' => 6 },
|
63
|
+
{ 'order' => 7 },
|
64
|
+
{ 'order' => 8 },
|
65
|
+
{ 'order' => 9 },
|
66
|
+
]
|
67
|
+
end
|
68
|
+
|
69
|
+
def next_batters(team, number_of_upcoming_batters = 3)
|
70
|
+
if team == 'home'
|
71
|
+
last_at_bat = game.at_bats.select{|at_bat| at_bat.event.half_inning.half == 'B'}.last
|
72
|
+
if last_at_bat # first inning
|
73
|
+
last_position = @home_team_lineup.detect{|htl| htl['id'] == last_at_bat.hitter_id}&.dig('order')
|
74
|
+
upcoming = home.rotate(last_position || 0)
|
75
|
+
else
|
76
|
+
upcoming = home
|
77
|
+
end
|
78
|
+
elsif team == 'away'
|
79
|
+
last_at_bat = game.at_bats.select{|at_bat| at_bat.event.half_inning.half == 'T'}.last
|
80
|
+
if last_at_bat # first inning
|
81
|
+
last_position = @away_team_lineup.detect{|atl| atl['id'] == last_at_bat.hitter_id}&.dig('order')
|
82
|
+
upcoming = away.rotate(last_position || 0)
|
83
|
+
else
|
84
|
+
upcoming = away
|
85
|
+
end
|
86
|
+
end
|
87
|
+
upcoming[0..(number_of_upcoming_batters - 1)]
|
88
|
+
rescue => e
|
89
|
+
i ||= 0
|
90
|
+
game.get_summary
|
91
|
+
i += 1
|
92
|
+
retry unless i > 2
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def initialize_away
|
98
|
+
@away = initial_lineup.dup
|
99
|
+
@away_team_lineup.sort_by{|t| t['sequence']}.each do |al|
|
100
|
+
# al.merge!(find_player(al['id']))
|
101
|
+
update_away(find_player(al['id']), al['order'])
|
102
|
+
end.sort_by{|al| al['order']}
|
103
|
+
end
|
104
|
+
|
105
|
+
def initialize_home
|
106
|
+
@home = initial_lineup.dup
|
107
|
+
@home_team_lineup.sort_by{|t| t['sequence']}.each do |hl|
|
108
|
+
# hl.merge!(find_player(hl['id']))
|
109
|
+
update_home(find_player(hl['id']), hl['order'])
|
110
|
+
end.sort_by{|hl| hl['order']}
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -15,6 +15,7 @@ require_relative 'baseball/events/lineup'
|
|
15
15
|
require_relative 'baseball/events/warming_up'
|
16
16
|
require_relative 'baseball/pitch'
|
17
17
|
require_relative 'baseball/player'
|
18
|
+
require_relative 'baseball/lineup'
|
18
19
|
# require_relative 'baseball/broadcast'
|
19
20
|
# require_relative 'baseball/injury'
|
20
21
|
require_relative 'baseball/scoring'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sportradar-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.37
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Eggett
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -251,6 +251,7 @@ files:
|
|
251
251
|
- lib/sportradar/api/baseball/game.rb
|
252
252
|
- lib/sportradar/api/baseball/half_inning.rb
|
253
253
|
- lib/sportradar/api/baseball/inning.rb
|
254
|
+
- lib/sportradar/api/baseball/lineup.rb
|
254
255
|
- lib/sportradar/api/baseball/mlb.rb
|
255
256
|
- lib/sportradar/api/baseball/mlb/division.rb
|
256
257
|
- lib/sportradar/api/baseball/mlb/hierarchy.rb
|