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
@@ -4,7 +4,7 @@ require "adhearsion/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "adhearsion"
7
- s.version = Adhearsion::VERSION::STRING
7
+ s.version = Adhearsion::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Jay Phillips", "Jason Goecke", "Ben Klang", "Ben Langfeld"]
10
10
  s.email = "dev&Adhearsion.com"
@@ -20,23 +20,37 @@ Gem::Specification.new do |s|
20
20
 
21
21
  # Runtime dependencies
22
22
  s.add_runtime_dependency "bundler", [">= 1.0.10"]
23
- s.add_runtime_dependency "log4r", [">= 1.0.5"]
24
- s.add_runtime_dependency "activesupport", [">= 2.1.0"]
23
+ s.add_runtime_dependency 'punchblock', [">= 0.8.3"]
24
+ s.add_runtime_dependency "logging", [">= 1.6.1"]
25
+ s.add_runtime_dependency "loquacious", [">= 1.9.0"]
26
+ s.add_runtime_dependency "activesupport", [">= 3.0.10"]
25
27
  # i18n is only strictly a dependency for ActiveSupport >= 3.0.0
26
28
  # Since it doesn't conflict with <3.0.0 we'll require it to be
27
29
  # on the safe side.
28
- s.add_runtime_dependency "i18n"
30
+ s.add_runtime_dependency "i18n", ">= 0.5.0"
29
31
  s.add_runtime_dependency "json"
30
32
  s.add_runtime_dependency "thor"
31
33
  s.add_runtime_dependency "rake"
32
34
  s.add_runtime_dependency "pry"
35
+ s.add_runtime_dependency "uuid"
36
+ s.add_runtime_dependency "future-resource", [">= 0.0.2"]
37
+ s.add_runtime_dependency "ruby_speech", [">= 0.4.0"]
38
+ s.add_runtime_dependency 'countdownlatch'
39
+ s.add_runtime_dependency 'has-guarded-handlers', [">= 0.1.1"]
40
+ s.add_runtime_dependency 'girl_friday'
41
+ s.add_runtime_dependency 'jruby-openssl' if RUBY_PLATFORM == 'java'
33
42
 
34
43
  # Development dependencies
35
- s.add_development_dependency 'rspec', [">= 2.4.0", '< 2.8.0']
44
+ s.add_development_dependency 'rspec', ["~> 2.7.0"]
36
45
  s.add_development_dependency 'flexmock'
37
- s.add_development_dependency 'activerecord', [">= 2.1.0"]
38
- s.add_development_dependency 'rake'
46
+ s.add_development_dependency 'activerecord', [">= 3.0.10"]
39
47
  s.add_development_dependency 'simplecov'
40
48
  s.add_development_dependency 'simplecov-rcov'
41
49
  s.add_development_dependency 'ci_reporter'
50
+ s.add_development_dependency 'yard'
51
+ s.add_development_dependency 'guard-rspec'
52
+ s.add_development_dependency 'guard-cucumber'
53
+ s.add_development_dependency 'ruby_gntp'
54
+ s.add_development_dependency 'cucumber'
55
+ s.add_development_dependency 'aruba'
42
56
  end
data/bin/ahn CHANGED
@@ -22,6 +22,8 @@
22
22
  $:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
23
23
 
24
24
  require 'rubygems'
25
+ require 'bundler/setup'
26
+ require 'adhearsion'
25
27
  require 'adhearsion/cli'
26
28
 
