class Moneyball::BattedBallTypeExtractor

Attributes

event_description[R]

Public Class Methods

new(event_description) click to toggle source
# File lib/moneyball/batted_ball_type_extractor.rb, line 3
def initialize(event_description)
  @event_description = event_description
end

Public Instance Methods

classification() click to toggle source
# File lib/moneyball/batted_ball_type_extractor.rb, line 7
def classification
  case
  when event_description.match(/line(s)? (drive|into|out)/)
    "Line drive"
  when event_description.match(/fl(ies|y) (ball|out)/)
    "Fly ball"
  when event_description.match(/sacrifice fly/)
    "Fly ball"
  when event_description.match(/flies into a/)
    "Fly ball"
  when event_description.match(/ground(s)?( (ball|into|out)|, fielded)/)
    "Ground ball"
  when event_description.match(/fielder's choice/)
    "Ground ball"
  when event_description.match(/((hits|out on) a sacrifice|ground) bunt/)
    "Ground ball"
  when event_description.match(/reaches on a(n)? ((fielding |missed catch |throwing )?error|force attempt)/)
    "Ground ball"
  when event_description.match(/pop(s)? (into a(n)? (unassisted )?double play|(into a force )?out|up)/)
    "Pop up"
  when event_description.match(/(grand slam|home run)/)
    "Fly ball"
  when event_description.match(/(\AThrowing error|catcher interference|caught stealing|fan interference|hit by pitch|strikes out|out on strikes|walks)/)
    nil
  when event_description.match(/(passed ball|wild pitch).+out at/) then nil
  when event_description.match(/picks off/) then nil
  when event_description.match(/\A(\w+ challenged ([A-Za-z]|\s|\(|\)|\-|\,)+\:)?([A-Za-z]|\s)+(, Jr.)? out at /)
    nil
  when event_description.match(/ triples\.\s+\Z/) then nil
  when event_description.match(/ doubles\.\s+\Z/) then nil
  when event_description.match(/ singles\.\s+\Z/) then nil
  else
    raise "No match for batted ball type on '#{event_description}'"
    nil
  end
end