module Sportradar module Api module Baseball class Outcome < Data attr_accessor :response, :type, :current_inning, :current_inning_half, :count, :hitter, :pitcher, :runners def initialize(data, **opts) @response = data @api = opts[:api] @game = opts[:game] @scores = {} @id = data['id'] update(data, **opts) end def update(data, source: nil, **opts) update_from_outcome(data['outcome']) if data['outcome'] end def update_from_outcome(data) @type = data['type'] if data['type'] @current_inning = data['current_inning'] if data['current_inning'] @current_inning_half = data['current_inning_half'] if data['current_inning_half'] @count = data['count'] if data['count'] @hitter = data['hitter'] if data['hitter'] @pitcher = data['pitcher'] if data['pitcher'] @runners = data['runners'] if data['runners'] end private def parse_from_pbp(data) scoring = data['innings'].map {|i| i['scoring'] }.compact return {} if scoring.empty? scoring.each_with_object({}).with_index(1) do |(hash, memo), idx| memo[idx] = {hash.dig('home', 'id') => hash.dig('home', 'runs'), hash.dig('away', 'id') => hash.dig('away', 'runs')} end end def parse_from_box(data) id = data.dig('home', 'id') da = data.dig('home', 'scoring') return {} unless da da.each { |h| h[id] = h.delete('runs') } id = data.dig('away', 'id') db = data.dig('away', 'scoring') return {} unless db db.each { |h| h[id] = h.delete('runs') } da.zip(db).map{ |a, b| [a['sequence'].to_i, a.merge(b)] }.sort{ |(a,_), (b,_)| a <=> b }.to_h end def parse_from_summary(data) # end end end end end # inprogress data from daily summary {"id"=>"e1b6d4cc-74f0-4f80-b1d4-d506624d7ba0", "status"=>"inprogress", "coverage"=>"full", "game_number"=>1, "day_night"=>"D", "scheduled"=>"2017-05-04T17:10:00+00:00", "home_team"=>"aa34e0ed-f342-4ec6-b774-c79b47b60e2d", "away_team"=>"27a59d3b-ff7c-48ea-b016-4798f560f5e1", "venue"=>{"id"=>"302f8dcd-eed6-4b83-8609-81548d51e955", "name"=>"Target Field", "market"=>"Minnesota", "capacity"=>39021, "surface"=>"grass", "address"=>"353 N 5th Street", "city"=>"Minneapolis", "state"=>"MN", "zip"=>"55403", "country"=>"USA"}, "broadcast"=>{"network"=>"FS-N"}, "outcome"=> {"type"=>"pitch", "current_inning"=>3, "current_inning_half"=>"B", "count"=>{"strikes"=>2, "balls"=>0, "outs"=>1, "inning"=>3, "inning_half"=>"B", "half_over"=>false}, "hitter"=>{"id"=>"aecc630f-57da-4b23-842b-fd65394e81be", "outcome_id"=>"kF", "ab_over"=>false, "last_name"=>"Sano", "first_name"=>"Miguel", "preferred_name"=>"Miguel", "jersey_number"=>"22"}, "pitcher"=>{"id"=>"c1f19b5a-9dee-4053-9cad-ee4196f921e1", "last_name"=>"Cotton", "first_name"=>"Jharel", "preferred_name"=>"Jharel", "jersey_number"=>"45", "pitch_type"=>"FA", "pitch_speed"=>90.0, "pitch_zone"=>9, "pitch_x"=>52, "pitch_y"=>-39}, "runners"=>[{"id"=>"29a80d91-946d-4701-af7d-034850bdef00", "starting_base"=>1, "ending_base"=>1, "outcome_id"=>"", "out"=>false, "last_name"=>"Dozier", "first_name"=>"James", "preferred_name"=>"Brian", "jersey_number"=>"2"}]}, "officials"=> [{"full_name"=>"Mike Winters", "first_name"=>"Mike", "last_name"=>"Winters", "assignment"=>"2B", "experience"=>"24", "id"=>"344565d2-3276-4948-ac8e-28e4e49be9d9"}, {"full_name"=>"Mark Wegner", "first_name"=>"Mark", "last_name"=>"Wegner", "assignment"=>"3B", "experience"=>"15", "id"=>"27109ca4-3484-45ad-a78d-1a639c1bfabd"}, {"full_name"=>"Marty Foster", "first_name"=>"Marty", "last_name"=>"Foster", "assignment"=>"1B", "experience"=>"15", "id"=>"af6b8841-0bfd-402b-88de-1439d7d4ea74"}, {"full_name"=>"Mike Muchlinski", "first_name"=>"Mike", "last_name"=>"Muchlinski", "assignment"=>"HP", "experience"=>"2", "id"=>"ef45c7e3-9136-4704-b3a6-bfbd61cf9416"}]}