adhearsion 2.6.4 → 3.0.0.beta1

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 (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}" }