class BaseballCalc::Player
Player
objects know how to operate on their data. Player
ojbects also know how merge data from multiple BattingSummaries since some players have batting data for multiple teams within the same year. As a result, most of the computational logic lives in the Player
since it has to assume it’s data might be spread across multipe Batting Summaries.
Attributes
batting_summaries[RW]
birth_year[R]
first_name[R]
last_name[R]
player_id[R]
Public Class Methods
new(data)
click to toggle source
# File lib/baseball_calc/player.rb, line 18 def initialize(data) @player_id = data["playerID"] @birth_year = data["birthYear"] @first_name = data["nameFirst"] @last_name = data["nameLast"] @batting_summaries = [] end
Public Instance Methods
at_bats_at_least?(threshold, year)
click to toggle source
# File lib/baseball_calc/player.rb, line 45 def at_bats_at_least?(threshold, year) summaries = batting_summaries_for_year(year) total = summaries.inject(0) {|sum, summary| sum + summary.at_bats} total >= threshold end
batting_avg_improvement(year1, year2)
click to toggle source
# File lib/baseball_calc/player.rb, line 51 def batting_avg_improvement(year1, year2) start_summaries = batting_summaries_for_year(year1) return 0.0 if start_summaries.blank? end_summaries = batting_summaries_for_year(year2) return 0.0 if end_summaries.blank? total_start_at_bats = start_summaries.inject(0) {|sum, summary| sum + summary.at_bats} total_start_hits = start_summaries.inject(0) {|sum, summary| sum + summary.hits} total_end_at_bats = end_summaries.inject(0) {|sum, summary| sum + summary.at_bats} total_end_hits = end_summaries.inject(0) {|sum, summary| sum + summary.hits} return 0.0 if total_start_at_bats == 0 || total_end_at_bats == 0 start_batting_avg = total_start_hits * 1.0 / total_start_at_bats end_batting_avg = total_end_hits * 1.0 / total_end_at_bats change = (end_batting_avg - start_batting_avg).round(4) if player_id == "denorch01" puts "Start - #{start_batting_avg}" puts "End - #{end_batting_avg}" end change end
batting_avg_in_year_and_league(year,league)
click to toggle source
# File lib/baseball_calc/player.rb, line 89 def batting_avg_in_year_and_league(year,league) summaries = batting_summaries_for_year_and_league(year,league) total_hits = summaries.inject(0) {|sum, summary| sum + summary.hits} total_at_bats = summaries.inject(0) {|sum, summary| sum + summary.at_bats} return 0.0 if total_at_bats == 0 (total_hits*1.0/total_at_bats).round(4) end
batting_summaries_for_year(year)
click to toggle source
# File lib/baseball_calc/player.rb, line 33 def batting_summaries_for_year(year) @batting_summaries.select {|summary| summary.year_id == year} end
batting_summaries_for_year_and_league(year, league)
click to toggle source
# File lib/baseball_calc/player.rb, line 41 def batting_summaries_for_year_and_league(year, league) @batting_summaries.select {|summary| summary.year_id == year && summary.league == league} end
batting_summary_for_year_and_team(year, team)
click to toggle source
# File lib/baseball_calc/player.rb, line 37 def batting_summary_for_year_and_team(year, team) @batting_summaries.detect {|summary| summary.year_id == year && summary.team_id == team} end
full_name()
click to toggle source
# File lib/baseball_calc/player.rb, line 26 def full_name return @player_id if @first_name.blank? && @last_name.blank? return @last_name if @first_name.blank? return @first_name if @last_name.blank? "#{@first_name} #{@last_name}" end
home_runs_in_year_and_league(year, league)
click to toggle source
# File lib/baseball_calc/player.rb, line 102 def home_runs_in_year_and_league(year, league) summaries = batting_summaries_for_year_and_league(year,league) summaries.inject(0) {|sum, summary| sum + summary.home_runs} end
played_for?(team, year)
click to toggle source
# File lib/baseball_calc/player.rb, line 76 def played_for?(team, year) !batting_summary_for_year_and_team(year,team).nil? end
played_in_league_during_year?(league, year)
click to toggle source
# File lib/baseball_calc/player.rb, line 80 def played_in_league_during_year?(league, year) !@batting_summaries.detect {|summary| summary.year_id == year && summary.league == league}.nil? end
rbis_in_year_and_league(year, league)
click to toggle source
# File lib/baseball_calc/player.rb, line 97 def rbis_in_year_and_league(year, league) summaries = batting_summaries_for_year_and_league(year,league) summaries.inject(0) {|sum, summary| sum + summary.runs_batted_in} end
slugging_percent(year, team)
click to toggle source
# File lib/baseball_calc/player.rb, line 84 def slugging_percent(year, team) summary = batting_summary_for_year_and_team(year, team) summary.slugging_percentage end