jicksta-adhearsion 0.7.999

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. data/CHANGELOG +6 -0
  2. data/EVENTS +11 -0
  3. data/LICENSE +456 -0
  4. data/README.txt +5 -0
  5. data/Rakefile +120 -0
  6. data/adhearsion.gemspec +146 -0
  7. data/app_generators/ahn/USAGE +5 -0
  8. data/app_generators/ahn/ahn_generator.rb +87 -0
  9. data/app_generators/ahn/templates/.ahnrc +34 -0
  10. data/app_generators/ahn/templates/README +8 -0
  11. data/app_generators/ahn/templates/Rakefile +23 -0
  12. data/app_generators/ahn/templates/components/ami_remote/ami_remote.rb +15 -0
  13. data/app_generators/ahn/templates/components/disabled/HOW_TO_ENABLE +7 -0
  14. data/app_generators/ahn/templates/components/disabled/stomp_gateway/README.markdown +47 -0
  15. data/app_generators/ahn/templates/components/disabled/stomp_gateway/config.yml +12 -0
  16. data/app_generators/ahn/templates/components/disabled/stomp_gateway/stomp_gateway.rb +34 -0
  17. data/app_generators/ahn/templates/components/restful_rpc/README.markdown +11 -0
  18. data/app_generators/ahn/templates/components/restful_rpc/config.yml +34 -0
  19. data/app_generators/ahn/templates/components/restful_rpc/example-client.rb +48 -0
  20. data/app_generators/ahn/templates/components/restful_rpc/restful_rpc.rb +87 -0
  21. data/app_generators/ahn/templates/components/simon_game/simon_game.rb +56 -0
  22. data/app_generators/ahn/templates/config/startup.rb +53 -0
  23. data/app_generators/ahn/templates/dialplan.rb +3 -0
  24. data/app_generators/ahn/templates/events.rb +32 -0
  25. data/bin/ahn +28 -0
  26. data/bin/ahnctl +68 -0
  27. data/bin/jahn +42 -0
  28. data/examples/asterisk_manager_interface/standalone.rb +51 -0
  29. data/lib/adhearsion/cli.rb +223 -0
  30. data/lib/adhearsion/component_manager/spec_framework.rb +24 -0
  31. data/lib/adhearsion/component_manager.rb +208 -0
  32. data/lib/adhearsion/events_support.rb +84 -0
  33. data/lib/adhearsion/foundation/all.rb +9 -0
  34. data/lib/adhearsion/foundation/blank_slate.rb +5 -0
  35. data/lib/adhearsion/foundation/custom_daemonizer.rb +45 -0
  36. data/lib/adhearsion/foundation/event_socket.rb +203 -0
  37. data/lib/adhearsion/foundation/future_resource.rb +36 -0
  38. data/lib/adhearsion/foundation/global.rb +1 -0
  39. data/lib/adhearsion/foundation/metaprogramming.rb +17 -0
  40. data/lib/adhearsion/foundation/numeric.rb +13 -0
  41. data/lib/adhearsion/foundation/pseudo_guid.rb +10 -0
  42. data/lib/adhearsion/foundation/relationship_properties.rb +42 -0
  43. data/lib/adhearsion/foundation/string.rb +26 -0
  44. data/lib/adhearsion/foundation/synchronized_hash.rb +96 -0
  45. data/lib/adhearsion/foundation/thread_safety.rb +7 -0
  46. data/lib/adhearsion/host_definitions.rb +67 -0
  47. data/lib/adhearsion/initializer/asterisk.rb +81 -0
  48. data/lib/adhearsion/initializer/configuration.rb +254 -0
  49. data/lib/adhearsion/initializer/database.rb +49 -0
  50. data/lib/adhearsion/initializer/drb.rb +31 -0
  51. data/lib/adhearsion/initializer/freeswitch.rb +22 -0
  52. data/lib/adhearsion/initializer/rails.rb +40 -0
  53. data/lib/adhearsion/initializer.rb +373 -0
  54. data/lib/adhearsion/logging.rb +92 -0
  55. data/lib/adhearsion/tasks/database.rb +5 -0
  56. data/lib/adhearsion/tasks/deprecations.rb +59 -0
  57. data/lib/adhearsion/tasks/generating.rb +20 -0
  58. data/lib/adhearsion/tasks/lint.rb +4 -0
  59. data/lib/adhearsion/tasks/testing.rb +37 -0
  60. data/lib/adhearsion/tasks.rb +16 -0
  61. data/lib/adhearsion/version.rb +9 -0
  62. data/lib/adhearsion/voip/asterisk/agi_server.rb +81 -0
  63. data/lib/adhearsion/voip/asterisk/commands.rb +1284 -0
  64. data/lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb +140 -0
  65. data/lib/adhearsion/voip/asterisk/config_generators/config_generator.rb +101 -0
  66. data/lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb +250 -0
  67. data/lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb +240 -0
  68. data/lib/adhearsion/voip/asterisk/config_manager.rb +71 -0
  69. data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb +1754 -0
  70. data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb +286 -0
  71. data/lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb +78 -0
  72. data/lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl +87 -0
  73. data/lib/adhearsion/voip/asterisk/manager_interface.rb +562 -0
  74. data/lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb +80 -0
  75. data/lib/adhearsion/voip/asterisk/super_manager.rb +19 -0
  76. data/lib/adhearsion/voip/asterisk.rb +4 -0
  77. data/lib/adhearsion/voip/call.rb +440 -0
  78. data/lib/adhearsion/voip/call_routing.rb +64 -0
  79. data/lib/adhearsion/voip/commands.rb +9 -0
  80. data/lib/adhearsion/voip/constants.rb +39 -0
  81. data/lib/adhearsion/voip/conveniences.rb +18 -0
  82. data/lib/adhearsion/voip/dial_plan.rb +218 -0
  83. data/lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb +37 -0
  84. data/lib/adhearsion/voip/dsl/dialing_dsl.rb +151 -0
  85. data/lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb +27 -0
  86. data/lib/adhearsion/voip/dsl/dialplan/dispatcher.rb +124 -0
  87. data/lib/adhearsion/voip/dsl/dialplan/parser.rb +71 -0
  88. data/lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb +16 -0
  89. data/lib/adhearsion/voip/dsl/numerical_string.rb +117 -0
  90. data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +48 -0
  91. data/lib/adhearsion/voip/freeswitch/event_handler.rb +58 -0
  92. data/lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb +129 -0
  93. data/lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb +38 -0
  94. data/lib/adhearsion/voip/freeswitch/oes_server.rb +195 -0
  95. data/lib/adhearsion/voip/menu_state_machine/calculated_match.rb +80 -0
  96. data/lib/adhearsion/voip/menu_state_machine/matchers.rb +123 -0
  97. data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +58 -0
  98. data/lib/adhearsion/voip/menu_state_machine/menu_class.rb +149 -0
  99. data/lib/adhearsion.rb +37 -0
  100. data/lib/theatre/README.markdown +64 -0
  101. data/lib/theatre/callback_definition_loader.rb +84 -0
  102. data/lib/theatre/guid.rb +23 -0
  103. data/lib/theatre/invocation.rb +121 -0
  104. data/lib/theatre/namespace_manager.rb +153 -0
  105. data/lib/theatre/version.rb +2 -0
  106. data/lib/theatre.rb +151 -0
  107. metadata +177 -0
