adhearsion 1.2.6 → 2.0.0.alpha1

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 (236) hide show
  1. data/.gitignore +17 -10
  2. data/CHANGELOG.md +273 -0
  3. data/Gemfile +1 -1
  4. data/Guardfile +17 -0
  5. data/README.markdown +61 -9
  6. data/Rakefile +16 -48
  7. data/adhearsion.gemspec +21 -7
  8. data/bin/ahn +3 -1
  9. data/cucumber.yml +4 -0
  10. data/features/app_generator.feature +42 -0
  11. data/features/cli.feature +108 -0
  12. data/features/step_definitions/app_generator_steps.rb +6 -0
  13. data/features/step_definitions/cli_steps.rb +74 -0
  14. data/features/support/aruba_helper.rb +22 -0
  15. data/features/support/env.rb +37 -0
  16. data/features/support/utils.rb +8 -0
  17. data/lib/adhearsion.rb +85 -41
  18. data/lib/adhearsion/call.rb +176 -0
  19. data/lib/adhearsion/call_controller.rb +134 -0
  20. data/lib/adhearsion/call_controller/dial.rb +70 -0
  21. data/lib/adhearsion/call_controller/input.rb +173 -0
  22. data/lib/adhearsion/call_controller/menu.rb +124 -0
  23. data/lib/adhearsion/call_controller/output.rb +267 -0
  24. data/lib/adhearsion/call_controller/record.rb +42 -0
  25. data/lib/adhearsion/call_controller/utility.rb +60 -0
  26. data/lib/adhearsion/calls.rb +81 -0
  27. data/lib/adhearsion/cli.rb +1 -3
  28. data/lib/adhearsion/cli_commands.rb +142 -0
  29. data/lib/adhearsion/configuration.rb +149 -0
  30. data/lib/adhearsion/console.rb +19 -8
  31. data/lib/adhearsion/dialplan_controller.rb +9 -0
  32. data/lib/adhearsion/events.rb +84 -0
  33. data/lib/adhearsion/foundation/all.rb +0 -7
  34. data/lib/adhearsion/foundation/custom_daemonizer.rb +4 -6
  35. data/lib/adhearsion/foundation/exception_handler.rb +9 -0
  36. data/lib/adhearsion/foundation/object.rb +26 -8
  37. data/lib/adhearsion/foundation/synchronized_hash.rb +3 -6
  38. data/lib/adhearsion/foundation/thread_safety.rb +17 -1
  39. data/lib/adhearsion/generators/app/app_generator.rb +4 -13
  40. data/lib/adhearsion/generators/app/templates/Gemfile +10 -5
  41. data/lib/adhearsion/generators/app/templates/Procfile +1 -0
  42. data/lib/adhearsion/generators/app/templates/README.md +28 -0
  43. data/lib/adhearsion/generators/app/templates/config/adhearsion.rb +41 -0
  44. data/lib/adhearsion/generators/app/templates/{components/simon_game → lib}/simon_game.rb +6 -18
  45. data/lib/adhearsion/generators/app/templates/script/ahn +2 -2
  46. data/lib/adhearsion/initializer.rb +151 -293
  47. data/lib/adhearsion/initializer/logging.rb +33 -0
  48. data/lib/adhearsion/logging.rb +65 -69
  49. data/lib/adhearsion/menu_dsl.rb +15 -0
  50. data/lib/adhearsion/menu_dsl/calculated_match.rb +39 -0
  51. data/lib/adhearsion/menu_dsl/calculated_match_collection.rb +41 -0
  52. data/lib/adhearsion/menu_dsl/fixnum_match_calculator.rb +18 -0
  53. data/lib/adhearsion/menu_dsl/match_calculator.rb +36 -0
  54. data/lib/adhearsion/{voip/menu_state_machine/menu_class.rb → menu_dsl/menu.rb} +38 -40
  55. data/lib/adhearsion/menu_dsl/menu_builder.rb +69 -0
  56. data/lib/adhearsion/menu_dsl/range_match_calculator.rb +55 -0
  57. data/lib/adhearsion/menu_dsl/string_match_calculator.rb +21 -0
  58. data/lib/adhearsion/outbound_call.rb +64 -0
  59. data/lib/adhearsion/plugin.rb +319 -0
  60. data/lib/adhearsion/plugin/collection.rb +19 -0
  61. data/lib/adhearsion/plugin/initializer.rb +37 -0
  62. data/lib/adhearsion/plugin/methods_container.rb +6 -0
  63. data/lib/adhearsion/process.rb +94 -0
  64. data/lib/adhearsion/punchblock_plugin.rb +29 -0
  65. data/lib/adhearsion/punchblock_plugin/initializer.rb +137 -0
  66. data/lib/adhearsion/router.rb +30 -0
  67. data/lib/adhearsion/router/route.rb +42 -0
  68. data/lib/adhearsion/script_ahn_loader.rb +2 -2
  69. data/lib/adhearsion/tasks.rb +14 -9
  70. data/lib/adhearsion/tasks/configuration.rb +26 -0
  71. data/lib/adhearsion/tasks/plugins.rb +17 -0
  72. data/lib/adhearsion/version.rb +8 -14
  73. data/spec/adhearsion/call_controller/dial_spec.rb +138 -0
  74. data/spec/adhearsion/call_controller/input_spec.rb +278 -0
  75. data/spec/adhearsion/call_controller/menu_spec.rb +120 -0
  76. data/spec/adhearsion/call_controller/output_spec.rb +466 -0
  77. data/spec/adhearsion/call_controller/record_spec.rb +125 -0
  78. data/spec/adhearsion/call_controller_spec.rb +395 -0
  79. data/spec/adhearsion/call_spec.rb +438 -0
  80. data/spec/adhearsion/calls_spec.rb +47 -0
  81. data/spec/adhearsion/configuration_spec.rb +308 -0
  82. data/spec/adhearsion/dialplan_controller_spec.rb +26 -0
  83. data/spec/adhearsion/events_spec.rb +112 -0
  84. data/spec/adhearsion/initializer/logging_spec.rb +58 -0
  85. data/spec/adhearsion/initializer_spec.rb +209 -122
  86. data/spec/adhearsion/logging_spec.rb +58 -47
  87. data/spec/adhearsion/menu_dsl/calculated_match_collection_spec.rb +56 -0
  88. data/spec/adhearsion/menu_dsl/calculated_match_spec.rb +57 -0
  89. data/spec/adhearsion/menu_dsl/fixnum_match_calculator_spec.rb +33 -0
  90. data/spec/adhearsion/menu_dsl/match_calculator_spec.rb +13 -0
  91. data/spec/adhearsion/menu_dsl/menu_builder_spec.rb +118 -0
  92. data/spec/adhearsion/menu_dsl/menu_spec.rb +210 -0
  93. data/spec/adhearsion/menu_dsl/range_match_calculator_spec.rb +28 -0
  94. data/spec/adhearsion/menu_dsl/string_match_calculator_spec.rb +36 -0
  95. data/spec/adhearsion/menu_dsl_spec.rb +12 -0
  96. data/spec/adhearsion/outbound_call_spec.rb +174 -0
  97. data/spec/adhearsion/plugin_spec.rb +489 -0
  98. data/spec/adhearsion/process_spec.rb +34 -0
  99. data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +294 -0
  100. data/spec/adhearsion/router/route_spec.rb +99 -0
  101. data/spec/adhearsion/router_spec.rb +106 -0
  102. data/spec/adhearsion_spec.rb +46 -0
  103. data/spec/spec_helper.rb +14 -14
  104. data/spec/support/call_controller_test_helpers.rb +48 -0
  105. data/spec/support/initializer_stubs.rb +8 -13
  106. data/spec/support/punchblock_mocks.rb +6 -0
  107. metadata +255 -253
  108. data/CHANGELOG +0 -174
  109. data/bin/ahnctl +0 -68
  110. data/bin/jahn +0 -43
  111. data/examples/asterisk_manager_interface/standalone.rb +0 -51
  112. data/lib/adhearsion/commands.rb +0 -302
  113. data/lib/adhearsion/component_manager.rb +0 -278
  114. data/lib/adhearsion/component_manager/component_tester.rb +0 -54
  115. data/lib/adhearsion/component_manager/spec_framework.rb +0 -18
  116. data/lib/adhearsion/events_support.rb +0 -65
  117. data/lib/adhearsion/foundation/blank_slate.rb +0 -3
  118. data/lib/adhearsion/foundation/event_socket.rb +0 -205
  119. data/lib/adhearsion/foundation/future_resource.rb +0 -36
  120. data/lib/adhearsion/foundation/metaprogramming.rb +0 -17
  121. data/lib/adhearsion/foundation/numeric.rb +0 -13
  122. data/lib/adhearsion/foundation/pseudo_guid.rb +0 -10
  123. data/lib/adhearsion/foundation/relationship_properties.rb +0 -42
  124. data/lib/adhearsion/foundation/string.rb +0 -26
  125. data/lib/adhearsion/generators/app/templates/.ahnrc +0 -34
  126. data/lib/adhearsion/generators/app/templates/README +0 -8
  127. data/lib/adhearsion/generators/app/templates/components/ami_remote/ami_remote.rb +0 -15
  128. data/lib/adhearsion/generators/app/templates/components/disabled/HOW_TO_ENABLE +0 -7
  129. data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/README.markdown +0 -47
  130. data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/stomp_gateway.rb +0 -34
  131. data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/stomp_gateway.yml +0 -12
  132. data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/README.markdown +0 -3
  133. data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/xmpp_gateway.rb +0 -11
  134. data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/xmpp_gateway.yml +0 -0
  135. data/lib/adhearsion/generators/app/templates/config/startup.rb +0 -81
  136. data/lib/adhearsion/generators/app/templates/dialplan.rb +0 -3
  137. data/lib/adhearsion/generators/app/templates/events.rb +0 -33
  138. data/lib/adhearsion/host_definitions.rb +0 -67
  139. data/lib/adhearsion/initializer/asterisk.rb +0 -86
  140. data/lib/adhearsion/initializer/configuration.rb +0 -324
  141. data/lib/adhearsion/initializer/database.rb +0 -60
  142. data/lib/adhearsion/initializer/drb.rb +0 -31
  143. data/lib/adhearsion/initializer/freeswitch.rb +0 -22
  144. data/lib/adhearsion/initializer/ldap.rb +0 -57
  145. data/lib/adhearsion/initializer/rails.rb +0 -41
  146. data/lib/adhearsion/initializer/xmpp.rb +0 -42
  147. data/lib/adhearsion/tasks/components.rb +0 -32
  148. data/lib/adhearsion/tasks/database.rb +0 -5
  149. data/lib/adhearsion/tasks/deprecations.rb +0 -59
  150. data/lib/adhearsion/tasks/generating.rb +0 -20
  151. data/lib/adhearsion/tasks/lint.rb +0 -4
  152. data/lib/adhearsion/voip/asterisk.rb +0 -4
  153. data/lib/adhearsion/voip/asterisk/agi_server.rb +0 -121
  154. data/lib/adhearsion/voip/asterisk/commands.rb +0 -1966
  155. data/lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb +0 -140
  156. data/lib/adhearsion/voip/asterisk/config_generators/config_generator.rb +0 -102
  157. data/lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb +0 -250
  158. data/lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb +0 -240
  159. data/lib/adhearsion/voip/asterisk/config_manager.rb +0 -64
  160. data/lib/adhearsion/voip/asterisk/manager_interface.rb +0 -697
  161. data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb +0 -1681
  162. data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb +0 -341
  163. data/lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb +0 -78
  164. data/lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl +0 -87
  165. data/lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb +0 -80
  166. data/lib/adhearsion/voip/call.rb +0 -521
  167. data/lib/adhearsion/voip/call_routing.rb +0 -64
  168. data/lib/adhearsion/voip/commands.rb +0 -17
  169. data/lib/adhearsion/voip/constants.rb +0 -39
  170. data/lib/adhearsion/voip/conveniences.rb +0 -18
  171. data/lib/adhearsion/voip/dial_plan.rb +0 -252
  172. data/lib/adhearsion/voip/dsl/dialing_dsl.rb +0 -151
  173. data/lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb +0 -37
  174. data/lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb +0 -27
  175. data/lib/adhearsion/voip/dsl/dialplan/dispatcher.rb +0 -124
  176. data/lib/adhearsion/voip/dsl/dialplan/parser.rb +0 -69
  177. data/lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb +0 -16
  178. data/lib/adhearsion/voip/dsl/numerical_string.rb +0 -128
  179. data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +0 -48
  180. data/lib/adhearsion/voip/freeswitch/event_handler.rb +0 -58
  181. data/lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb +0 -129
  182. data/lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb +0 -38
  183. data/lib/adhearsion/voip/freeswitch/oes_server.rb +0 -195
  184. data/lib/adhearsion/voip/menu_state_machine/calculated_match.rb +0 -80
  185. data/lib/adhearsion/voip/menu_state_machine/matchers.rb +0 -123
  186. data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +0 -57
  187. data/lib/adhearsion/xmpp/connection.rb +0 -61
  188. data/lib/theatre.rb +0 -147
  189. data/lib/theatre/README.markdown +0 -64
  190. data/lib/theatre/callback_definition_loader.rb +0 -86
  191. data/lib/theatre/guid.rb +0 -23
  192. data/lib/theatre/invocation.rb +0 -131
  193. data/lib/theatre/namespace_manager.rb +0 -153
  194. data/lib/theatre/version.rb +0 -2
  195. data/spec/adhearsion/cli_spec.rb +0 -306
  196. data/spec/adhearsion/component_manager_spec.rb +0 -292
  197. data/spec/adhearsion/constants_spec.rb +0 -8
  198. data/spec/adhearsion/drb_spec.rb +0 -65
  199. data/spec/adhearsion/fixtures/dialplan.rb +0 -3
  200. data/spec/adhearsion/foundation/event_socket_spec.rb +0 -168
  201. data/spec/adhearsion/host_definitions_spec.rb +0 -79
  202. data/spec/adhearsion/initializer/configuration_spec.rb +0 -291
  203. data/spec/adhearsion/initializer/loading_spec.rb +0 -154
  204. data/spec/adhearsion/initializer/paths_spec.rb +0 -74
  205. data/spec/adhearsion/relationship_properties_spec.rb +0 -54
  206. data/spec/adhearsion/voip/asterisk/agi_server_spec.rb +0 -473
  207. data/spec/adhearsion/voip/asterisk/ami/ami_spec.rb +0 -550
  208. data/spec/adhearsion/voip/asterisk/ami/lexer/ami_fixtures.yml +0 -30
  209. data/spec/adhearsion/voip/asterisk/ami/lexer/lexer_story +0 -291
  210. data/spec/adhearsion/voip/asterisk/ami/lexer/lexer_story.rb +0 -241
  211. data/spec/adhearsion/voip/asterisk/ami/lexer/story_helper.rb +0 -124
  212. data/spec/adhearsion/voip/asterisk/commands_spec.rb +0 -3241
  213. data/spec/adhearsion/voip/asterisk/config_file_generators/agents_spec.rb +0 -251
  214. data/spec/adhearsion/voip/asterisk/config_file_generators/queues_spec.rb +0 -323
  215. data/spec/adhearsion/voip/asterisk/config_file_generators/voicemail_spec.rb +0 -306
  216. data/spec/adhearsion/voip/asterisk/config_manager_spec.rb +0 -127
  217. data/spec/adhearsion/voip/asterisk/menu_command/calculated_match_spec.rb +0 -109
  218. data/spec/adhearsion/voip/asterisk/menu_command/matchers_spec.rb +0 -97
  219. data/spec/adhearsion/voip/call_routing_spec.rb +0 -125
  220. data/spec/adhearsion/voip/dialplan_manager_spec.rb +0 -468
  221. data/spec/adhearsion/voip/dsl/dialing_dsl_spec.rb +0 -270
  222. data/spec/adhearsion/voip/dsl/dispatcher_spec.rb +0 -82
  223. data/spec/adhearsion/voip/dsl/dispatcher_spec_helper.rb +0 -45
  224. data/spec/adhearsion/voip/dsl/parser_spec.rb +0 -69
  225. data/spec/adhearsion/voip/freeswitch/basic_connection_manager_spec.rb +0 -39
  226. data/spec/adhearsion/voip/freeswitch/inbound_connection_manager_spec.rb +0 -39
  227. data/spec/adhearsion/voip/freeswitch/oes_server_spec.rb +0 -9
  228. data/spec/adhearsion/voip/numerical_string_spec.rb +0 -61
  229. data/spec/adhearsion/voip/phone_number_spec.rb +0 -45
  230. data/spec/support/the_following_code.rb +0 -3
  231. data/spec/theatre/dsl_examples/simple_before_call.rb +0 -7
  232. data/spec/theatre/dsl_spec.rb +0 -69
  233. data/spec/theatre/invocation_spec.rb +0 -182
  234. data/spec/theatre/namespace_spec.rb +0 -125
  235. data/spec/theatre/spec_helper_spec.rb +0 -28
  236. data/spec/theatre/theatre_class_spec.rb +0 -148
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
- require 'adhearsion/voip/freeswitch/basic_connection_manager'
3
-
4
- include Adhearsion::VoIP::FreeSwitch
5
-
6
- describe "FreeSwitch BasicConnectionManager" do
7
- attr_reader :manager, :io
8
- before(:each) do
9
- @io = StringIO.new
10
- @manager = BasicConnectionManager.new io
11
- end
12
-
13
- it "<<() should add two newlines" do
14
- manager << "foobar"
15
- io.string.should == "foobar\n\n"
16
- end
17
-
18
- end
19
-
20
- describe "FreeSwitch BasicConnectionManager's header parser" do
21
- it "YAML-like headers are read properly" do
22
- header = {
23
- "Foo-Bar" => "bar",
24
- "Qaz-Monkey-Charlie-Zebra" => "qwerty"
25
- }
26
-
27
- string_header = header.inject("") do |string, (key, value)|
28
- string + "#{key}: #{value}\n"
29
- end
30
-
31
- string_header << "\n"
32
-
33
- manager = BasicConnectionManager.new StringIO.new(string_header)
34
- manager.get_raw_header.should == string_header.strip
35
-
36
- manager = BasicConnectionManager.new StringIO.new(string_header)
37
- manager.get_header.should == header
38
- end
39
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
- require 'adhearsion/voip/freeswitch/inbound_connection_manager'
3
- include Adhearsion::VoIP::FreeSwitch
4
-
5
- describe "A FreeSwitch InboundConnectionManager" do
6
-
7
- it "authenticatating with the given password" do
8
- manager = InboundConnectionManager.new io_mock
9
- manager.login password
10
- end
11
-
12
- it "a hash is accepted when creating a new InboundConnectionManager" do
13
- host, port = "myhost.mydomain", 31337
14
-
15
- flexmock(TCPSocket).should_receive(:new).once.with(host, port).and_return io_mock
16
-
17
- InboundConnectionManager.new :host => host, :port => port, :pass => password
18
- end
19
-
20
- it "an IO is accepted when creating a new InboundConnectionManager"
21
-
22
- private
23
- def io_mock
24
- @io_mock ||=
25
- begin
26
- io_mock = StringIO.new
27
- flexmock(io_mock) do |io|
28
- io.should_receive(:write).with("auth #{password}\n\n")
29
- io.should_receive(:gets).and_return "connection: kthnx\n",
30
- "\n", "login: +OK\n", "\n"
31
- end
32
- io_mock
33
- end
34
- end
35
-
36
- def password
37
- "supersecret"
38
- end
39
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
- require File.dirname(__FILE__) + "/../dsl/dispatcher_spec_helper"
3
- require 'adhearsion/voip/freeswitch/oes_server'
4
-
5
-
6
- describe "Adhearsion::VoIP::FreeSwitch::OesServer::OesDispatcher" do
7
- include StandardDispatcherBehavior
8
- before(:each) { @dispatcher_class = Adhearsion::VoIP::FreeSwitch::OesServer::OesDispatcher }
9
- end
@@ -1,61 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'adhearsion/voip/dsl/numerical_string'
4
- require 'adhearsion/voip/constants'
5
-
6
- describe "A NumericalString" do
7
- # FIXME: This test is fundamentally broken in Ruby 1.9.
8
- # See https://adhearsion.lighthouseapp.com/projects/5871/tickets/127-ruby-19-and-numericalstring-comparisons-in-case-statements
9
- # The suggested workaround is to cast the object to a string:
10
- # case numerical_string_object.to_s
11
- # when "0987" then ...
12
- # end
13
- # it "should appear to be behave like a Fixnum in a case statement" do
14
- # case numerical_string_for("123")
15
- # when 123 then true
16
- # else false
17
- # end.should be true
18
- #
19
- # case numerical_string_for("0987")
20
- # when 987 then true
21
- # else false
22
- # end.should be true
23
- # end
24
-
25
- it "should appear to behave like a String in a case statement" do
26
- numerical_string_for("123").should === "123"
27
- numerical_string_for("0987").should === "0987"
28
- end
29
-
30
- it "when compared against a Range that contains the numeric equivalent, the NumericalString is seen as a member" do
31
- (100..200).should === numerical_string_for("150")
32
- (100..200).should === numerical_string_for("0150")
33
- (100..200).should_not === numerical_string_for("1000000")
34
- end
35
-
36
- it "comparing against a regular expression works" do
37
- %r|^\d+$|.should === numerical_string_for("027316287")
38
- end
39
-
40
- it "checking if a string representation of a number starts with a leading zero" do
41
- with_leading_zeros = %w(01 01234 01.23 01.2)
42
- without_leading_zeros = %w(1 1.2 0 0.0)
43
-
44
- with_leading_zeros.each do |number|
45
- numerical_string.starts_with_leading_zero?(number).should_not be false
46
- end
47
-
48
- without_leading_zeros.each do |number|
49
- numerical_string.starts_with_leading_zero?(number).should_not be true
50
- end
51
- end
52
-
53
- private
54
- def numerical_string
55
- Adhearsion::VoIP::DSL::NumericalString
56
- end
57
-
58
- def numerical_string_for(string)
59
- numerical_string.new(string)
60
- end
61
- end
@@ -1,45 +0,0 @@
1
- require 'spec_helper'
2
- require 'adhearsion/voip/constants'
3
- require 'adhearsion/voip/dsl/numerical_string'
4
-
5
-
6
- # Use cases...
7
- # case extension
8
- # when US_NUMBER
9
- # when (100..200)
10
- # when _('12Z')
11
- # when 123
12
- # when "123"
13
- # end
14
-
15
- def should_be_nil_or_false(arg)
16
- [nil, false].include?(arg).should == true
17
- end
18
-
19
- def should_not_be_nil_or_false(arg)
20
- [nil, false].include?(arg).should == false
21
- end
22
-
23
- describe "A PhoneNumber" do
24
-
25
- it "should have an ISN pattern-matching method" do
26
- should_be_nil_or_false Adhearsion::VoIP::DSL::PhoneNumber.new("0115544332211").isn?
27
- should_not_be_nil_or_false Adhearsion::VoIP::DSL::PhoneNumber.new("1*548").isn?
28
- end
29
-
30
- it "should have a US local number pattern-matching method" do
31
- should_be_nil_or_false Adhearsion::VoIP::DSL::PhoneNumber.new("18887776665555").us_local_number?
32
- should_be_nil_or_false Adhearsion::VoIP::DSL::PhoneNumber.new("18887776665555").us_national_number?
33
-
34
- should_be_nil_or_false Adhearsion::VoIP::DSL::PhoneNumber.new("8887776665555").us_local_number?
35
- should_be_nil_or_false Adhearsion::VoIP::DSL::PhoneNumber.new("8887776665555").us_national_number?
36
-
37
- should_not_be_nil_or_false Adhearsion::VoIP::DSL::PhoneNumber.new("4445555").us_local_number?
38
- should_be_nil_or_false Adhearsion::VoIP::DSL::PhoneNumber.new("4445555").us_national_number?
39
- end
40
-
41
- it "should convert from vanity numbers properly" do
42
- Adhearsion::VoIP::DSL::PhoneNumber.from_vanity("1-800-FUDGEME").should == "18003834363"
43
- end
44
-
45
- end
@@ -1,3 +0,0 @@
1
- class Object
2
- alias :the_following_code :lambda
3
- end
@@ -1,7 +0,0 @@
1
- =begin YAML
2
- namespaces:
3
- - ["asterisk", "before_call"]
4
- =end
5
- events.asterisk.before_call.each do |call|
6
- call.variables[:channel]
7
- end
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class Example
4
- attr_reader :name, :yaml, :metadata, :file
5
-
6
- def initialize(name)
7
- @name = name.to_sym
8
- @file = File.expand_path(File.dirname(__FILE__) + "/dsl_examples/#{name}.rb")
9
- @yaml = file_contents[/=begin YAML\n(.+?)\n=end/m, 1]
10
- @metadata = @yaml.nil? ? nil : YAML.load(@yaml)
11
- end
12
-
13
- def file_contents
14
- File.read @file
15
- end
16
-
17
- def register_namespaces_on(obj)
18
- obj = obj.namespace_manager if obj.kind_of? Theatre::Theatre
19
- namespaces = metadata["namespaces"]
20
- if namespaces && namespaces.kind_of?(Array) && namespaces.any?
21
- namespaces.each do |namespace|
22
- obj.register_namespace_name namespace
23
- end
24
- end
25
- obj
26
- end
27
- end
28
-
29
- describe "CallbackDefinitionContainer" do
30
-
31
- it "should successfully load the :simple_before_call example" do
32
- example = Example.new(:simple_before_call)
33
- theatre = Theatre::Theatre.new
34
- example.register_namespaces_on theatre
35
-
36
- flexmock(theatre.namespace_manager).should_receive(:register_callback_at_namespace).
37
- with([:asterisk, :before_call], Proc).once
38
-
39
- loader = Theatre::CallbackDefinitionLoader.new(theatre)
40
- loader.load_events_file example.file
41
- end
42
-
43
- it "should let you override the recorder method name" do
44
- theatre = Theatre::Theatre.new
45
- theatre.namespace_manager.register_namespace_name "/foo/bar/qaz"
46
- flexmock(theatre.namespace_manager).should_receive(:register_callback_at_namespace).
47
- with([:foo, :bar, :qaz], Proc).once
48
-
49
- loader = Theatre::CallbackDefinitionLoader.new(theatre, :roflcopter)
50
- loader.roflcopter.foo.bar.qaz.each {}
51
- end
52
-
53
- end
54
-
55
- # High level specs to test the entire library.
56
-
57
- describe "Misuses of the Theatre" do
58
-
59
- it "should not allow callbacks to be registered for namespaces which have not been registered" do
60
- theatre = Theatre::Theatre.new
61
- example = Example.new(:simple_before_call)
62
-
63
- loader = Theatre::CallbackDefinitionLoader.new(theatre)
64
- lambda do
65
- loader.events.foo.each {}
66
- end.should raise_error(Theatre::NamespaceNotFound)
67
- end
68
-
69
- end
@@ -1,182 +0,0 @@
1
- require 'spec_helper'
2
-
3
- GUID_REGEXP = /^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$/i
4
-
5
- module InvocationTestHelper
6
- def new_invocation(payload=@payload)
7
- Theatre::Invocation.new(@namespace, @block, @payload)
8
- end
9
- end
10
-
11
- describe "The lifecycle of an Invocation" do
12
-
13
- include InvocationTestHelper
14
-
15
- before :all do
16
- @block = lambda {}
17
- @payload = 123
18
- @namespace = "/some/namespace"
19
- end
20
-
21
- it "should have an initial state of :new" do
22
- new_invocation.current_state.should eql(:new)
23
- end
24
-
25
- it "should not have a @queued_time until state becomes :queued" do
26
- invocation = new_invocation
27
- invocation.queued_time.should eql(nil)
28
- invocation.queued
29
- invocation.queued_time.should be_instance_of(Time)
30
- invocation.current_state.should eql(:queued)
31
- end
32
-
33
- it "should have a valid guid when instantiated" do
34
- new_invocation.unique_id.should =~ GUID_REGEXP
35
- end
36
-
37
- it "should execute the callback when moving to the 'start' state" do
38
- flexmock(@block).should_receive(:call).once
39
- invocation = new_invocation
40
- invocation.queued
41
- invocation.start
42
- end
43
-
44
- end
45
-
46
- describe "Using Invocations that've been ran through the Theatre" do
47
-
48
- it "should pass the payload to the callback" do
49
- destined_payload = [:i_feel_so_pretty, :OH, :SO, :PRETTY!]
50
- expecting_callback = lambda do |payload|
51
- payload.should equal(destined_payload)
52
- end
53
- invocation = Theatre::Invocation.new("/namespace/whatever", expecting_callback, destined_payload)
54
- invocation.queued
55
- invocation.start
56
- end
57
-
58
- it "should have a status of :error if an exception was raised and set the #error property" do
59
- invocation = Theatre::Invocation.new("/namespace/whatever", lambda { raise ArgumentError, "this error is intentional" })
60
- invocation.queued
61
- invocation.start
62
- invocation.current_state.should == :error
63
- invocation.should be_error
64
- invocation.error.should be_instance_of(ArgumentError)
65
- end
66
-
67
- it "should trigger an exception event if an exception was raised" do
68
- invocation = Theatre::Invocation.new("/namespace/whatever", lambda { raise ArgumentError, "this error is intentional" })
69
- flexmock(Adhearsion::Events).should_receive(:trigger).once.with('/exception', FlexMock.any)
70
- invocation.queued
71
- invocation.start
72
- end
73
-
74
- it "should NOT trigger an exception if the exception occurs in an exception namespace" do
75
- invocation = Theatre::Invocation.new("/exception", lambda { raise ArgumentError, "this error is intentional" })
76
- flexmock(Adhearsion::Events).should_receive(:trigger).never
77
- invocation.queued
78
- invocation.start
79
- end
80
-
81
- it "should do the right thing with exceptions triggered with the wrong namespace" do
82
- invocation = Theatre::Invocation.new(['exception'], lambda { raise ArgumentError, "this error is intentional" })
83
- flexmock(Adhearsion::Events).should_receive(:trigger).never
84
- invocation.queued
85
- invocation.start
86
- end
87
-
88
- it "should have a status of :success if no expection was raised" do
89
- callback = lambda { "No errors raised here!" }
90
- invocation = Theatre::Invocation.new("/namespace/whatever", callback)
91
- invocation.queued
92
- invocation.start
93
- invocation.current_state.should equal(:success)
94
- invocation.should be_success
95
- end
96
-
97
- it "should set the #returned_value property to the returned value callback when a payload was given" do
98
- doubler = lambda { |num| num * 2 }
99
- invocation = Theatre::Invocation.new('/foo/bar', doubler, 5)
100
- invocation.queued
101
- invocation.start
102
- invocation.returned_value.should equal(10)
103
- end
104
-
105
- it "should set the #returned_value property to the returned value callback when a payload was NOT given" do
106
- doubler = lambda { :ohai }
107
- invocation = Theatre::Invocation.new('/foo/bar', doubler)
108
- invocation.queued
109
- invocation.start
110
- invocation.returned_value.should equal(:ohai)
111
- end
112
-
113
- it "should set the #finished_time property when a success was encountered" do
114
- block = lambda {}
115
- invocation = Theatre::Invocation.new('/foo/bar', block)
116
- invocation.queued
117
-
118
- now = Time.now
119
- flexmock(Time).should_receive(:now).twice.and_return now
120
-
121
- invocation.start
122
- invocation.should be_success
123
- end
124
-
125
- it "should set the #finished_time property when a failure was encountered" do
126
- invocation = Theatre::Invocation.new('/foo/bar', lambda { raise LocalJumpError })
127
- invocation.queued
128
-
129
- invocation.start
130
- invocation.should be_error
131
- invocation.finished_time.should be_kind_of(Time)
132
- end
133
-
134
- it "should set the #started_time property after starting" do
135
- invocation = Theatre::Invocation.new('/foo/bar', lambda { sleep 0.01 } )
136
- invocation.queued
137
- invocation.started_time.should be_nil
138
- invocation.start
139
- invocation.started_time.should be_kind_of(Time)
140
- end
141
-
142
- it "should properly calculate #execution_duration" do
143
- time_ago_difference = 60 * 5 # Five minutes
144
- time_now = Time.now
145
- time_ago = time_now - time_ago_difference
146
-
147
- invocation = Theatre::Invocation.new('/foo/bar', lambda {} )
148
- invocation.queued
149
- invocation.start
150
-
151
- invocation.send(:instance_variable_set, :@started_time, time_ago)
152
- invocation.send(:instance_variable_set, :@finished_time, time_now)
153
-
154
- invocation.execution_duration.should be_within(0.01).of(time_ago_difference.to_f)
155
- end
156
-
157
- it "should return the set value of returned_value when one has been set to a non-nil value" do
158
- return_nil = lambda { 123 }
159
- invocation = Theatre::Invocation.new("/namespace/whatever", return_nil)
160
- invocation.queued
161
- invocation.start
162
- invocation.returned_value.should eql(123)
163
- end
164
-
165
- it "should return nil for returned_value when it has been set to nil" do
166
- return_nil = lambda { nil }
167
- invocation = Theatre::Invocation.new("/namespace/whatever", return_nil)
168
- invocation.queued
169
- invocation.start
170
- invocation.returned_value.should eql(nil)
171
- end
172
-
173
- it "waiting on an Invocation should execute properly" do
174
- wait_on_invocation = lambda { 123 }
175
- invocation = Theatre::Invocation.new("/namespace/whatever", wait_on_invocation)
176
- invocation.queued
177
- invocation.start
178
- invocation.wait.should eql(123)
179
- invocation.success?.should eql(true)
180
- end
181
-
182
- end