27
- Adhearsion::CLI::AhnCommand.execute!
29
+ Adhearsion::CLI::AhnCommand.start
@@ -0,0 +1,4 @@
1
+ default: --tags ~@wip
2
+ wip: --wip --tags @wip
3
+ cli: --tags @cli
4
+ guard: --format pretty --strict --tags ~@wip
@@ -0,0 +1,42 @@
1
+ Feature: Adhearsion App Generator
2
+ In order to do development on new Adhearsion apps
3
+ As a Adhearsiohn developer
4
+ I want to generate an Adhearsion app
5
+
6
+ Scenario: Generate application with valid layout
7
+ When I run `ahn create path/somewhere`
8
+ And I cd to "path/somewhere"
9
+ Then the following directories should exist:
10
+ | lib |
11
+ | config |
12
+ | script |
13
+
14
+ And the following files should exist:
15
+ | config/adhearsion.rb |
16
+ | config/environment.rb |
17
+ | Gemfile |
18
+ | lib/simon_game.rb |
19
+ | script/ahn |
20
+ | README.md |
21
+ | Rakefile |
22
+
23
+ And the file "config/adhearsion.rb" should contain each of these content parts:
24
+ """
25
+ Adhearsion.router
26
+ Adhearsion.config
27
+ logging.level
28
+ config.punchblock
29
+ """
30
+ And the file "README.md" should contain each of these content parts:
31
+ """
32
+ Start your new app with
33
+ AGI(agi
34
+ """
35
+ And the file "Rakefile" should contain "adhearsion/tasks"
36
+ And the file "Gemfile" should contain each of these content parts:
37
+ """
38
+ source :rubygems
39
+ gem 'adhearsion-asterisk'
40
+ """
41
+ And the file "lib/simon_game.rb" should contain "class SimonGame"
42
+ And the file "script/ahn" should contain "require 'adhearsion'"
@@ -0,0 +1,108 @@
1
+ Feature: Adhearsion Ahn CLI
2
+ As a Adhearsion user
3
+ I want a cli command (ahn)
4
+ So that I can create and interact with adhearsion apps
5
+
6
+ Scenario: No arguments given
7
+ When I run `ahn`
8
+ Then I should see the usage message
9
+ And the exit status should be 0
10
+
11
+ Scenario: Unrecognized commands
12
+ When I run `ahn alpha beta`
13
+ Then the output should contain:
14
+ """
15
+ Unknown command: alpha beta
16
+ """
17
+ And the exit status should be 1
18
+
19
+ Scenario: Command create with correct arguments
20
+ When I run `ahn create path/somewhere`
21
+ And I cd to "path/somewhere"
22
+ Then the following files should exist:
23
+ | Gemfile |
24
+ | README.md |
25
+ | Rakefile |
26
+ | config/adhearsion.rb |
27
+ | config/environment.rb |
28
+ And the file "config/adhearsion.rb" should contain "Adhearsion.router"
29
+ Then the exit status should be 0
30
+
31
+ Scenario: Running create with no arguments
32
+ When I run `ahn create`
33
+ Then the output should contain:
34
+ """
35
+ "create" was called incorrectly. Call as "ahn create /path/to/directory".
36
+ """
37
+ And the exit status should be 1
38
+
39
+ Scenario: Command start with no path outside of the app directory
40
+ When I run `ahn start`
41
+ Then the output should contain:
42
+ """
43
+ A valid path is required for start, unless run from an Adhearson app directory
44
+ """
45
+ And the exit status should be 1
46
+
47
+ Scenario: Command start with no path inside of the app directory
48
+ Given that I create a valid app under "path/somewhere"
49
+ When I cd to "path/somewhere"
50
+ And I run `ahn start` interactively
51
+ And I wait for output to contain "Transitioning from booting to running"
52
+ And I terminate the interactive process
53
+ Then the output should contain "Loaded config"
54
+ And the output should contain "Adhearsion::Console: Starting up..."
55
+ And the output should contain "AHN>"
56
+ And the output should contain "Starting connection"
57
+ And the output should contain "Transitioning from running to stopping"
58
+
59
+ Scenario: Command start with only path works properly
60
+ Given that I create a valid app under "path/somewhere"
61
+ When I run `ahn start path/somewhere` interactively
62
+ And I wait for output to contain "Transitioning from booting to running"
63
+ And I terminate the interactive process
64
+ Then the output should contain "Loaded config"
65
+ And the output should contain "Adhearsion::Console: Starting up..."
66
+ And the output should contain "AHN>"
67
+ And the output should contain "Starting connection"
68
+ And the output should contain "Transitioning from running to stopping"
69
+
70
+ Scenario: Command daemon with path works correctly
71
+ Given JRuby skip test
72
+ Given that I create a valid app under "path/somewhere"
73
+ When I run `ahn daemon path/somewhere`
74
+ And I cd to "path/somewhere"
75
+ And I terminate the process using the pid file "adhearsion.pid"
76
+ Then the output should contain "Daemonizing now"
77
+ And the exit status should be 0
78
+
79
+ Scenario: Command start with daemon and pid option
80
+ Given JRuby skip test
81
+ Given that I create a valid app under "path/somewhere"
82
+ When I run `ahn daemon path/somewhere --pid-file=ahn.pid`
83
+ And I cd to "path/somewhere"
84
+ And I terminate the process using the pid file "ahn.pid"
85
+ Then the output should contain "Daemonizing now"
86
+
87
+ Scenario: Command stop with valid path and pid option
88
+ Given JRuby skip test
89
+ Given that I create a valid app under "path/somewhere"
90
+ When I run `ahn daemon path/somewhere --pid-file=ahn.pid`
91
+ And I run `ahn stop path/somewhere --pid-file=ahn.pid`
92
+ Then the output should contain:
93
+ """
94
+ Stopping Adhearsion
95
+ """
96
+
97
+ Scenario: Command version should print the version
98
+ When I run `ahn version`
99
+ Then the output should contain:
100
+ """
101
+ Adhearsion v
102
+ """
103
+ And the exit status should be 0
104
+
105
+ Scenario: Command help
106
+ When I run `ahn help`
107
+ Then I should see the usage message
108
+ And the exit status should be 0
@@ -0,0 +1,6 @@
1
+ Then /^the file "([^"]*)" should contain each of these content parts:$/ do |file, content_parts|
2
+ parts = content_parts.split
3
+ parts.each do |p|
4
+ steps %Q{Then the file "#{file}" should contain "#{p}"}
5
+ end
6
+ end
@@ -0,0 +1,74 @@
1
+ require 'timeout'
2
+
3
+ Then /^I should see the usage message$/ do
4
+ steps %Q{
5
+ Then the output should contain "Tasks:"
6
+ Then the output should contain "ahn create"
7
+ Then the output should contain "ahn start"
8
+ Then the output should contain "ahn daemon"
9
+ Then the output should contain "ahn version"
10
+ Then the output should contain "ahn help"
11
+ }
12
+ end
13
+
14
+ # TODO: Remove after pull request is merged in cucumber.rb from Aruba
15
+ When /^I terminate the interactive process$/ do
16
+ terminate_processes!
17
+ end
18
+
19
+ When /^I wait (\d+) seconds?$/ do |arg1|
20
+ sleep arg1.to_i
21
+ end
22
+
23
+ # TODO: Remove after pull request is merged in cucumber.rb from Aruba
24
+ When /^I wait for (?:output|stdout) to contain "([^"]*)"$/ do |expected|
25
+ Timeout::timeout(exit_timeout) do
26
+ loop do
27
+ break if assert_partial_output_interactive(expected)
28
+ sleep 0.1
29
+ end
30
+ end
31
+ end
32
+
33
+ Given /^that I create a valid app under "([^"]*)"$/ do |path|
34
+ steps %Q{
35
+ When I run `ahn create #{path}`
36
+ Then there should be a valid adhearsion directory named "#{path}"
37
+ }
38
+ end
39
+
40
+ Then /^there should be a valid adhearsion directory named "([^"]*)"$/ do |path|
41
+ steps %Q{
42
+ Then a directory named "#{path}" should exist
43
+ }
44
+
45
+ cd(path)
46
+ steps %Q{
47
+ Then the following directories should exist:
48
+ | lib |
49
+ | config |
50
+ Then the following files should exist:
51
+ | Gemfile |
52
+ | README.md |
53
+ | Rakefile |
54
+ | config/adhearsion.rb |
55
+ | config/environment.rb |
56
+ }
57
+
58
+ ## NOTE: Aruba's cd method is not really changing directories
59
+ ## Either we use cd or we need absolute path... could not figure out cleaner
60
+ ## way to get back to previous dir.
61
+ dotsback=1.upto(path.split(File::SEPARATOR)[0..-1].count).collect {|x| ".."}.join(File::SEPARATOR)
62
+ dotsback.shift if dotsback[0].is_a?(String) and dotsback[0].empty?
63
+ cd(dotsback)
64
+ end
65
+
66
+ When /^I terminate the process using the pid file "([^"]*)"$/ do |pidfile|
67
+ check_file_presence([pidfile], true)
68
+ prep_for_fs_check do
69
+ pid = File.read(pidfile).to_i
70
+ Process.kill("TERM", pid)
71
+ sleep 1
72
+ Process.kill("KILL", pid)
73
+ end
74
+ end
@@ -0,0 +1,22 @@
1
+ module Aruba
2
+ module Api
3
+ # output() blocks for stderr and stdout it seems
4
+ def assert_partial_output_interactive(expected)
5
+ unescape(_read_interactive).include?(unescape(expected)) ? true : false
6
+ end
7
+
8
+ def _read_interactive
9
+ @interactive.read_stdout(@aruba_keep_ansi)
10
+ end
11
+ end
12
+
13
+ class Process
14
+ def read_stdout(keep_ansi)
15
+ wait_for_io do
16
+ @process.io.stdout.flush
17
+ content = filter_ansi(open(@out.path).read, keep_ansi)
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,37 @@
1
+ require 'simplecov'
2
+ require 'simplecov-rcov'
3
+ class SimpleCov::Formatter::MergedFormatter
4
+ def format(result)
5
+ SimpleCov::Formatter::HTMLFormatter.new.format(result)
6
+ SimpleCov::Formatter::RcovFormatter.new.format(result)
7
+ end
8
+ end
9
+ SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
10
+ SimpleCov.start do
11
+ add_filter "/vendor/"
12
+ end
13
+
14
+ JRUBY_OPTS_SAVED=ENV['JRUBY_OPTS']
15
+ JAVA_OPTS_SAVED=ENV['JAVA_OPTS']
16
+
17
+ require 'cucumber'
18
+ require 'aruba/cucumber'
19
+ require 'adhearsion'
20
+
21
+ Before do
22
+ @aruba_timeout_seconds = ENV['ARUBA_TIMEOUT'] || RUBY_PLATFORM == 'java' ? 60 : 30
23
+ end
24
+
25
+ # TODO: check for name space / run issues
26
+ # NOTE: this will not stop a forked process (eg. daemon mode)
27
+ After do
28
+ terminate_processes!
29
+ end
30
+
31
+ # Aruba upstream overwrites these variables so set them here until it is fixed.
32
+ Aruba.configure do |config|
33
+ config.before_cmd do |cmd|
34
+ set_env('JRUBY_OPTS', "#{ENV['JRUBY_OPTS']} #{JRUBY_OPTS_SAVED}")
35
+ set_env('JAVA_OPTS', "#{ENV['JAVA_OPTS']} #{JAVA_OPTS_SAVED}")
36
+ end
37
+ end if RUBY_PLATFORM == 'java'
@@ -0,0 +1,8 @@
1
+ Given /^PENDING/ do
2
+ pending
3
+ end
4
+
5
+
6
+ Given /^JRuby skip test/ do
7
+ pending "Daemonize not supported under JRuby" if RUBY_PLATFORM == 'java'
8
+ end
@@ -1,46 +1,90 @@
1
- # Check the Ruby version
2
- STDERR.puts "WARNING: You are running Adhearsion in an unsupported
3
- version of Ruby (Ruby #{RUBY_VERSION} #{RUBY_RELEASE_DATE})!
4
- Please upgrade to at least Ruby v1.8.5." if RUBY_VERSION < "1.8.5"
5
-
6
- $: << File.expand_path(File.dirname(__FILE__))
7
-
8
- require 'rubygems'
9
- require 'bundler/setup'
10
-
11
- require 'adhearsion/version'
12
- require 'adhearsion/voip/call'
13
- require 'adhearsion/voip/dial_plan'
14
- require 'adhearsion/voip/asterisk/special_dial_plan_managers'
15
- require 'adhearsion/foundation/all'
16
- require 'adhearsion/events_support'
17
- require 'adhearsion/logging'
18
- require 'adhearsion/component_manager'
19
- require 'adhearsion/initializer/configuration'
20
- require 'adhearsion/initializer'
21
- require 'adhearsion/voip/dsl/numerical_string'
22
- require 'adhearsion/voip/dsl/dialplan/parser'
23
- require 'adhearsion/voip/commands'
24
- require 'adhearsion/voip/asterisk/commands'
25
- require 'adhearsion/voip/dsl/dialing_dsl'
26
- require 'adhearsion/voip/call_routing'
27
-
28
- begin
29
- # Try ActiveSupport >= 2.3.0
30
- require 'active_support/all'
31
- rescue LoadError
32
- # Assume ActiveSupport < 2.3.0
33
- require 'active_support'
34
- end
1
+ abort "ERROR: You are running Adhearsion on an unsupported version of Ruby (Ruby #{RUBY_VERSION} #{RUBY_RELEASE_DATE})! Please upgrade to at least Ruby v1.9.2, JRuby 1.6.5 or Rubinius 2.0." if RUBY_VERSION < "1.9.2"
2
+
3
+ %w{
4
+ bundler/setup
5
+
6
+ active_support/all
7
+ uuid
8
+ future-resource
9
+ punchblock
10
+ ostruct
11
+ ruby_speech
12
+ countdownlatch
13
+ has_guarded_handlers
14
+ girl_friday
15
+ loquacious
16
+
17
+ adhearsion/foundation/all
18
+ }.each { |f| require f }
35
19
 
36
20
  module Adhearsion
37
- # Sets up the Gem require path.
38
- AHN_INSTALL_DIR = File.expand_path(File.dirname(__FILE__) + "/..")
39
- AHN_CONFIG = Configuration.new
21
+ extend ActiveSupport::Autoload
22
+
23
+ autoload :Process
24
+ autoload :Call
25
+ autoload :CallController
26
+ autoload :Calls
27
+ autoload :Configuration
28
+ autoload :Console
29
+ autoload :Conveniences
30
+ autoload :DialplanController
31
+ autoload :Dispatcher
32
+ autoload :Events
33
+ autoload :MenuDSL
34
+ autoload :Initializer
35
+ autoload :Logging
36
+ autoload :OutboundCall
37
+ autoload :Plugin
38
+ autoload :Router
39
+ autoload :Version
40
+
41
+ class << self
42
+
43
+ def ahn_root=(path)
44
+ Adhearsion.config[:platform].root = path.nil? ? nil : File.expand_path(path)
45
+ end
46
+
47
+ def config(&block)
48
+ @config ||= initialize_config
49
+ block_given? and yield @config
50
+ @config
51
+ end
52
+
53
+ def initialize_config
54
+ _config = Configuration.new
55
+ env = ENV['AHN_ENV']
56
+ env = nil unless _config.valid_environment? env
57
+ _config.platform.environment = env if env
58
+ _config
59
+ end
60
+
61
+ def environments
62
+ config.valid_environments
63
+ end
64
+
65
+ def config=(config)
66
+ @config = config
67
+ end
68
+
69
+ def router(&block)
70
+ @router ||= Router.new(&block || Proc.new {})
71
+ end
72
+
73
+ def router=(other)
74
+ @router = other
75
+ end
76
+
77
+ def active_calls
78
+ @calls ||= Calls.new
79
+ end
40
80
 
41
- ##
42
- # This Array holds all the Threads whose life matters. Adhearsion will not exit until all of these have died.
43
- #
44
- IMPORTANT_THREADS = []
81
+ def status
82
+ Adhearsion::Process.state_name
83
+ end
84
+ end
45
85
 
86
+ Hangup = Class.new StandardError # At the moment, we'll just use this to end a call-handling Thread
87
+ PlaybackError = Class.new StandardError # Represents failure to play audio, such as when the sound file cannot be found
88
+ RecordError = Class.new StandardError # Represents failure to record such as when a file cannot be written.
89
+ ConfigurationError = Class.new StandardError # Error raised while trying to configure a non existent plugin
46
90
  end