Skip to content

Commit

Permalink
add new components
Browse files Browse the repository at this point in the history
  • Loading branch information
Fustrate committed Jun 8, 2024
1 parent bf110a2 commit c3bc430
Show file tree
Hide file tree
Showing 4 changed files with 186 additions and 1 deletion.
8 changes: 7 additions & 1 deletion lib/baseballbot/templates/game_threads/components.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def header
<<~MARKDOWN.strip
### #{away_team.name} (#{away_record}) @ #{home_team.name} (#{home_record}) #{thumbnail}
**First Pitch**: #{start_time_local.strftime('%-I:%M %p')} at #{venue_name}
#{first_pitch}
MARKDOWN
end

Expand All @@ -19,8 +19,14 @@ def final_score
"#{home_team.name} #{linescore.dig('teams', 'home', 'runs')}"
end

def matchups = Matchups.new(self)

def media = Media.new(self)

def probables_and_media = ProbablesAndMedia.new(self)

def probable_starters = ProbableStarters.new(self)

def box_score_section = BoxScore.new(self)

def decisions_section = Decisions.new(self)
Expand Down
56 changes: 56 additions & 0 deletions lib/baseballbot/templates/game_threads/components/matchups.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# frozen_string_literal: true

class Baseballbot
module Templates
module GameThreads
module Components
class Matchups
include MarkdownHelpers

BASE_URL = 'https://bdfed.stitch.mlbinfra.com/bdfed/matchup/%<game_pk>s?statList=avg&statList=atBats' \
'&statList=homeRuns&statList=rbi&statList=ops&statList=strikeOuts'

HEADERS = %w[AVG OPS AB HR RBI K].freeze

def initialize(game_thread)
@game_thread = game_thread
end

def to_s = "#{home_table}\n\n#{away_table}"

protected

def home_table
table(
headers: [
"#{data.dig('probables', 'homeAbbreviation')} vs. #{data.dig('probables', 'awayProbableLastName')}",
*HEADERS
],
rows: data['home'].map { [_1['boxscoreName'], *player_stats(_1)] }
)
end

def away_table
table(
headers: [
"#{data.dig('probables', 'awayAbbreviation')} vs. #{data.dig('probables', 'homeProbableLastName')}",
*HEADERS
],
rows: data['away'].map { [_1['boxscoreName'], *player_stats(_1)] }
)
end

def player_row(player)
return ['-'] * 6 unless player['stats']

player['stats'].values_at('avg', 'ops', 'atBats', 'homeRuns', 'rbi', 'strikeOuts')
end

def data
@data ||= JSON.parse(URI.parse(format(BASE_URL, game_pk: @game_thread.game_pk)).open.read)
end
end
end
end
end
end
58 changes: 58 additions & 0 deletions lib/baseballbot/templates/game_threads/components/media.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# frozen_string_literal: true

class Baseballbot
module Templates
module GameThreads
module Components
class ProbablesAndMedia
include MarkdownHelpers

HOME_FEED_TYPES = %w[HOME NATIONAL].freeze
AWAY_FEED_TYPES = %w[AWAY NATIONAL].freeze

def initialize(game_thread)
@game_thread = game_thread
end

def to_s
table headers: %w[Team TV Radio], rows: [
[team_link(@game_thread.away_team), tv_feeds(:away), radio_feeds(:away)],
[team_link(@game_thread.home_team), tv_feeds(:home), radio_feeds(:home)]
]
end

protected

def team_link(team) = "[#{team.name}](/r/#{@game_thread.subreddit.code_to_subreddit_name(team.code)})"

def tv_feeds(flag)
television_feeds
.select { (flag == :home ? HOME_FEED_TYPES : AWAY_FEED_TYPES).include?(_1['mediaFeedType']) }
.map { _1['callLetters'] }
.join(', ')
end

def radio_feeds(flag)
audio_feeds
.select { (flag == :home ? HOME_FEED_TYPES : AWAY_FEED_TYPES).include?(_1['type']) }
.sort_by { _1['language'] == 'en' ? 0 : 1 }
.map { _1['language'] == 'en' ? _1['callLetters'] : "#{_1['callLetters']} (#{_1['language'].upcase})" }
.join(', ')
end

def television_feeds
@television_feeds ||= @game_thread.content.dig('media', 'epg')
&.detect { _1['title'] == 'MLBTV' }
&.fetch('items') || []
end

def audio_feeds
@audio_feeds ||= @game_thread.content.dig('media', 'epg')
&.detect { _1['title'] == 'Audio' }
&.fetch('items') || []
end
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# frozen_string_literal: true

class Baseballbot
module Templates
module GameThreads
module Components
class ProbableStarters
include MarkdownHelpers

TBA = ['TBA', '', '', '', '', '', '', '', ''].freeze

HEADERS = [
'Team',
'Pitcher',
['Record', :center],
['ERA', :center],
['IP', :center],
['H', :center],
['ER', :center],
['BB', :center],
['SO', :center],
['WHIP', :center]
].freeze

def initialize(game_thread)
@game_thread = game_thread
end

def to_s
table headers: HEADERS, rows: [
[team_link(@game_thread.away_team), *probable_starter_line('away')],
[team_link(@game_thread.home_team), *probable_starter_line('home')]
]
end

protected

def team_link(team) = "[#{team.name}](/r/#{@game_thread.subreddit.code_to_subreddit_name(team.code)})"

def probable_starter_line(flag)
pitcher_id = @game_thread.game_data.dig('probablePitchers', flag, 'id')

return TBA unless pitcher_id

pitcher_line(@game_thread.boxscore.dig('teams', flag, 'players', "ID#{pitcher_id}"))
end

def pitcher_line(pitcher)
return TBA unless pitcher

season_stats = pitcher.dig('seasonStats', 'pitching')

[
"[#{pitcher.dig('person', 'fullName')}](#{player_url(pitcher.dig('person', 'id'))})",
"#{season_stats['wins']}-#{season_stats['losses']}",
*season_stats.values_at(
'era', 'inningsPitched', 'hits', 'earnedRuns', 'baseOnBalls', 'strikeOuts', 'whip'
)
]
end
end
end
end
end
end

0 comments on commit c3bc430

Please sign in to comment.