kenwiesner-adhearsioncw 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. data/CHANGELOG +26 -0
  2. data/EVENTS +11 -0
  3. data/LICENSE +456 -0
  4. data/Rakefile +127 -0
  5. data/adhearsion.gemspec +149 -0
  6. data/app_generators/ahn/USAGE +5 -0
  7. data/app_generators/ahn/ahn_generator.rb +91 -0
  8. data/app_generators/ahn/templates/.ahnrc +34 -0
  9. data/app_generators/ahn/templates/README +8 -0
  10. data/app_generators/ahn/templates/Rakefile +25 -0
  11. data/app_generators/ahn/templates/components/ami_remote/ami_remote.rb +15 -0
  12. data/app_generators/ahn/templates/components/disabled/HOW_TO_ENABLE +7 -0
  13. data/app_generators/ahn/templates/components/disabled/restful_rpc/README.markdown +11 -0
  14. data/app_generators/ahn/templates/components/disabled/restful_rpc/example-client.rb +48 -0
  15. data/app_generators/ahn/templates/components/disabled/restful_rpc/restful_rpc.rb +87 -0
  16. data/app_generators/ahn/templates/components/disabled/restful_rpc/restful_rpc.yml +34 -0
  17. data/app_generators/ahn/templates/components/disabled/restful_rpc/spec/restful_rpc_spec.rb +263 -0
  18. data/app_generators/ahn/templates/components/disabled/sandbox/sandbox.rb +104 -0
  19. data/app_generators/ahn/templates/components/disabled/sandbox/sandbox.yml +2 -0
  20. data/app_generators/ahn/templates/components/disabled/stomp_gateway/README.markdown +47 -0
  21. data/app_generators/ahn/templates/components/disabled/stomp_gateway/stomp_gateway.rb +34 -0
  22. data/app_generators/ahn/templates/components/disabled/stomp_gateway/stomp_gateway.yml +12 -0
  23. data/app_generators/ahn/templates/components/simon_game/simon_game.rb +56 -0
  24. data/app_generators/ahn/templates/config/startup.rb +50 -0
  25. data/app_generators/ahn/templates/dialplan.rb +3 -0
  26. data/app_generators/ahn/templates/events.rb +32 -0
  27. data/bin/ahn +28 -0
  28. data/bin/ahnctl +68 -0
  29. data/bin/jahn +42 -0
  30. data/examples/asterisk_manager_interface/standalone.rb +51 -0
  31. data/lib/adhearsion/cli.rb +223 -0
  32. data/lib/adhearsion/component_manager/component_tester.rb +55 -0
  33. data/lib/adhearsion/component_manager/spec_framework.rb +24 -0
  34. data/lib/adhearsion/component_manager.rb +207 -0
  35. data/lib/adhearsion/events_support.rb +84 -0
  36. data/lib/adhearsion/foundation/all.rb +9 -0
  37. data/lib/adhearsion/foundation/blank_slate.rb +5 -0
  38. data/lib/adhearsion/foundation/custom_daemonizer.rb +45 -0
  39. data/lib/adhearsion/foundation/event_socket.rb +203 -0
  40. data/lib/adhearsion/foundation/future_resource.rb +36 -0
  41. data/lib/adhearsion/foundation/global.rb +1 -0
  42. data/lib/adhearsion/foundation/metaprogramming.rb +17 -0
  43. data/lib/adhearsion/foundation/numeric.rb +13 -0
  44. data/lib/adhearsion/foundation/pseudo_guid.rb +10 -0
  45. data/lib/adhearsion/foundation/relationship_properties.rb +42 -0
  46. data/lib/adhearsion/foundation/string.rb +26 -0
  47. data/lib/adhearsion/foundation/synchronized_hash.rb +96 -0
  48. data/lib/adhearsion/foundation/thread_safety.rb +7 -0
  49. data/lib/adhearsion/host_definitions.rb +67 -0
  50. data/lib/adhearsion/initializer/asterisk.rb +81 -0
  51. data/lib/adhearsion/initializer/configuration.rb +254 -0
  52. data/lib/adhearsion/initializer/database.rb +50 -0
  53. data/lib/adhearsion/initializer/drb.rb +31 -0
  54. data/lib/adhearsion/initializer/freeswitch.rb +22 -0
  55. data/lib/adhearsion/initializer/rails.rb +41 -0
  56. data/lib/adhearsion/initializer.rb +373 -0
  57. data/lib/adhearsion/logging.rb +92 -0
  58. data/lib/adhearsion/tasks/database.rb +5 -0
  59. data/lib/adhearsion/tasks/deprecations.rb +59 -0
  60. data/lib/adhearsion/tasks/generating.rb +20 -0
  61. data/lib/adhearsion/tasks/lint.rb +4 -0
  62. data/lib/adhearsion/tasks/testing.rb +37 -0
  63. data/lib/adhearsion/tasks.rb +16 -0
  64. data/lib/adhearsion/version.rb +9 -0
  65. data/lib/adhearsion/voip/asterisk/agi_server.rb +84 -0
  66. data/lib/adhearsion/voip/asterisk/commands.rb +1314 -0
  67. data/lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb +140 -0
  68. data/lib/adhearsion/voip/asterisk/config_generators/config_generator.rb +101 -0
  69. data/lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb +250 -0
  70. data/lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb +240 -0
  71. data/lib/adhearsion/voip/asterisk/config_manager.rb +71 -0
  72. data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb +1589 -0
  73. data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb +286 -0
  74. data/lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb +78 -0
  75. data/lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl +87 -0
  76. data/lib/adhearsion/voip/asterisk/manager_interface.rb +597 -0
  77. data/lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb +80 -0
  78. data/lib/adhearsion/voip/asterisk/super_manager.rb +19 -0
  79. data/lib/adhearsion/voip/asterisk.rb +4 -0
  80. data/lib/adhearsion/voip/call.rb +453 -0
  81. data/lib/adhearsion/voip/call_routing.rb +64 -0
  82. data/lib/adhearsion/voip/commands.rb +9 -0
  83. data/lib/adhearsion/voip/constants.rb +39 -0
  84. data/lib/adhearsion/voip/conveniences.rb +18 -0
  85. data/lib/adhearsion/voip/dial_plan.rb +218 -0
  86. data/lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb +37 -0
  87. data/lib/adhearsion/voip/dsl/dialing_dsl.rb +151 -0
  88. data/lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb +27 -0
  89. data/lib/adhearsion/voip/dsl/dialplan/dispatcher.rb +124 -0
  90. data/lib/adhearsion/voip/dsl/dialplan/parser.rb +71 -0
  91. data/lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb +16 -0
  92. data/lib/adhearsion/voip/dsl/numerical_string.rb +117 -0
  93. data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +48 -0
  94. data/lib/adhearsion/voip/freeswitch/event_handler.rb +58 -0
  95. data/lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb +129 -0
  96. data/lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb +38 -0
  97. data/lib/adhearsion/voip/freeswitch/oes_server.rb +195 -0
  98. data/lib/adhearsion/voip/menu_state_machine/calculated_match.rb +80 -0
  99. data/lib/adhearsion/voip/menu_state_machine/matchers.rb +123 -0
  100. data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +58 -0
  101. data/lib/adhearsion/voip/menu_state_machine/menu_class.rb +149 -0
  102. data/lib/adhearsion.rb +37 -0
  103. data/lib/theatre/README.markdown +64 -0
  104. data/lib/theatre/callback_definition_loader.rb +84 -0
  105. data/lib/theatre/guid.rb +23 -0
  106. data/lib/theatre/invocation.rb +121 -0
  107. data/lib/theatre/namespace_manager.rb +153 -0
  108. data/lib/theatre/version.rb +2 -0
  109. data/lib/theatre.rb +151 -0
  110. metadata +182 -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,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kenwiesner-adhearsioncw
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.3
5
+ platform: ruby
6
+ authors:
7
+ - Ken Wiesner
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
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.0.6
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: log4r
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.5
34
+ version:
35
+ description: Adhearsion is an open-source telephony development framework. This is a fork to add CallWeaver compatibility.
36
+ email: kenwiesner -at- me.com
37
+ executables:
38
+ - ahn
39
+ - ahnctl
40
+ - jahn
41
+ extensions: []
42
+
43
+ extra_rdoc_files: []
44
+
45
+ files:
46
+ - adhearsion.gemspec
47
+ - app_generators/ahn/ahn_generator.rb
48
+ - app_generators/ahn/templates/.ahnrc
49
+ - app_generators/ahn/templates/components/ami_remote/ami_remote.rb
50
+ - app_generators/ahn/templates/components/disabled/HOW_TO_ENABLE
51
+ - app_generators/ahn/templates/components/disabled/stomp_gateway/stomp_gateway.yml
52
+ - app_generators/ahn/templates/components/disabled/stomp_gateway/README.markdown
53
+ - app_generators/ahn/templates/components/disabled/stomp_gateway/stomp_gateway.rb
54
+ - app_generators/ahn/templates/components/disabled/sandbox/sandbox.rb
55
+ - app_generators/ahn/templates/components/disabled/sandbox/sandbox.yml
56
+ - app_generators/ahn/templates/components/disabled/restful_rpc/restful_rpc.yml
57
+ - app_generators/ahn/templates/components/disabled/restful_rpc/example-client.rb
58
+ - app_generators/ahn/templates/components/disabled/restful_rpc/README.markdown
59
+ - app_generators/ahn/templates/components/disabled/restful_rpc/restful_rpc.rb
60
+ - app_generators/ahn/templates/components/disabled/restful_rpc/spec/restful_rpc_spec.rb
61
+ - app_generators/ahn/templates/components/simon_game/simon_game.rb
62
+ - app_generators/ahn/templates/config/startup.rb
63
+ - app_generators/ahn/templates/dialplan.rb
64
+ - app_generators/ahn/templates/events.rb
65
+ - app_generators/ahn/templates/Rakefile
66
+ - app_generators/ahn/templates/README
67
+ - app_generators/ahn/USAGE
68
+ - bin/ahn
69
+ - bin/ahnctl
70
+ - bin/jahn
71
+ - CHANGELOG
72
+ - EVENTS
73
+ - examples/asterisk_manager_interface/standalone.rb
74
+ - lib/adhearsion.rb
75
+ - lib/adhearsion/cli.rb
76
+ - lib/adhearsion/component_manager.rb
77
+ - lib/adhearsion/component_manager/component_tester.rb
78
+ - lib/adhearsion/component_manager/spec_framework.rb
79
+ - lib/adhearsion/events_support.rb
80
+ - lib/adhearsion/foundation/all.rb
81
+ - lib/adhearsion/foundation/blank_slate.rb
82
+ - lib/adhearsion/foundation/custom_daemonizer.rb
83
+ - lib/adhearsion/foundation/event_socket.rb
84
+ - lib/adhearsion/foundation/future_resource.rb
85
+ - lib/adhearsion/foundation/global.rb
86
+ - lib/adhearsion/foundation/metaprogramming.rb
87
+ - lib/adhearsion/foundation/numeric.rb
88
+ - lib/adhearsion/foundation/pseudo_guid.rb
89
+ - lib/adhearsion/foundation/relationship_properties.rb
90
+ - lib/adhearsion/foundation/string.rb
91
+ - lib/adhearsion/foundation/synchronized_hash.rb
92
+ - lib/adhearsion/foundation/thread_safety.rb
93
+ - lib/adhearsion/host_definitions.rb
94
+ - lib/adhearsion/initializer.rb
95
+ - lib/adhearsion/initializer/asterisk.rb
96
+ - lib/adhearsion/initializer/configuration.rb
97
+ - lib/adhearsion/initializer/database.rb
98
+ - lib/adhearsion/initializer/drb.rb
99
+ - lib/adhearsion/initializer/freeswitch.rb
100
+ - lib/adhearsion/initializer/rails.rb
101
+ - lib/adhearsion/logging.rb
102
+ - lib/adhearsion/tasks.rb
103
+ - lib/adhearsion/tasks/database.rb
104
+ - lib/adhearsion/tasks/deprecations.rb
105
+ - lib/adhearsion/tasks/generating.rb
106
+ - lib/adhearsion/tasks/lint.rb
107
+ - lib/adhearsion/tasks/testing.rb
108
+ - lib/adhearsion/version.rb
109
+ - lib/adhearsion/voip/asterisk.rb
110
+ - lib/adhearsion/voip/asterisk/agi_server.rb
111
+ - lib/adhearsion/voip/asterisk/commands.rb
112
+ - lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb
113
+ - lib/adhearsion/voip/asterisk/config_generators/config_generator.rb
114
+ - lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb
115
+ - lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb
116
+ - lib/adhearsion/voip/asterisk/config_manager.rb
117
+ - lib/adhearsion/voip/asterisk/manager_interface.rb
118
+ - lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb
119
+ - lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb
120
+ - lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb
121
+ - lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl
122
+ - lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb
123
+ - lib/adhearsion/voip/asterisk/super_manager.rb
124
+ - lib/adhearsion/voip/call.rb
125
+ - lib/adhearsion/voip/call_routing.rb
126
+ - lib/adhearsion/voip/commands.rb
127
+ - lib/adhearsion/voip/constants.rb
128
+ - lib/adhearsion/voip/conveniences.rb
129
+ - lib/adhearsion/voip/dial_plan.rb
130
+ - lib/adhearsion/voip/dsl/dialing_dsl.rb
131
+ - lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb
132
+ - lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb
133
+ - lib/adhearsion/voip/dsl/dialplan/dispatcher.rb
134
+ - lib/adhearsion/voip/dsl/dialplan/parser.rb
135
+ - lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb
136
+ - lib/adhearsion/voip/dsl/numerical_string.rb
137
+ - lib/adhearsion/voip/freeswitch/basic_connection_manager.rb
138
+ - lib/adhearsion/voip/freeswitch/event_handler.rb
139
+ - lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb
140
+ - lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb
141
+ - lib/adhearsion/voip/freeswitch/oes_server.rb
142
+ - lib/adhearsion/voip/menu_state_machine/calculated_match.rb
143
+ - lib/adhearsion/voip/menu_state_machine/matchers.rb
144
+ - lib/adhearsion/voip/menu_state_machine/menu_builder.rb
145
+ - lib/adhearsion/voip/menu_state_machine/menu_class.rb
146
+ - lib/theatre.rb
147
+ - lib/theatre/callback_definition_loader.rb
148
+ - lib/theatre/guid.rb
149
+ - lib/theatre/invocation.rb
150
+ - lib/theatre/namespace_manager.rb
151
+ - lib/theatre/README.markdown
152
+ - lib/theatre/version.rb
153
+ - LICENSE
154
+ - Rakefile
155
+ has_rdoc: false
156
+ homepage: http://adhearsion.com
157
+ post_install_message:
158
+ rdoc_options: []
159
+
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: "0"
167
+ version:
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: "0"
173
+ version:
174
+ requirements: []
175
+
176
+ rubyforge_project: adhearsion
177
+ rubygems_version: 1.2.0
178
+ signing_key:
179
+ specification_version: 2
180
+ summary: Adhearsion, open-source telephony development framework
181
+ test_files: []
182
+