adhearsion 2.6.4 → 3.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (242) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -9
  3. data/CHANGELOG.md +22 -7
  4. data/Gemfile +2 -0
  5. data/README.markdown +4 -5
  6. data/Rakefile +1 -2
  7. data/adhearsion.gemspec +19 -8
  8. data/features/cli_create.feature +19 -3
  9. data/features/step_definitions/cli_steps.rb +0 -11
  10. data/features/support/env.rb +3 -4
  11. data/lib/adhearsion.rb +48 -27
  12. data/lib/adhearsion/call.rb +34 -50
  13. data/lib/adhearsion/call_controller.rb +6 -12
  14. data/lib/adhearsion/call_controller/dial.rb +15 -53
  15. data/lib/adhearsion/call_controller/input.rb +39 -162
  16. data/lib/adhearsion/call_controller/input/ask_grammar_builder.rb +44 -0
  17. data/lib/adhearsion/call_controller/input/menu_builder.rb +136 -0
  18. data/lib/adhearsion/call_controller/input/prompt_builder.rb +78 -0
  19. data/lib/adhearsion/call_controller/input/result.rb +46 -0
  20. data/lib/adhearsion/call_controller/output.rb +48 -67
  21. data/lib/adhearsion/call_controller/output/abstract_player.rb +3 -3
  22. data/lib/adhearsion/call_controller/output/async_player.rb +3 -3
  23. data/lib/adhearsion/call_controller/output/player.rb +1 -1
  24. data/lib/adhearsion/call_controller/record.rb +23 -8
  25. data/lib/adhearsion/calls.rb +1 -1
  26. data/lib/adhearsion/cli_commands/ahn_command.rb +2 -65
  27. data/lib/adhearsion/cli_commands/thor_errors.rb +0 -6
  28. data/lib/adhearsion/configuration.rb +91 -39
  29. data/lib/adhearsion/core_ext/blather/stanza.rb +41 -0
  30. data/lib/adhearsion/core_ext/blather/stanza/presence.rb +13 -0
  31. data/lib/adhearsion/error.rb +5 -0
  32. data/lib/adhearsion/event.rb +21 -0
  33. data/lib/adhearsion/event/active_speaker.rb +11 -0
  34. data/lib/adhearsion/event/answered.rb +11 -0
  35. data/lib/adhearsion/event/asterisk.rb +10 -0
  36. data/lib/adhearsion/event/asterisk/ami.rb +34 -0
  37. data/lib/adhearsion/event/complete.rb +75 -0
  38. data/lib/adhearsion/event/dtmf.rb +11 -0
  39. data/lib/adhearsion/event/end.rb +22 -0
  40. data/lib/adhearsion/event/input_timers_started.rb +9 -0
  41. data/lib/adhearsion/event/joined.rb +17 -0
  42. data/lib/adhearsion/event/offer.rb +14 -0
  43. data/lib/adhearsion/event/ringing.rb +11 -0
  44. data/lib/adhearsion/event/started_speaking.rb +13 -0
  45. data/lib/adhearsion/event/stopped_speaking.rb +13 -0
  46. data/lib/adhearsion/event/unjoined.rb +17 -0
  47. data/lib/adhearsion/events.rb +47 -66
  48. data/lib/adhearsion/foundation.rb +0 -1
  49. data/lib/adhearsion/foundation/object.rb +0 -5
  50. data/lib/adhearsion/generators/app/app_generator.rb +4 -1
  51. data/lib/adhearsion/generators/app/templates/Gemfile.erb +2 -10
  52. data/lib/adhearsion/generators/app/templates/adhearsion.erb +9 -9
  53. data/lib/adhearsion/generators/app/templates/config.ru +7 -0
  54. data/lib/adhearsion/generators/app/templates/en.yml +4 -0
  55. data/lib/adhearsion/generators/app/templates/events.erb +2 -2
  56. data/lib/adhearsion/generators/app/templates/hello_world.wav +0 -0
  57. data/lib/adhearsion/generators/app/templates/simon_game.rb +2 -1
  58. data/lib/adhearsion/generators/app/templates/simon_game_spec.rb +2 -2
  59. data/lib/adhearsion/has_headers.rb +34 -0
  60. data/lib/adhearsion/http_server.rb +37 -0
  61. data/lib/adhearsion/initializer.rb +19 -153
  62. data/lib/adhearsion/logging.rb +6 -25
  63. data/lib/adhearsion/outbound_call.rb +5 -5
  64. data/lib/adhearsion/plugin.rb +1 -0
  65. data/lib/adhearsion/protocol_error.rb +26 -0
  66. data/lib/adhearsion/rayo.rb +30 -0
  67. data/lib/adhearsion/rayo/client.rb +62 -0
  68. data/lib/adhearsion/rayo/client/component_registry.rb +33 -0
  69. data/lib/adhearsion/rayo/command.rb +21 -0
  70. data/lib/adhearsion/rayo/command/accept.rb +16 -0
  71. data/lib/adhearsion/rayo/command/answer.rb +16 -0
  72. data/lib/adhearsion/rayo/command/dial.rb +57 -0
  73. data/lib/adhearsion/rayo/command/hangup.rb +16 -0
  74. data/lib/adhearsion/rayo/command/join.rb +43 -0
  75. data/lib/adhearsion/rayo/command/mute.rb +13 -0
  76. data/lib/adhearsion/rayo/command/redirect.rb +23 -0
  77. data/lib/adhearsion/rayo/command/reject.rb +40 -0
  78. data/lib/adhearsion/rayo/command/unjoin.rb +24 -0
  79. data/lib/adhearsion/rayo/command/unmute.rb +13 -0
  80. data/lib/adhearsion/rayo/command_node.rb +47 -0
  81. data/lib/adhearsion/rayo/component.rb +21 -0
  82. data/lib/adhearsion/rayo/component/asterisk.rb +13 -0
  83. data/lib/adhearsion/rayo/component/asterisk/agi.rb +14 -0
  84. data/lib/adhearsion/rayo/component/asterisk/agi/command.rb +46 -0
  85. data/lib/adhearsion/rayo/component/asterisk/ami.rb +14 -0
  86. data/lib/adhearsion/rayo/component/asterisk/ami/action.rb +61 -0
  87. data/lib/adhearsion/rayo/component/component_node.rb +90 -0
  88. data/lib/adhearsion/rayo/component/input.rb +186 -0
  89. data/lib/adhearsion/rayo/component/output.rb +471 -0
  90. data/lib/adhearsion/rayo/component/prompt.rb +53 -0
  91. data/lib/adhearsion/rayo/component/receive_fax.rb +26 -0
  92. data/lib/adhearsion/rayo/component/record.rb +165 -0
  93. data/lib/adhearsion/rayo/component/send_fax.rb +64 -0
  94. data/lib/adhearsion/rayo/component/stop.rb +11 -0
  95. data/lib/adhearsion/rayo/connection.rb +12 -0
  96. data/lib/adhearsion/rayo/connection/asterisk.rb +74 -0
  97. data/lib/adhearsion/rayo/connection/connected.rb +22 -0
  98. data/lib/adhearsion/rayo/connection/generic_connection.rb +22 -0
  99. data/lib/adhearsion/rayo/connection/xmpp.rb +198 -0
  100. data/lib/adhearsion/rayo/disconnected_error.rb +22 -0
  101. data/lib/adhearsion/{punchblock_plugin → rayo}/initializer.rb +19 -19
  102. data/lib/adhearsion/rayo/rayo_node.rb +127 -0
  103. data/lib/adhearsion/rayo/ref.rb +57 -0
  104. data/lib/adhearsion/statistics.rb +1 -1
  105. data/lib/adhearsion/tasks.rb +1 -2
  106. data/lib/adhearsion/tasks/configuration.rb +1 -1
  107. data/lib/adhearsion/tasks/environment.rb +0 -2
  108. data/lib/adhearsion/tasks/i18n.rb +49 -0
  109. data/lib/adhearsion/translator.rb +11 -0
  110. data/lib/adhearsion/translator/asterisk.rb +234 -0
  111. data/lib/adhearsion/translator/asterisk/agi_app.rb +17 -0
  112. data/lib/adhearsion/translator/asterisk/agi_command.rb +45 -0
  113. data/lib/adhearsion/translator/asterisk/ami_error_converter.rb +20 -0
  114. data/lib/adhearsion/translator/asterisk/call.rb +416 -0
  115. data/lib/adhearsion/translator/asterisk/channel.rb +43 -0
  116. data/lib/adhearsion/translator/asterisk/component.rb +88 -0
  117. data/lib/adhearsion/translator/asterisk/component/asterisk.rb +15 -0
  118. data/lib/adhearsion/translator/asterisk/component/asterisk/agi_command.rb +42 -0
  119. data/lib/adhearsion/translator/asterisk/component/asterisk/ami_action.rb +68 -0
  120. data/lib/adhearsion/translator/asterisk/component/composed_prompt.rb +76 -0
  121. data/lib/adhearsion/translator/asterisk/component/dtmf_recognizer.rb +137 -0
  122. data/lib/adhearsion/translator/asterisk/component/input.rb +34 -0
  123. data/lib/adhearsion/translator/asterisk/component/input_component.rb +90 -0
  124. data/lib/adhearsion/translator/asterisk/component/mrcp_native_prompt.rb +71 -0
  125. data/lib/adhearsion/translator/asterisk/component/mrcp_prompt.rb +55 -0
  126. data/lib/adhearsion/translator/asterisk/component/mrcp_recog_prompt.rb +165 -0
  127. data/lib/adhearsion/translator/asterisk/component/output.rb +233 -0
  128. data/lib/adhearsion/translator/asterisk/component/record.rb +101 -0
  129. data/lib/adhearsion/translator/asterisk/component/stop_by_redirect.rb +30 -0
  130. data/lib/adhearsion/translator/asterisk/unimrcp_app.rb +28 -0
  131. data/lib/adhearsion/uri_list.rb +21 -0
  132. data/lib/adhearsion/version.rb +1 -1
  133. data/spec/adhearsion/call_controller/dial_spec.rb +79 -1420
  134. data/spec/adhearsion/call_controller/input_spec.rb +1141 -237
  135. data/spec/adhearsion/call_controller/output/async_player_spec.rb +10 -10
  136. data/spec/adhearsion/call_controller/output/player_spec.rb +8 -8
  137. data/spec/adhearsion/call_controller/output_spec.rb +162 -215
  138. data/spec/adhearsion/call_controller/record_spec.rb +15 -16
  139. data/spec/adhearsion/call_controller_spec.rb +23 -40
  140. data/spec/adhearsion/call_spec.rb +123 -129
  141. data/spec/adhearsion/calls_spec.rb +3 -3
  142. data/spec/adhearsion/configuration_spec.rb +94 -108
  143. data/spec/adhearsion/event/answered_spec.rb +50 -0
  144. data/spec/adhearsion/event/asterisk/Find Results +402 -0
  145. data/spec/adhearsion/event/asterisk/ami_spec.rb +81 -0
  146. data/spec/adhearsion/event/complete_spec.rb +176 -0
  147. data/spec/adhearsion/event/dtmf_spec.rb +35 -0
  148. data/spec/adhearsion/event/end_spec.rb +85 -0
  149. data/spec/adhearsion/event/input_timers_started_spec.rb +19 -0
  150. data/spec/adhearsion/event/joined_spec.rb +53 -0
  151. data/spec/adhearsion/event/offer_spec.rb +106 -0
  152. data/spec/adhearsion/event/ringing_spec.rb +50 -0
  153. data/spec/adhearsion/event/started_speaking_spec.rb +37 -0
  154. data/spec/adhearsion/event/stopped_speaking_spec.rb +37 -0
  155. data/spec/adhearsion/event/unjoined_spec.rb +48 -0
  156. data/spec/adhearsion/event/untitled +0 -0
  157. data/spec/adhearsion/events_spec.rb +19 -45
  158. data/spec/adhearsion/initializer_spec.rb +12 -184
  159. data/spec/adhearsion/logging_spec.rb +5 -20
  160. data/spec/adhearsion/outbound_call_spec.rb +13 -13
  161. data/spec/adhearsion/plugin_spec.rb +3 -4
  162. data/spec/adhearsion/protocol_error_spec.rb +91 -0
  163. data/spec/adhearsion/rayo/client/component_registry_spec.rb +26 -0
  164. data/spec/adhearsion/rayo/client_spec.rb +134 -0
  165. data/spec/adhearsion/rayo/command/accept_spec.rb +63 -0
  166. data/spec/adhearsion/rayo/command/answer_spec.rb +73 -0
  167. data/spec/adhearsion/rayo/command/dial_spec.rb +156 -0
  168. data/spec/adhearsion/rayo/command/hangup_spec.rb +63 -0
  169. data/spec/adhearsion/rayo/command/join_spec.rb +158 -0
  170. data/spec/adhearsion/rayo/command/mute_spec.rb +32 -0
  171. data/spec/adhearsion/rayo/command/redirect_spec.rb +89 -0
  172. data/spec/adhearsion/rayo/command/reject_spec.rb +117 -0
  173. data/spec/adhearsion/rayo/command/unjoin_spec.rb +82 -0
  174. data/spec/adhearsion/rayo/command/unmute_spec.rb +32 -0
  175. data/spec/adhearsion/rayo/command_node_spec.rb +101 -0
  176. data/spec/adhearsion/rayo/component/asterisk/agi/command_spec.rb +111 -0
  177. data/spec/adhearsion/rayo/component/asterisk/ami/action_spec.rb +173 -0
  178. data/spec/adhearsion/rayo/component/component_node_spec.rb +110 -0
  179. data/spec/adhearsion/rayo/component/input_spec.rb +715 -0
  180. data/spec/adhearsion/rayo/component/output_spec.rb +1030 -0
  181. data/spec/adhearsion/rayo/component/prompt_spec.rb +171 -0
  182. data/spec/adhearsion/rayo/component/receive_fax_spec.rb +136 -0
  183. data/spec/adhearsion/rayo/component/record_spec.rb +497 -0
  184. data/spec/adhearsion/rayo/component/send_fax_spec.rb +144 -0
  185. data/spec/adhearsion/rayo/connection/asterisk_spec.rb +118 -0
  186. data/spec/adhearsion/rayo/connection/xmpp_spec.rb +449 -0
  187. data/spec/adhearsion/rayo/initializer_spec.rb +353 -0
  188. data/spec/adhearsion/rayo/ref_spec.rb +168 -0
  189. data/spec/adhearsion/rayo_spec.rb +7 -0
  190. data/spec/adhearsion/router/route_spec.rb +1 -1
  191. data/spec/adhearsion/statistics_spec.rb +2 -5
  192. data/spec/adhearsion/translator/asterisk/call_spec.rb +2047 -0
  193. data/spec/adhearsion/translator/asterisk/component/asterisk/agi_command_spec.rb +256 -0
  194. data/spec/adhearsion/translator/asterisk/component/asterisk/ami_action_spec.rb +151 -0
  195. data/spec/adhearsion/translator/asterisk/component/composed_prompt_spec.rb +257 -0
  196. data/spec/adhearsion/translator/asterisk/component/input_spec.rb +571 -0
  197. data/spec/adhearsion/translator/asterisk/component/mrcp_native_prompt_spec.rb +774 -0
  198. data/spec/adhearsion/translator/asterisk/component/mrcp_prompt_spec.rb +1244 -0
  199. data/spec/adhearsion/translator/asterisk/component/output_spec.rb +1850 -0
  200. data/spec/adhearsion/translator/asterisk/component/record_spec.rb +426 -0
  201. data/spec/adhearsion/translator/asterisk/component/stop_by_redirect_spec.rb +62 -0
  202. data/spec/adhearsion/translator/asterisk/component_spec.rb +83 -0
  203. data/spec/adhearsion/translator/asterisk_spec.rb +685 -0
  204. data/spec/adhearsion/uri_list_spec.rb +88 -0
  205. data/spec/adhearsion_spec.rb +89 -14
  206. data/spec/fixtures/locale/en.yml +13 -0
  207. data/spec/fixtures/locale/it.yml +13 -0
  208. data/spec/spec_helper.rb +18 -5
  209. data/spec/support/call_controller_test_helpers.rb +3 -2
  210. data/spec/support/initializer_stubs.rb +3 -1
  211. data/spec/support/punchblock_examples.rb +65 -0
  212. data/spec/support/punchblock_mocks.rb +12 -0
  213. metadata +412 -70
  214. data/features/cli_daemon.feature +0 -20
  215. data/features/cli_restart.feature +0 -52
  216. data/features/cli_stop.feature +0 -50
  217. data/lib/adhearsion/call_controller/menu_dsl.rb +0 -21
  218. data/lib/adhearsion/call_controller/menu_dsl/array_match_calculator.rb +0 -26
  219. data/lib/adhearsion/call_controller/menu_dsl/calculated_match.rb +0 -43
  220. data/lib/adhearsion/call_controller/menu_dsl/calculated_match_collection.rb +0 -45
  221. data/lib/adhearsion/call_controller/menu_dsl/fixnum_match_calculator.rb +0 -11
  222. data/lib/adhearsion/call_controller/menu_dsl/match_calculator.rb +0 -40
  223. data/lib/adhearsion/call_controller/menu_dsl/menu.rb +0 -207
  224. data/lib/adhearsion/call_controller/menu_dsl/menu_builder.rb +0 -92
  225. data/lib/adhearsion/call_controller/menu_dsl/range_match_calculator.rb +0 -60
  226. data/lib/adhearsion/call_controller/menu_dsl/string_match_calculator.rb +0 -25
  227. data/lib/adhearsion/call_controller/utility.rb +0 -77
  228. data/lib/adhearsion/foundation/custom_daemonizer.rb +0 -52
  229. data/lib/adhearsion/punchblock_plugin.rb +0 -63
  230. data/scripts/cloc-1.64.pl +0 -10483
  231. data/spec/adhearsion/call_controller/menu_dsl/array_match_calculator_spec.rb +0 -76
  232. data/spec/adhearsion/call_controller/menu_dsl/calculated_match_collection_spec.rb +0 -60
  233. data/spec/adhearsion/call_controller/menu_dsl/calculated_match_spec.rb +0 -61
  234. data/spec/adhearsion/call_controller/menu_dsl/fixnum_match_calculator_spec.rb +0 -39
  235. data/spec/adhearsion/call_controller/menu_dsl/match_calculator_spec.rb +0 -17
  236. data/spec/adhearsion/call_controller/menu_dsl/menu_builder_spec.rb +0 -165
  237. data/spec/adhearsion/call_controller/menu_dsl/menu_spec.rb +0 -420
  238. data/spec/adhearsion/call_controller/menu_dsl/range_match_calculator_spec.rb +0 -32
  239. data/spec/adhearsion/call_controller/menu_dsl/string_match_calculator_spec.rb +0 -40
  240. data/spec/adhearsion/call_controller/utility_spec.rb +0 -90
  241. data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +0 -356
  242. data/spec/adhearsion/punchblock_plugin_spec.rb +0 -59
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12846db5416ee9cd8650e5b5c79f49feff15a594
4
- data.tar.gz: 1d7ded9c961eddba674c21cc6719369dda6cf4de
3
+ metadata.gz: d7c56e8ead6437f2554eea0fba508eaea1971133
4
+ data.tar.gz: 00795ee77e30cfb4ec49e5214c6a84cd82ac164f
5
5
  SHA512:
