lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb in adhearsion-0.8.3 vs lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb in adhearsion-0.8.4

- old
+ new

@@ -2,11 +2,11 @@ module Adhearsion module VoIP module Asterisk module ConfigFileGenerators - + # This will generate a queues.conf file. If there is no documentation on what a method # actually does, take a look at the documentation for its original key/value pair in # an unedited queues.conf file. WARNING! Don't get too embedded with these method names. # I'm still not satisfied. These settings will be greatly abstracted eventually. class Queues < AsteriskConfigGenerator @@ -20,11 +20,11 @@ @general_section = DEFAULT_GENERAL_SECTION.clone @properties = {} @queue_definitions = [] super end - + def queue(name) new_queue = QueueDefinition.new name yield new_queue if block_given? queue_definitions << new_queue new_queue @@ -34,32 +34,32 @@ AsteriskConfigGenerator.warning_message + general_section.inject("[general]") { |section,(key,value)| section + "\n#{key}=#{value}" } + "\n\n" + queue_definitions.map(&:to_s).join("\n\n") end alias conf to_s - + def persistent_members(yes_no) boolean :persistentmembers => yes_no, :with => general_section end - + def monitor_type(symbol) criteria = {:monitor => "Monitor", :mix_monitor => "MixMonitor"} one_of_and_translate criteria, 'monitor-type' => symbol, :with => general_section end - - + + class QueueDefinition < AsteriskConfigGenerator DEFAULT_QUEUE_PROPERTIES = { :autofill => 'yes', :eventwhencalled => 'vars', :eventmemberstatus => 'yes', :setinterfacevar => 'yes' } SUPPORTED_RING_STRATEGIES = [:ringall, :roundrobin, :leastrecent, :fewestcalls, :random, :rrmemory] - + DEFAULT_SOUND_FILES = { 'queue-youarenext' => 'queue-youarenext', 'queue-thereare' => 'queue-thereare', 'queue-callswaiting' => 'queue-callswaiting', 'queue-holdtime' => 'queue-holdtime', @@ -89,11 +89,11 @@ @name = name @members = [] @properties = DEFAULT_QUEUE_PROPERTIES.clone @sound_files = DEFAULT_SOUND_FILES.clone end - + def to_s "[#{name}]\n" + properties.merge(@sound_files).map { |key, value| "#{key}=#{value}" }.sort.join("\n") + "\n\n" + members.map { |member| "member => #{member}" }.join("\n") end @@ -142,11 +142,11 @@ # Ex: wrapup_time 1.minute def wrapup_time(seconds) int :wrapuptime => seconds end - + def autopause(yes_no) boolean :autopause => yes_no end def maximum_length(number) @@ -157,11 +157,11 @@ int "announce-frequency" => seconds end def periodically_announce(sound_file, options={}) frequency = options.delete(:every) || 1.minute - + string 'periodic-announce' => sound_file int 'periodic-announce-frequency' => frequency end def announce_hold_time(seconds) @@ -173,44 +173,44 @@ end def monitor_format(symbol) one_of [:wav, :gsm, :wav49], 'monitor-format' => symbol end - + def monitor_type(symbol) criteria = {:monitor => "Monitor", :mix_monitor => "MixMonitor"} one_of_and_translate criteria, 'monitor-type' => symbol end # Ex: join_empty true # Ex: join_empty :strict def join_empty(yes_no_or_strict) one_of [true, false, :strict], :joinempty => yes_no_or_strict end - + def leave_when_empty(yes_no) boolean :leavewhenempty => yes_no end def report_hold_time(yes_no) boolean :reportholdtime => yes_no end - + def ring_in_use(yes_no) boolean :ringinuse => yes_no end # Number of seconds to wait when an agent is to be bridged with # a caller. Normally you'd want this to be zero. def delay_connection_by(seconds) int :memberdelay => seconds end - + def timeout_restart(yes_no) boolean :timeoutrestart => yes_no end - + # Give a Hash argument here to override the default sound files for this queue. # # Usage: # # queue.sound_files :you_are_next => 'queue-youarenext', @@ -234,10 +234,10 @@ raise ArgumentError, message end @sound_files[SOUND_FILE_SYMBOL_INTERPRETATIONS[key]] = value end end - + def member(driver) members << (driver.kind_of?(String) && driver =~ %r'/' ? driver : "Agent/#{driver}") end end