class Sounder::Soundboard

Attributes

root[RW]
version_info[R]

Public Class Methods

new(sounds:, version_info: "Sounder Soundboard", root: nil) click to toggle source
# File lib/sounder/soundboard.rb, line 6
def initialize sounds:, version_info: "Sounder Soundboard", root: nil
  @soundgroup = {}
  @version_info = version_info
  @sounds = sounds
  @root = root
end

Public Instance Methods

run(args) click to toggle source
# File lib/sounder/soundboard.rb, line 13
def run args
  case
  when random?(args) then soundgroup.random
  when help?(args)   then puts usage
  when sound?(args)  then play_sound(args.join ' ')
  else
    puts usage
  end
end

Private Instance Methods

get_path(file) click to toggle source
# File lib/sounder/soundboard.rb, line 43
def get_path file
  raise RootNotSetError.new("You must set a support directory first") unless root
  File.join root, "#{file}.m4a"
end
help?(args) click to toggle source
# File lib/sounder/soundboard.rb, line 52
def help? args
  args.size == 1 && %w[-h --help].include?(args.first)
end
play_sound(sound_name) click to toggle source
# File lib/sounder/soundboard.rb, line 32
def play_sound sound_name
  soundgroup.play sound_name
rescue UnknownSoundError
  unknown_sound_message sound_name
end
random?(args) click to toggle source
# File lib/sounder/soundboard.rb, line 56
def random? args
  args.size == 1 && args.first == 'random'
end
sound?(args) click to toggle source
# File lib/sounder/soundboard.rb, line 48
def sound? args
  not args.empty?
end
soundgroup() click to toggle source
# File lib/sounder/soundboard.rb, line 25
def soundgroup
  @soundgroup[root] ||= begin
    names_and_paths = Hash[@sounds.map { |name, file| [name, get_path(file)] }]
    SoundGroup.new names_and_paths
  end
end
unknown_sound_message(sound_name) click to toggle source
# File lib/sounder/soundboard.rb, line 38
def unknown_sound_message sound_name
  puts "Error: \"#{sound_name}\" does not match a known sound"
  puts usage
end
usage() click to toggle source
# File lib/sounder/soundboard.rb, line 60
def usage
  usage = soundgroup.usage.map { |line| "  #{line}" }
  usage.unshift version_info, "Usage:"
  usage.join "\n"
end