lib/punchblock.rb
# encoding: utf-8
%w{
active_support/dependencies/autoload
active_support/core_ext/object/blank
active_support/core_ext/module/delegation
active_support/inflector
future-resource
has_guarded_handlers
ruby_speech
punchblock/core_ext/ruby
}.each { |l| require l }
module Punchblock
extend ActiveSupport::Autoload
autoload :ActorHasGuardedHandlers
autoload :Client
autoload :Command
autoload :CommandNode
autoload :Component
autoload :Connection
autoload :DeadActorSafety
autoload :DisconnectedError
autoload :HasHeaders
autoload :MediaNode
autoload :ProtocolError
autoload :RayoNode
autoload :Translator
autoload :URIList
class << self
def logger
@logger || reset_logger
end
def logger=(other)
@logger = other
end
def reset_logger
@logger = NullObject.new
end
#
# Get a new Punchblock client with a connection attached
#
# @param [Symbol] type the connection type (eg :XMPP, :asterisk, :freeswitch)
# @param [Hash] options the options to pass to the connection (credentials, etc
#
# @return [Punchblock::Client] a punchblock client object
#
def client_with_connection(type, options)
connection = Connection.const_get(type == :xmpp ? 'XMPP' : type.to_s.classify).new options
Client.new :connection => connection
rescue NameError
raise ArgumentError, "Connection type #{type.inspect} is not valid."
end
def new_uuid
SecureRandom.uuid
end
def new_request_id
new_uuid
end
def jruby?
@jruby ||= !!(RUBY_PLATFORM =~ /java/)
end
end
##
# This exception may be raised if a transport error is detected.
Error = Class.new StandardError
BASE_RAYO_NAMESPACE = 'urn:xmpp:rayo'
BASE_ASTERISK_NAMESPACE = 'urn:xmpp:rayo:asterisk'
RAYO_VERSION = '1'
RAYO_NAMESPACES = {:core => [BASE_RAYO_NAMESPACE, RAYO_VERSION].compact.join(':')}
[:ext, :record, :output, :input, :prompt, :cpa, :fax].each do |ns|
RAYO_NAMESPACES[ns] = [BASE_RAYO_NAMESPACE, ns.to_s, RAYO_VERSION].compact.join(':')
RAYO_NAMESPACES[:"#{ns}_complete"] = [BASE_RAYO_NAMESPACE, ns.to_s, 'complete', RAYO_VERSION].compact.join(':')
end
[:agi, :ami].each do |ns|
RAYO_NAMESPACES[ns] = [BASE_ASTERISK_NAMESPACE, ns.to_s, RAYO_VERSION].compact.join(':')
RAYO_NAMESPACES[:"#{ns}_complete"] = [BASE_ASTERISK_NAMESPACE, ns.to_s, 'complete', RAYO_VERSION].compact.join(':')
end
end
require 'punchblock/event'
require 'punchblock/ref'