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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11a19a012550a488244e58258b18d9ef23877c8e
4
- data.tar.gz: c2faeb46c9cdc2db6d2a67abc34e917a7d3256e2
3
+ metadata.gz: f247035b5b96d133c376d8a8643ca3fa5f309343
4
+ data.tar.gz: 30a45462e9b7238c351e715b7e145794f15925e1
5
5
  SHA512:
6
- metadata.gz: c3097d7332f8427d989dcbdbe006659f72714fa5d99c290df309e85ce9f32bdedb90de9067bad1c7de18c28a3c89a75b53bf20575545cc130f953d2bd27465f6
7
- data.tar.gz: 25b2d67f5a1af759832e706e9681b9ea00d140c594f027e980ced6b6f11b2ee590315720434905b98011bfcec2fb4bb775e9e15c51596bdae85ae12357bea571
6
+ metadata.gz: a799d92f83998fdd7e4ebd76e01ab8a6b7c019ce764df524677532e83062ed8f6430bd4e0b3ba7d2e6477085f77cf78ab885e5180595908a996dd0ec85fddbad
7
+ data.tar.gz: 620a7c806d47335d538e974da3d478eff06f599a90451dae0da0c6409f992b510aa35aaa2f34f9bd22dfb0e8a08153bfbdc549c7a7995e2756d793d1a15cc3bf
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.10.36)
4
+ sportradar-api (0.10.37)
5
5
  activesupport
6
6
  httparty (>= 0.14.0)
7
7
 
@@ -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
- @description = data['description'] if data['description']
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
@@ -269,4 +269,4 @@ t.players.sample
269
269
  res = mlb.get_schedule;
270
270
  g = mlb.games.sort_by(&:scheduled).first
271
271
 
272
-
272
+ portradar::Api::Baseball::Mlb::Hierarchy.new
@@ -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'
@@ -1,5 +1,5 @@
1
1
  module Sportradar
2
2
  module Api
3
- VERSION = "0.10.36"
3
+ VERSION = "0.10.37"
4
4
  end
5
5
  end
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.36
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-16 00:00:00.000000000 Z
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