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