module Formatter::Music

Public Instance Methods

dump_summary(*args) click to toggle source
Calls superclass method
# File lib/formatter/music.rb, line 35
def dump_summary(*args)
  kill_music
  super
end
kernel() click to toggle source
# File lib/formatter/music.rb, line 17
def kernel
  @kernel ||= Kernel
end
kernel=(kernel) click to toggle source
# File lib/formatter/music.rb, line 13
def kernel=(kernel)
  @kernel = kernel
end
linux?() click to toggle source
# File lib/formatter/music.rb, line 9
def linux?
  platform.downcase.include?('linux')
end
osx?() click to toggle source
# File lib/formatter/music.rb, line 5
def osx?
  platform.downcase.include?('darwin')
end
platform() click to toggle source
# File lib/formatter/music.rb, line 25
def platform
  @platform ||= RUBY_PLATFORM
end
platform=(platform) click to toggle source
# File lib/formatter/music.rb, line 21
def platform=(platform)
  @platform = platform
end
start(input) click to toggle source
Calls superclass method
# File lib/formatter/music.rb, line 29
def start(input)
  super
  @music_thread = Thread.new { start_music_or_kill(Thread.current) }
  wait_for_music_to_start(@music_thread)
end

Private Instance Methods

kill_music() click to toggle source
# File lib/formatter/music.rb, line 42
def kill_music
  if @music_thread && @music_thread['music_pid']
    @music_thread.kill
    Process.kill('KILL', @music_thread['music_pid'])
  end
end
linux_player() click to toggle source
# File lib/formatter/music.rb, line 49
def linux_player
  %w[mpg321 mpg123].find do |player|
    kernel.system("which #{player} >/dev/null 2>&1 && type #{player} >/dev/null 2>&1")
  end
end
music_command() click to toggle source
# File lib/formatter/music.rb, line 55
def music_command
  # this isn't really threadsafe but it'll work if we're careful
  return @music_command if @music_command

  if osx?
    @music_command = "afplay #{rainbow_mp3}"
  elsif linux? && linux_player
    @music_command = "#{linux_player} #{rainbow_mp3} >/dev/null 2>&1"
  end
end
start_music_or_kill(thread) click to toggle source
# File lib/formatter/music.rb, line 66
def start_music_or_kill(thread)
  thread.exit unless File.exist?(rainbow_mp3) && music_command
  loop do
    thread['music_pid'] = kernel.spawn(music_command)
    thread['started_playing'] ||= true
    Process.wait(thread['music_pid'])
  end
end
wait_for_music_to_start(music_thread) click to toggle source
# File lib/formatter/music.rb, line 75
def wait_for_music_to_start(music_thread)
  sleep 0.001 while !music_thread['started_playing'] && music_thread.status
end