6
- metadata.gz: aeb3d7c2323bea5277ba08249b1be74fe3e35db5bebcb8f200ab80881ad679cef819bb18ba99ae180d68b0ccfe978918129f8f6c742b309c97113e5d00e26a07
7
- data.tar.gz: 06e41a0c792c651c70dbf7562c4aa2237a9c9f58a312dad6b1c72128b8cb400502e0a316b00b4c0029b10beb2931a886037d1c8cc2aefe9e8e3840096ac1ca41
6
+ metadata.gz: 65d347d4f9141f0e99643c69b8df7e0d2008ca6ac51fa936641ffa27b9e848defe7435f45482593b12b21020677fa46707b4b4b9a259ee02d27c6d78d8b21944
7
+ data.tar.gz: fd7ae40b068100dfeab3b2ddc5aa22cec816076bb30ac719800eddd8b558fa227b401e1cb7f47c00c5054eb25a1f6593624759ba747bdbca78434e3029be4033
@@ -1,18 +1,15 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.0
6
- - jruby
7
- - rbx-2.1.1
3
+ - 2.2.0
4
+ - 2.2.1
5
+ - 2.2.2
6
+ - jruby-9.0.0.0.pre2
8
7
  - ruby-head
9
8
  jdk:
10
9
  - openjdk7 # for jruby