@@ -0,0 +1,153 @@
1
+ module Theatre
2
+
3
+ ##
4
+ # Manages the hierarchial namespaces of a Theatre. This class is Thread-safe.
5
+ #
6
+ class ActorNamespaceManager
7
+
8
+ VALID_NAMESPACE = %r{^(/[\w_]+)+$}
9
+
10
+ class << self
11
+ def valid_namespace_path?(namespace_path)
12
+ namespace_path =~ VALID_NAMESPACE
13
+ end
14
+
15
+ ##
16
+ # Since there are a couple ways to represent namespaces, this is a helper method which will normalize
17
+ # them into the most practical: an Array of Symbols
18
+ # @param [String, Array] paths The namespace to register. Can be in "/foo/bar" or *[foo,bar] format
19
+ def normalize_path_to_array(paths)
20
+ paths = paths.is_a?(Array) ? paths.flatten : Array(paths)
21
+ paths.map! { |path_segment| path_segment.kind_of?(String) ? path_segment.split('/') : path_segment }
22
+ paths.flatten!
23
+ paths.reject! { |path| path.nil? || (path.kind_of?(String) && path.empty?) }
24
+ paths.map { |path| path.to_sym }
25
+ end
26
+
27
+ end
28
+
29
+ def initialize
30
+ @registry_lock = Mutex.new
31
+ @root = RootNamespaceNode.new
32
+ end
33
+
34
+ ##
35
+ # Have this registry recognize a new path and prepare it for callback registrations. All path segements will be created
36
+ # in order. For example, when registering "/foo/bar/qaz" when no namespaces at all have been registered, this method will
37
+ # first register "foo", then "bar", then "qaz". If the namespace was already registered, it will not be affected.
38
+ #
39
+ # @param [String, Array] paths The namespace to register. Can be in "/foo/bar" or *[foo,bar] format
40
+ # @return [NamespaceNode] The NamespaceNode representing the path given.
41
+ # @raise NamespaceNotFound if a segment has not been registered yet
42
+ #
43
+ def register_namespace_name(*paths)
44
+ paths = self.class.normalize_path_to_array paths
45
+
46
+ paths.inject(@root) do |node, name|
47
+ node.register_namespace_name name
48
+ end
49
+ end
50
+
51
+ ##
52
+ # Returns a Proc found after searching with the namespace you provide
53
+ #
54
+ # @raise NamespaceNotFound if a segment has not been registered yet
55
+ #
56
+ def callbacks_for_namespaces(*paths)
57
+ search_for_namespace(paths).callbacks
58
+ end
59
+
60
+ ##
61
+ # Find a namespace in the tree.
62
+ #
63
+ # @param [Array, String] paths Must be an Array of segments or a name like "/foo/bar/qaz"
64
+ # @raise NamespaceNotFound if a segment has not been registered yet
65
+ #
66
+ def search_for_namespace(paths)
67
+ paths = self.class.normalize_path_to_array paths
68
+ path_string = "/"
69
+
70
+ found_namespace = paths.inject(@root) do |last_node,this_node_name|
71
+ raise NamespaceNotFound.new(path_string) if last_node.nil?
72
+ path_string << this_node_name.to_s
73
+ last_node.child_named this_node_name
74
+ end
75
+ raise NamespaceNotFound.new("/#{paths.join('/')}") unless found_namespace
76
+ found_namespace
77
+ end
78
+
79
+ ##
80
+ # Registers the given callback at a namespace, assuming the namespace was already registered.
81
+ #
82
+ # @param [Array] paths Must be an Array of segments
83
+ # @param [Proc] callback
84
+ # @raise NamespaceNotFound if a segment has not been registered yet
85
+ #
86
+ def register_callback_at_namespace(paths, callback)
87
+ raise ArgumentError, "callback must be a Proc" unless callback.kind_of? Proc
88
+ search_for_namespace(paths).register_callback callback
89
+ end
90
+
91
+ protected
92
+
93
+ ##
94
+ # Used by NamespaceManager to build a tree of namespaces. Has a Hash of children which is not
95
+ # Thread-safe. For Thread-safety, all access should semaphore through the NamespaceManager.
96
+ class NamespaceNode
97
+
98
+ attr_reader :name
99
+ def initialize(name)
100
+ @name = name.freeze
101
+ @children = {}
102
+ @callbacks = []
103
+ end
104
+
105
+ def register_namespace_name(name)
106
+ @children[name] ||= NamespaceNode.new(name)
107
+ end
108
+
109
+ def register_callback(callback)
110
+ @callbacks << callback
111
+ callback
112
+ end
113
+
114
+ def callbacks
115
+ @callbacks.clone
116
+ end
117
+
118
+ def delete_callback(callback)
119
+ @callbacks.delete callback
120
+ end
121
+
122
+ def child_named(name)
123
+ @children[name]
124
+ end
125
+
126
+ def destroy_namespace(name)
127
+ @children.delete name
128
+ end
129
+
130
+ def root?
131
+ false
132
+ end
133
+
134
+ end
135
+
136
+ class RootNamespaceNode < NamespaceNode
137
+ def initialize
138
+ super :ROOT
139
+ end
140
+ def root?
141
+ true
142
+ end
143
+ end
144
+
145
+ end
146
+
147
+ class NamespaceNotFound < Exception
148
+ def initialize(full_path)
149
+ super "Could not find #{full_path.inspect} in the namespace registry. Did you register it yet?"
150
+ end
151
+ end
152
+
153
+ end
@@ -0,0 +1,2 @@
1
+ THEATRE_VERSION_MAJOR, THEATRE_VERSION_MINOR, THEATRE_VERSION_REVISION = THEATRE_VERSION = [0,8,1]
2
+ THEATRE_VERSION_STRING = THEATRE_VERSION.join '.'
data/lib/theatre.rb ADDED
@@ -0,0 +1,151 @@
1
+ require 'thread'
2
+ require 'rubygems'
3
+
4
+ $: << File.expand_path(File.dirname(__FILE__))
5
+
6
+ require 'theatre/version'
7
+ require 'theatre/namespace_manager'
8
+ require 'theatre/invocation'
9
+ require 'theatre/callback_definition_loader'
10
+
11
+ module Theatre
12
+
13
+ class Theatre
14
+
15
+ attr_reader :namespace_manager
16
+
17
+ ##
18
+ # Creates a new stopped Theatre. You must call start!() after you instantiate this for it to begin processing events.
19
+ #
20
+ # @param [Fixnum] thread_count Number of Threads to spawn when started.
21
+ #
22
+ def initialize(thread_count=6)
23
+ @thread_count = thread_count
24
+ @started = false
25
+ @namespace_manager = ActorNamespaceManager.new
26
+ @thread_group = ThreadGroup.new
27
+ @master_queue = Queue.new
28
+ @loader_mixins = []
29
+ end
30
+
31
+ ##
32
+ # Send a message to this Theatre for asynchronous processing.
33
+ #
34
+ # @param [String] namespace The namespace to which the payload should be sent
35
+ # @param [Object] payload The actual content to be sent to the callback. Optional.
36
+ # @return [Array<Theatre::Invocation>] An Array of Invocation objects
37
+ # @raise Theatre::NamespaceNotFound Raised when told to enqueue an unrecognized namespace
38
+ #
39
+ def trigger(namespace, payload=:argument_undefined)
40
+ @namespace_manager.callbacks_for_namespaces(namespace).map do |callback|
41
+ invocation = if payload.equal?(:argument_undefined)
42
+ Invocation.new(namespace, callback)
43
+ else
44
+ Invocation.new(namespace, callback, payload)
45
+ end
46
+ invocation.queued
47
+ @master_queue << invocation
48
+ invocation
49
+ end
50
+ end
51
+
52
+ ##
53
+ # Send a message to this Theatre for synchronous processing. The execution of this will not go through this Theatre's
54
+ # Thread pool. If an error occurred in any of callbacks, the Exception object will be placed in the returned Array
55
+ # instead for you to act upon.
56
+ #
57
+ # @param [String] namespace The namespace to which the payload should be sent
58
+ # @param [Object] payload The actual content to be sent to the callback. Optional.
59
+ # @return [Array] An Array containing each callback's return value (or Exception raised, if any) when given the payload
60
+ # @raise Theatre::NamespaceNotFound Raised when told to enqueue an unrecognized namespace
61
+ #
62
+ def trigger_immediately(namespace, payload=:argument_undefined)
63
+ @namespace_manager.callbacks_for_namespaces(namespace).map do |callback|
64
+ begin
65
+ invocation = if payload.equal?(:argument_undefined)
66
+ callback.call
67
+ else
68
+ callback.call payload
69
+ end
70
+ rescue => captured_error_to_be_returned
71
+ captured_error_to_be_returned
72
+ end
73
+ end
74
+ end
75
+
76
+ def load_events_code(code, *args)
77
+ loader = CallbackDefinitionLoader.new(self, *args)
78
+ loader.load_events_code code
79
+ end
80
+
81
+ def load_events_file(file, *args)
82
+ loader = CallbackDefinitionLoader.new(self, *args)
83
+ loader.load_events_file file
84
+ end
85
+
86
+ def register_namespace_name(*args)
87
+ @namespace_manager.register_namespace_name(*args)
88
+ end
89
+
90
+ def register_callback_at_namespace(*args)
91
+ @namespace_manager.register_callback_at_namespace(*args)
92
+ end
93
+
94
+ def register_loader_mixin(mod)
95
+ @loader_mixins << mod
96
+ end
97
+
98
+ def join
99
+ @thread_group.list.each do |thread|
100
+ begin
101
+ thread.join
102
+ rescue
103
+ # Ignore any exceptions
104
+ end
105
+ end
106
+ end
107
+
108
+ ##
109
+ # Starts this Theatre.
110
+ #
111
+ # When this method is called, the Threads are spawned and begin pulling messages off this Theatre's master queue.
112
+ #
113
+ def start!
114
+ return false if @thread_group.list.any? # Already started
115
+ @started_time = Time.now
116
+ @thread_count.times do
117
+ @thread_group.add Thread.new(&method(:thread_loop))
118
+ end
119
+ end
120
+
121
+ ##
122
+ # Notifies all Threads for this Theatre to stop by sending them special messages. Any messages which were queued and
123
+ # untriggered when this method is received will still be processed. Note: you may start this Theatre again later once it
124
+ # has been stopped.
125
+ #
126
+ def graceful_stop!
127
+ @thread_count.times { @master_queue << :THEATRE_SHUTDOWN! }
128
+ @started_time = nil
129
+ end
130
+
131
+ protected
132
+
133
+ # This will use the Adhearsion logger eventually.
134
+ def warn(exception)
135
+ # STDERR.puts exception.message, *exception.backtrace
136
+ end
137
+
138
+ def thread_loop
139
+ loop do
140
+ begin
141
+ next_invocation = @master_queue.pop
142
+ return :stopped if next_invocation.equal? :THEATRE_SHUTDOWN!
143
+ next_invocation.start
144
+ rescue => error
145
+ warn error
146
+ end
147
+ end
148
+ end
149
+
150
+ end
151
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jicksta-adhearsion
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.999
5
+ platform: ruby
6
+ authors:
7
+ - Jay Phillips
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-21 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rubigen
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.6
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: log4r
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 1.0.5
32
+ version:
33
+ description: Adhearsion is an open-source telephony development framework
34
+ email: Jay -at- Codemecca.com
35
+ executables:
36
+ - ahn
37
+ - ahnctl
38
+ - jahn
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - adhearsion.gemspec
45
+ - app_generators/ahn/ahn_generator.rb
46
+ - app_generators/ahn/templates/.ahnrc
47
+ - app_generators/ahn/templates/components/ami_remote/ami_remote.rb
48
+ - app_generators/ahn/templates/components/disabled/HOW_TO_ENABLE
49
+ - app_generators/ahn/templates/components/disabled/stomp_gateway/config.yml
50
+ - app_generators/ahn/templates/components/disabled/stomp_gateway/README.markdown
51
+ - app_generators/ahn/templates/components/disabled/stomp_gateway/stomp_gateway.rb
52
+ - app_generators/ahn/templates/components/restful_rpc/config.yml
53
+ - app_generators/ahn/templates/components/restful_rpc/example-client.rb
54
+ - app_generators/ahn/templates/components/restful_rpc/README.markdown
55
+ - app_generators/ahn/templates/components/restful_rpc/restful_rpc.rb
56
+ - app_generators/ahn/templates/components/simon_game/simon_game.rb
57
+ - app_generators/ahn/templates/config/startup.rb
58
+ - app_generators/ahn/templates/dialplan.rb
59
+ - app_generators/ahn/templates/events.rb
60
+ - app_generators/ahn/templates/Rakefile
61
+ - app_generators/ahn/templates/README
62
+ - app_generators/ahn/USAGE
63
+ - bin/ahn
64
+ - bin/ahnctl
65
+ - bin/jahn
66
+ - CHANGELOG
67
+ - EVENTS
68
+ - examples/asterisk_manager_interface/standalone.rb
69
+ - lib/adhearsion.rb
70
+ - lib/adhearsion/cli.rb
71
+ - lib/adhearsion/component_manager.rb
72
+ - lib/adhearsion/component_manager/spec_framework.rb
73
+ - lib/adhearsion/events_support.rb
74
+ - lib/adhearsion/foundation/all.rb
75
+ - lib/adhearsion/foundation/blank_slate.rb
76
+ - lib/adhearsion/foundation/custom_daemonizer.rb
77
+ - lib/adhearsion/foundation/event_socket.rb
78
+ - lib/adhearsion/foundation/future_resource.rb
79
+ - lib/adhearsion/foundation/global.rb
80
+ - lib/adhearsion/foundation/metaprogramming.rb
81
+ - lib/adhearsion/foundation/numeric.rb
82
+ - lib/adhearsion/foundation/pseudo_guid.rb
83
+ - lib/adhearsion/foundation/relationship_properties.rb
84
+ - lib/adhearsion/foundation/string.rb
85
+ - lib/adhearsion/foundation/synchronized_hash.rb
86
+ - lib/adhearsion/foundation/thread_safety.rb
87
+ - lib/adhearsion/host_definitions.rb
88
+ - lib/adhearsion/initializer.rb
89
+ - lib/adhearsion/initializer/asterisk.rb
90
+ - lib/adhearsion/initializer/configuration.rb
91
+ - lib/adhearsion/initializer/database.rb
92
+ - lib/adhearsion/initializer/drb.rb
93
+ - lib/adhearsion/initializer/freeswitch.rb
94
+ - lib/adhearsion/initializer/rails.rb
95
+ - lib/adhearsion/logging.rb
96
+ - lib/adhearsion/tasks.rb
97
+ - lib/adhearsion/tasks/database.rb
98
+ - lib/adhearsion/tasks/deprecations.rb
99
+ - lib/adhearsion/tasks/generating.rb
100
+ - lib/adhearsion/tasks/lint.rb
101
+ - lib/adhearsion/tasks/testing.rb
102
+ - lib/adhearsion/version.rb
103
+ - lib/adhearsion/voip/asterisk.rb
104
+ - lib/adhearsion/voip/asterisk/agi_server.rb
105
+ - lib/adhearsion/voip/asterisk/commands.rb
106
+ - lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb
107
+ - lib/adhearsion/voip/asterisk/config_generators/config_generator.rb
108
+ - lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb
109
+ - lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb
110
+ - lib/adhearsion/voip/asterisk/config_manager.rb
111
+ - lib/adhearsion/voip/asterisk/manager_interface.rb
112
+ - lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb
113
+ - lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb
114
+ - lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb
115
+ - lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl
116
+ - lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb
117
+ - lib/adhearsion/voip/asterisk/super_manager.rb
118
+ - lib/adhearsion/voip/call.rb
119
+ - lib/adhearsion/voip/call_routing.rb
120
+ - lib/adhearsion/voip/commands.rb
121
+ - lib/adhearsion/voip/constants.rb
122
+ - lib/adhearsion/voip/conveniences.rb
123
+ - lib/adhearsion/voip/dial_plan.rb
124
+ - lib/adhearsion/voip/dsl/dialing_dsl.rb
125
+ - lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb
126
+ - lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb
127
+ - lib/adhearsion/voip/dsl/dialplan/dispatcher.rb
128
+ - lib/adhearsion/voip/dsl/dialplan/parser.rb
129
+ - lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb
130
+ - lib/adhearsion/voip/dsl/numerical_string.rb
131
+ - lib/adhearsion/voip/freeswitch/basic_connection_manager.rb
132
+ - lib/adhearsion/voip/freeswitch/event_handler.rb
133
+ - lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb
134
+ - lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb
135
+ - lib/adhearsion/voip/freeswitch/oes_server.rb
136
+ - lib/adhearsion/voip/menu_state_machine/calculated_match.rb
137
+ - lib/adhearsion/voip/menu_state_machine/matchers.rb
138
+ - lib/adhearsion/voip/menu_state_machine/menu_builder.rb
139
+ - lib/adhearsion/voip/menu_state_machine/menu_class.rb
140
+ - lib/theatre.rb
141
+ - lib/theatre/callback_definition_loader.rb
142
+ - lib/theatre/guid.rb
143
+ - lib/theatre/invocation.rb
144
+ - lib/theatre/namespace_manager.rb
145
+ - lib/theatre/README.markdown
146
+ - lib/theatre/version.rb
147
+ - LICENSE
148
+ - Rakefile
149
+ - README.txt
150
+ has_rdoc: false
151
+ homepage: http://adhearsion.com
152
+ post_install_message:
153
+ rdoc_options: []
154
+
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: "0"
162
+ version:
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: "0"
168
+ version:
169
+ requirements: []
170
+
171
+ rubyforge_project: adhearsion
172
+ rubygems_version: 1.2.0
173
+ signing_key:
174
+ specification_version: 2
175
+ summary: Adhearsion, open-source telephony development framework
176
+ test_files: []
177
+