11
10
  before_script: export JRUBY_OPTS="--server -J-Xss1024k -J-Xmx652m -J-XX:+UseConcMarkSweepGC"
12
11
  matrix:
13
12
  allow_failures:
14
- - rvm: rbx-2.1.1
15
13
  - rvm: ruby-head
16
- env: ARUBA_TIMEOUT=120 RAILS_ENV=development AHN_ENV=development
17
- notifications:
18
- irc: "irc.freenode.org#adhearsion"
14
+ env: ARUBA_TIMEOUT=120 AHN_ENV=development
15
+ sudo: false
@@ -1,13 +1,28 @@
1
1
  # [develop](https://github.com/adhearsion/adhearsion)
2
2
 
3
- # [2.6.3](https://github.com/adhearsion/adhearsion/compare/v2.6.3...v2.6.4) - [2017-01-14](https://rubygems.org/gems/adhearsion/versions/2.6.4)
4
- * Bugfix: Upgrade logging gem for compat with other libraries' dependencies [#619](https://github.com/adhearsion/adhearsion/pull/#619).
5
-
6
- # [2.6.3](https://github.com/adhearsion/adhearsion/compare/v2.6.2...v2.6.3) - [2017-01-14](https://rubygems.org/gems/adhearsion/versions/2.6.3)
7
- * Feature: CallController execution does not continue after hangup during play, speak, record or ask [#614](https://github.com/adhearsion/adhearsion/pull/#614).
8
-
9
- # [2.6.2](https://github.com/adhearsion/adhearsion/compare/v2.6.1...v2.6.2) - [2015-06-16](https://rubygems.org/gems/adhearsion/versions/2.6.2)
3
+ # [3.0.0.beta1](https://github.com/adhearsion/adhearsion/compare/v2.6.1...v3.0.0.beta1) - [2015-06-24](https://rubygems.org/gems/adhearsion/versions/3.0.0.beta1)
4
+ * Change: Removed `Adhearsion.ahn_root=` which was deprecated in favour of `Adhearsion.root=`
5
+ * Change: Remove integration with `RAILS_ENV`
6
+ * Change: Merge `#dial_and_confirm` into `#dial` such that `#dial` has parallel confirmation behaviour. Remove the old broken confirmation behaviour.
7
+ * Merge adhearsion-asr in to core to replace the original `#menu` and `#ask` methods
8
+ * Change: Removed `#interruptible_play` and `#stream_file`, both leftovers from Adhearsion 1.x which are replaced by `#ask`
10
9
  * Bugfix: Properly load application bundle. This requires the spawning removed in [#534](https://github.com/adhearsion/adhearsion/pull/534).
10
+ * Change: Removed daemonisation (`ahn daemon`, `ahn stop`, `ahn restart`, PID files) and persistent logging in favour of 12factor compliant deployment, which pushes these responsibilities up to a process manager or PaaS
11
+ * Change: Merge Punchblock into Adhearsion core
12
+ * `Punchblock::Event::*` becomes `Adhearsion::Event`
13
+ * `Punchblock::Component::*` and `Punchblock::Command::*` become `Adhearsion::Rayo::Component::*` and `Adhearsion::Rayo::Command::*` respectively
14
+ * `Adhearsion::Events.punchblock` callback becomes `Adhearsion::Events.rayo`
15
+ * `config.punchblock.*` becomes `config.platform.*`
16
+ * No longer any dependency on Punchblock, or any mention of that name
17
+ * Change: No longer supporting FreeSWITCH via IES (Rayo only) or Asterisk < 11
18
+ * Change: Ruby 1.9 is no longer supported. Minimum supported versions are Ruby 2.2.0 and JRuby 9.0.0.0
19
+ * Change: Rename "platform" to "core" relating to the config system, because "platform" is overloaded. Settings are now `config.core.*` or `AHN_CORE_*`.
20
+ * Change: Permit application environment to be set only by AHN_ENV. The config system depends on the environment, and the previous dependency was circular.
21
+ * Feature: Add i18n support via `CallController#t`
22
+ * Feature: Integrate a Rack-based HTTP server from the Virginia plugin
23
+ * Feature: Permit timing out when calling `Call#wait_for_end`
24
+ * Upgrade to Celluloid 0.16
25
+ * Move events system to Celluloid and do away with GirlFriday
11
26
 
12
27
  # [2.6.1](https://github.com/adhearsion/adhearsion/compare/v2.6.0...v2.6.1) - [2015-06-15](https://rubygems.org/gems/adhearsion/versions/2.6.1)
13
28
  * Bugfix: Improve Call initialization performance. Use an ActorProxy (subclass) instead of a method_missing definition on every Call.new. This considerably improves Call.new performance; benchmarks show approximately a 30-40% improvement: https://gist.github.com/kares/3576e272250204eb66d1
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ gem 'sinatra', require: nil
@@ -9,7 +9,7 @@
9
9
 
10
10
  Adhearsion is an open-source voice application development framework. Adhearsion users write applications atop the framework with Ruby and **call into their code**.
11
11
 
12
- Adhearsion rests above a lower-level telephony platform, for example [Asterisk](http://asterisk.org), [FreeSWTICH](http://freeswitch.org) or [Voxeo PRISM](http://voxeolabs.com/prism/), and provides a framework for integrating with various resources, such as SQL, LDAP and XMPP (Jabber).
12
+ Adhearsion rests above a lower-level telephony platform, for example [Asterisk](http://asterisk.org), [FreeSWITCH](http://freeswitch.org) or [Voxeo PRISM](http://voxeolabs.com/prism/), and provides a framework for integrating with various resources, such as SQL, LDAP and XMPP (Jabber).
13
13
 
14
14
  ## Features
15
15
 
@@ -24,15 +24,14 @@ Adhearsion rests above a lower-level telephony platform, for example [Asterisk](
24
24
 
25
25
  ## Requirements
26
26
 
27
- * Ruby 1.9.3+ or JRuby 1.7.0+
27
+ * Ruby 2.2.0+ or JRuby 9.0.0.0+
28
28
  * [ruby_speech dependencies](https://github.com/benlangfeld/ruby_speech#dependencies)
29
29
  * A VoIP platform:
30
- * Asterisk 1.8+
31
- * FreeSWITCH
30
+ * Asterisk 11+
32
31
  * A Rayo server (Prism 11+ with rayo-server, or FreeSWITCH with mod_rayo)
33
32
  * An interest in building cool new things
34
33
 
35
- **Ruby 1.9.2 is no longer supported by Adhearsion or the Ruby core team. You should upgrade to Ruby 1.9.3 or Ruby 2 as a matter of urgency in order to continue receiving security fixes.**
34
+ **Ruby 1.9 is no longer supported by Adhearsion or the Ruby core team. You should upgrade to Ruby 2.2 as a matter of urgency in order to continue receiving security fixes.**
36
35
 
37
36
  ## Install
38
37
 
data/Rakefile CHANGED
@@ -14,7 +14,6 @@ end
14
14
  require 'cucumber'
15
15
  require 'cucumber/rake/task'
16
16
  Cucumber::Rake::Task.new(:features) do |t|
17
- t.cucumber_opts = %w{--tags ~@skip_jruby} if defined?(JRUBY_VERSION)
18
17
  end
19
18
 
20
19
  Cucumber::Rake::Task.new(:wip) do |t|
@@ -31,7 +30,7 @@ rescue LoadError
31
30
  end
32
31
 
33
32
  task :stats do
34
- system 'scripts/cloc-1.64.pl . --exclude-dir=.git,vendor,coverage,doc,scripts,tmp,.bundle,pkg'
33
+ system 'doc/cloc-1.55.pl . --exclude-dir=.git,vendor,coverage,doc'
35
34
  end
36
35
 
37
36
  task :encodeify do
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.license = 'MIT'
16
16
 
17
- s.required_ruby_version = '>= 1.9.3'
17
+ s.required_ruby_version = '>= 2.2.0'
18
18
 
19
19
  s.files = `git ls-files`.split("\n")
20
20
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -23,26 +23,37 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.add_runtime_dependency 'activesupport', [">= 3.0.0", "< 5.0.0"]
25
25
  s.add_runtime_dependency 'adhearsion-loquacious', ["~> 1.9"]
26
+ s.add_runtime_dependency 'blather', ["~> 1.0"]
26
27
  s.add_runtime_dependency 'bundler', ["~> 1.0"]
27
- s.add_runtime_dependency 'celluloid', ["~> 0.14"]
28
+ s.add_runtime_dependency 'celluloid', ["~> 0.16"]
28
29
  s.add_runtime_dependency 'countdownlatch'
29
30
  s.add_runtime_dependency 'deep_merge'
30
31
  s.add_runtime_dependency 'ffi', ["~> 1.0"]
31
- s.add_runtime_dependency 'girl_friday'
32
- s.add_runtime_dependency 'has-guarded-handlers', ["~> 1.6"]
33
- s.add_runtime_dependency 'jruby-openssl' if RUBY_PLATFORM == 'java'
34
- s.add_runtime_dependency 'logging', ["~> 2.0"]
32
+ s.add_runtime_dependency 'future-resource', ["~> 1.0"]
33
+ s.add_runtime_dependency 'has-guarded-handlers', ["~> 1.6", ">= 1.6.3"]
34
+ s.add_runtime_dependency 'i18n', ["~> 0.6"]
35
+ s.add_runtime_dependency 'logging', ["~> 1.8"]
36
+ s.add_runtime_dependency 'nokogiri', ["~> 1.5", ">= 1.5.6"]
35
37
  s.add_runtime_dependency 'pry'
36
- s.add_runtime_dependency 'punchblock', ["~> 2.6"]
37
38
  s.add_runtime_dependency 'rake'
38
- s.add_runtime_dependency 'ruby_speech', ["~> 2.0"]
39
+ s.add_runtime_dependency 'reel', ["~> 0.5.0"]
40
+ s.add_runtime_dependency 'reel-rack', ["~> 0.2.0"]
41
+ s.add_runtime_dependency 'ruby_ami', ["~> 2.2"]
42
+ s.add_runtime_dependency 'ruby_jid', ["~> 1.0"]
43
+ s.add_runtime_dependency 'ruby_speech', ["~> 2.3"]
44
+ s.add_runtime_dependency 'state_machine', ["~> 1.0"]
39
45
  s.add_runtime_dependency 'thor', "~> 0.18.0"
46
+ s.add_runtime_dependency 'virtus', ["~> 1.0"]
40
47
 
41
48
  s.add_development_dependency 'aruba', "~> 0.5"
49
+ s.add_development_dependency 'ci_reporter_rspec'
50
+ s.add_development_dependency 'ci_reporter_cucumber'
42
51
  s.add_development_dependency 'cucumber'
43
52
  s.add_development_dependency 'guard-cucumber'
44
53
  s.add_development_dependency 'guard-rspec'
45
54
  s.add_development_dependency 'rspec', ["~> 3.0"]
55
+ s.add_development_dependency 'simplecov'
56
+ s.add_development_dependency 'simplecov-rcov'
46
57
  s.add_development_dependency 'yard'
47
58
  s.add_development_dependency 'guard-yard'
48
59
  s.add_development_dependency 'coveralls'
@@ -7,9 +7,12 @@ Feature: Adhearsion Ahn CLI (Create)
7
7
  When I run `ahn create path/somewhere`
8
8
  And I cd to "path/somewhere"
9
9
  Then the following directories should exist:
10
+ | app/assets/audio |
11
+ | app/assets/audio/en |
10
12
  | app/call_controllers |
11
13
  | lib |
12
14
  | config |
15
+ | config/locales |
13
16
  | script |
14
17
  | spec |
15
18
  | spec/call_controllers |
@@ -18,11 +21,14 @@ Feature: Adhearsion Ahn CLI (Create)
18
21
  And the following files should exist:
19
22
  | .gitignore |
20
23
  | .rspec |
24
+ | app/assets/audio/en/hello_world.wav |
21
25
  | app/call_controllers/simon_game.rb |
22
26
  | config/adhearsion.rb |
23
27
  | config/environment.rb |
24
28
  | config/events.rb |
25
29
  | config/routes.rb |
30
+ | config/locales/en.yml |
31
+ | config.ru |
26
32
  | Gemfile |
27
33
  | script/ahn |
28
34
  | spec/spec_helper.rb |
@@ -35,7 +41,7 @@ Feature: Adhearsion Ahn CLI (Create)
35
41
  """
36
42
  Adhearsion.config
37
43
  logging.level
38
- config.punchblock
44
+ config.core.username
39
45
  """
40
46
  And the file "config/events.rb" should contain each of these content parts:
41
47
  """
@@ -45,6 +51,10 @@ Feature: Adhearsion Ahn CLI (Create)
45
51
  """
46
52
  Adhearsion.router
47
53
  """
54
+ And the file "config.ru" should contain each of these content parts:
55
+ """
56
+ run Sinatra::Application
57
+ """
48
58
  And the file "README.md" should contain each of these content parts:
49
59
  """
50
60
  Start your new app with
@@ -53,19 +63,22 @@ Feature: Adhearsion Ahn CLI (Create)
53
63
  And the file "Rakefile" should contain "adhearsion/tasks"
54
64
  And the file "Gemfile" should contain each of these content parts:
55
65
  """
56
- source 'https://rubygems.org
57
- gem 'adhearsion-asr'
66
+ source 'https://rubygems.org'
67
+ gem 'adhearsion'
58
68
  """
59
69
  And the file "app/call_controllers/simon_game.rb" should contain "class SimonGame"
60
70
  And the file "script/ahn" should contain "require 'adhearsion'"
71
+ And the file "config/locales/en.yml" should contain "en:"
61
72
 
62
73
  Scenario: Generate application --empty
63
74
  When I run `ahn create path/somewhere --empty`
64
75
  And I cd to "path/somewhere"
65
76
  Then the following directories should exist:
77
+ | app/assets/audio |
66
78
  | app/call_controllers |
67
79
  | lib |
68
80
  | config |
81
+ | config/locales |
69
82
  | script |
70
83
  | spec |
71
84
  | spec/call_controllers |
@@ -78,6 +91,7 @@ Feature: Adhearsion Ahn CLI (Create)
78
91
  | config/environment.rb |
79
92
  | config/events.rb |
80
93
  | config/routes.rb |
94
+ | config.ru |
81
95
  | Gemfile |
82
96
  | script/ahn |
83
97
  | spec/spec_helper.rb |
@@ -86,7 +100,9 @@ Feature: Adhearsion Ahn CLI (Create)
86
100
  | Procfile |
87
101
 
88
102
  And the following files should not exist:
103
+ | app/assets/audio/en/hello_world.wav |
89
104
  | app/call_controllers/simon_game.rb |
105
+ | config/locales/en.yml |
90
106
  | spec/call_controllers/simon_game_spec.rb |
91
107
 
92
108
  And the file "config/events.rb" should not contain each of these content parts:
@@ -4,7 +4,6 @@ Then /^I should see the usage message$/ do
4
4
  steps %Q{
5
5
  Then the output should contain "ahn create"
6
6
  Then the output should contain "ahn start"
7
- Then the output should contain "ahn daemon"
8
7
  Then the output should contain "ahn version"
9
8
  Then the output should contain "ahn plugin"
10
9
  Then the output should contain "ahn help"
@@ -57,13 +56,3 @@ Then /^there should be a valid adhearsion directory named "([^"]*)"$/ do |path|
57
56
  dotsback.shift if dotsback[0].is_a?(String) and dotsback[0].empty?
58
57
  cd(dotsback)
59
58
  end
60
-
61
- When /^I terminate the process using the pid file "([^"]*)"$/ do |pidfile|
62
- check_file_presence([pidfile], true)
63
- prep_for_fs_check do
64
- pid = File.read(pidfile).to_i
65
- Process.kill("TERM", pid)
66
- sleep 1
67
- end
68
- end
69
-
@@ -9,16 +9,15 @@ require 'adhearsion'
9
9
 
10
10
  Before do
11
11
  @aruba_timeout_seconds = ENV.has_key?('ARUBA_TIMEOUT') ? ENV['ARUBA_TIMEOUT'].to_i : (RUBY_PLATFORM == 'java' ? 60 : 30)
12
- ENV['AHN_PUNCHBLOCK_RECONNECT_ATTEMPTS'] = '0'
13
- ENV['AHN_PUNCHBLOCK_PORT'] = '1'
12
+ ENV['AHN_CORE_RECONNECT_ATTEMPTS'] = '0'
13
+ ENV['AHN_CORE_PORT'] = '1'
14
14
  end
15
15
 
16
16
  Before '@reconnect' do
17
- ENV['AHN_PUNCHBLOCK_RECONNECT_ATTEMPTS'] = '100'
17
+ ENV['AHN_CORE_RECONNECT_ATTEMPTS'] = '100'
18
18
  end
19
19
 
20
20
  # TODO: check for name space / run issues
21
- # NOTE: this will not stop a forked process (eg. daemon mode)
22
21
  After do
23
22
  terminate_processes!
24
23
  end
@@ -1,24 +1,23 @@
1
1
  # encoding: utf-8
2
2
 
3
- 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.3, JRuby 1.7.0 or Rubinius 2.0." if RUBY_VERSION < "1.9.3"
3
+ abort "ERROR: You are running Adhearsion on an unsupported version of Ruby (Ruby #{RUBY_VERSION} #{RUBY_RELEASE_DATE})! Please upgrade to at least Ruby v2.2.0 or JRuby 9.0.0.0." if RUBY_VERSION < "2.2"
4
4
 
5
5
  %w(
6
- punchblock
6
+ adhearsion/rayo
7
7
  celluloid
8
+ active_support/inflector
8
9
  ).each { |r| require r }
9
10
 
10
-
11
11
  module Adhearsion
12
- Error = Class.new StandardError
13
-
14
12
  class << self
13
+ delegate :client, to: Rayo::Initializer
15
14
 
16
15
  #
17
16
  # Sets the application path
18
17
  # @param[String|Pathname] The application path to set
19
18
  #
20
19
  def root=(path)
21
- Adhearsion.config[:platform].root = path.nil? ? nil : File.expand_path(path)
20
+ Adhearsion.config[:core].root = path.nil? ? nil : File.expand_path(path)
22
21
  end
23
22
 
24
23
  #
@@ -26,19 +25,11 @@ module Adhearsion
26
25
  # @return [Pathname] The application path
27
26
  #
28
27
  def root
29
- Adhearsion.config[:platform].root
30
- end
31
-
32
- #
33
- # @deprecated Use #root= instead
34
- #
35
- def ahn_root=(path)
36
- Adhearsion.deprecated "#Adhearsion.root="
37
- Adhearsion.root = path
28
+ Adhearsion.config[:core].root
38
29
  end
39
30
 
40
31
  def config(&block)
41
- @config ||= initialize_config
32
+ @config ||= Configuration.new(environment)
42
33
  block_given? and yield @config
43
34
  @config
44
35
  end
@@ -48,19 +39,12 @@ module Adhearsion
48
39
  logger.warn caller.join("\n")
49
40
  end
50
41
 
51
- def initialize_config
52
- _config = Configuration.new
53
- env = environment.to_sym if environment.respond_to? :to_sym
54
- unless _config.valid_environment? env
55
- puts "You tried to initialize with an invalid environment name #{env}; environment-specific config may not load successfully. Valid values are #{_config.valid_environments}."
56
- env = nil
57
- end
58
- _config.platform.environment = env if env
59
- _config
42
+ def environment
43
+ @environment ||= (ENV['AHN_ENV'] || :development).to_sym
60
44
  end
61
45
 
62
- def environment
63
- ENV['AHN_ENV'] || ENV['RAILS_ENV'] || :development
46
+ def environment=(other)
47
+ @environment = other ? other.to_sym : other
64
48
  end
65
49
 
66
50
  def environments
@@ -83,6 +67,10 @@ module Adhearsion
83
67
  @active_calls ||= Calls.new
84
68
  end
85
69
 
70
+ def active_calls=(other)
71
+ @active_calls = other
72
+ end
73
+
86
74
  #
87
75
  # @return [Adhearsion::Statistics] a statistics aggregator object capable of producing stats dumps
88
76
  def statistics
@@ -96,6 +84,36 @@ module Adhearsion
96
84
  def status
97
85
  Adhearsion::Process.state_name
98
86
  end
87
+
88
+ def new_uuid
89
+ SecureRandom.uuid
90
+ end
91
+
92
+ def new_request_id
93
+ SecureRandom.uuid
94
+ end
95
+
96
+ #
97
+ # Get a new client with a connection attached
98
+ #
99
+ # @param [Symbol] type the connection type (eg :XMPP, :asterisk)
100
+ # @param [Hash] options the options to pass to the connection (credentials, etc
101
+ #
102
+ # @return [Adhearsion::Rayo::Client] a client object
103
+ #
104
+ def client_with_connection(type, options)
105
+ connection = Rayo::Connection.const_get(type == :xmpp ? 'XMPP' : type.to_s.classify).new options
106
+ Rayo::Client.new :connection => connection
107
+ rescue NameError
108
+ raise ArgumentError, "Connection type #{type.inspect} is not valid."
109
+ end
110
+
111
+ def execute_component(command, timeout = 60)
112
+ client.execute_command command, :async => true
113
+ response = command.response timeout
114
+ raise response if response.is_a? Exception
115
+ command
116
+ end
99
117
  end
100
118
  end
101
119
 
@@ -118,6 +136,8 @@ end
118
136
  calls
119
137
  configuration
120
138
  console
139
+ error
140
+ event
121
141
  events
122
142
  generators
123
143
  initializer
@@ -125,6 +145,7 @@ end
125
145
  outbound_call
126
146
  plugin
127
147
  process
148
+ protocol_error
128
149
  router
129
150
  statistics
130
151
  ).each { |f| require "adhearsion/#{f}" }