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
@@ -17,32 +17,32 @@ module Adhearsion
17
17
  let(:content) { RubySpeech::SSML.draw { string "BOO" } }
18
18
 
19
19
  it "should execute an output component with the provided SSML content" do
20
- component = Punchblock::Component::Output.new :ssml => content
20
+ component = Adhearsion::Rayo::Component::Output.new :ssml => content
21
21
  expect_message_waiting_for_response component
22
22
  subject.output content
23
23
  end
24
24
 
25
25
  it "should allow extra options to be passed to the output component" do
26
- component = Punchblock::Component::Output.new :ssml => content, :start_paused => true
26
+ component = Adhearsion::Rayo::Component::Output.new :ssml => content, :start_paused => true
27
27
  expect_message_waiting_for_response component
28
28
  subject.output content, :start_paused => true
29
29
  end
30
30
 
31
31
  it "returns the component" do
32
- component = Punchblock::Component::Output.new :ssml => content
32
+ component = Adhearsion::Rayo::Component::Output.new :ssml => content
33
33
  expect_message_waiting_for_response component
34
- expect(subject.output(content)).to be_a Punchblock::Component::Output
34
+ expect(subject.output(content)).to be_a Adhearsion::Rayo::Component::Output
35
35
  end
36
36
 
37
37
  it "raises a PlaybackError if the component fails to start" do
38
- expect_message_waiting_for_response Punchblock::Component::Output.new(:ssml => content), Punchblock::ProtocolError
38
+ expect_message_waiting_for_response Adhearsion::Rayo::Component::Output.new(:ssml => content), Adhearsion::ProtocolError
39
39
  expect { subject.output content }.to raise_error(PlaybackError)
40
40
  end
41
41
 
42
42
  it "logs the complete event if it is an error" do
43
- response = Punchblock::Event::Complete.new
44
- response.reason = Punchblock::Event::Complete::Error.new
45
- component = Punchblock::Component::Output.new(:ssml => content)
43
+ response = Adhearsion::Event::Complete.new
44
+ response.reason = Adhearsion::Event::Complete::Error.new
45
+ component = Adhearsion::Rayo::Component::Output.new(:ssml => content)
46
46
  allow(subject).to receive_messages :new_output => component
47
47
  expect_message_waiting_for_response component
48
48
  expect(controller.logger).to receive(:error).once
@@ -57,7 +57,7 @@ module Adhearsion
57
57
  let(:ssml) { RubySpeech::SSML.draw { string "BOO" } }
58
58
 
59
59
  it 'executes an Output with the correct ssml' do
60
- component = Punchblock::Component::Output.new :ssml => ssml
60
+ component = Adhearsion::Rayo::Component::Output.new :ssml => ssml
61
61
  expect_message_waiting_for_response component
62
62
  subject.play_ssml ssml
63
63
  end
@@ -67,7 +67,7 @@ module Adhearsion
67
67
  let(:url) { "http://example.com/ex.ssml" }
68
68
 
69
69
  it 'executes an Output with the URL' do
70
- component = Punchblock::Component::Output.new({render_document: {value: url, content_type: "application/ssml+xml"}})
70
+ component = Adhearsion::Rayo::Component::Output.new({render_document: {value: url, content_type: "application/ssml+xml"}})
71
71
  expect_message_waiting_for_response component
72
72
  subject.play_url url
73
73
  end
@@ -17,18 +17,18 @@ module Adhearsion
17
17
  let(:content) { RubySpeech::SSML.draw { string "BOO" } }
18
18
 
19
19
  it "should execute an output component with the provided SSML content" do
20
- expect_component_execution Punchblock::Component::Output.new(:ssml => content)
20
+ expect_component_execution Adhearsion::Rayo::Component::Output.new(:ssml => content)
21
21
  subject.output content
22
22
  end
23
23
 
24
24
  it "should allow extra options to be passed to the output component" do
25
- component = Punchblock::Component::Output.new :ssml => content, :start_paused => true
25
+ component = Adhearsion::Rayo::Component::Output.new :ssml => content, :start_paused => true
26
26
  expect_component_execution component
27
27
  subject.output content, :start_paused => true
28
28
  end
29
29
 
30
30
  it "yields the component to the block before waiting for it to finish" do
31
- component = Punchblock::Component::Output.new :ssml => content
31
+ component = Adhearsion::Rayo::Component::Output.new :ssml => content
32
32
 
33
33
  expect(controller).to receive(:execute_component_and_await_completion).once.with(component).and_yield(:foo)
34
34
 
@@ -42,17 +42,17 @@ module Adhearsion
42
42
  end
43
43
 
44
44
  it "raises a PlaybackError if the component fails to start" do
45
- expect_component_execution Punchblock::Component::Output.new(:ssml => content), Punchblock::ProtocolError
45
+ expect_component_execution Adhearsion::Rayo::Component::Output.new(:ssml => content), Adhearsion::ProtocolError
46
46
  expect { subject.output content }.to raise_error(PlaybackError)
47
47
  end
48
48
 
49
49
  it "raises a Playback Error if the component ends due to an error" do
50
- expect_component_execution Punchblock::Component::Output.new(:ssml => content), Adhearsion::Error
50
+ expect_component_execution Adhearsion::Rayo::Component::Output.new(:ssml => content), Adhearsion::Error
51
51
  expect { subject.output content }.to raise_error(PlaybackError)
52
52
  end
53
53
 
54
54
  it "raises a Call::Hangup exception if the component ends due to an error" do
55
- expect_component_execution Punchblock::Component::Output.new(:ssml => content), Call::Hangup
55
+ expect_component_execution Adhearsion::Rayo::Component::Output.new(:ssml => content), Call::Hangup
56
56
  expect { subject.output content }.to raise_error(Call::Hangup)
57
57
  end
58
58
  end
@@ -61,7 +61,7 @@ module Adhearsion
61
61
  let(:ssml) { RubySpeech::SSML.draw { string "BOO" } }
62
62
 
63
63
  it 'executes an Output with the correct ssml' do
64
- expect_component_execution Punchblock::Component::Output.new(:ssml => ssml)
64
+ expect_component_execution Adhearsion::Rayo::Component::Output.new(:ssml => ssml)
65
65
  subject.play_ssml ssml
66
66
  end
67
67
  end
@@ -70,7 +70,7 @@ module Adhearsion
70
70
  let(:url) { "http://example.com/ex.ssml" }
71
71
 
72
72
  it 'executes an Output with the URL' do
73
- component = Punchblock::Component::Output.new({render_document: {value: url, content_type: "application/ssml+xml"}})
73
+ component = Adhearsion::Rayo::Component::Output.new({render_document: {value: url, content_type: "application/ssml+xml"}})
74
74
  expect_component_execution component
75
75
  subject.play_url url
76
76
  end
@@ -9,20 +9,20 @@ module Adhearsion
9
9
  include CallControllerTestHelpers
10
10
 
11
11
  def expect_ssml_output(ssml, options = {})
12
- expect_component_execution Punchblock::Component::Output.new(options.merge(:ssml => ssml))
12
+ expect_component_execution Adhearsion::Rayo::Component::Output.new(options.merge(:ssml => ssml))
13
13
  end
14
14
 
15
15
  def expect_async_ssml_output(ssml, options = {})
16
- expect_message_waiting_for_response Punchblock::Component::Output.new(options.merge(:ssml => ssml))
16
+ expect_message_waiting_for_response Adhearsion::Rayo::Component::Output.new(options.merge(:ssml => ssml))
17
17
  end
18
18
 
19
19
  def expect_url_output(url, options = {})
20
- component = Punchblock::Component::Output.new(options.merge(render_document: {value: url, content_type: "application/ssml+xml"}))
20
+ component = Adhearsion::Rayo::Component::Output.new(options.merge(render_document: {value: url, content_type: "application/ssml+xml"}))
21
21
  expect_component_execution component
22
22
  end
23
23
 
24
24
  def expect_async_url_output(url, options = {})
25
- component = Punchblock::Component::Output.new(options.merge(render_document: {value: url, content_type: "application/ssml+xml"}))
25
+ component = Adhearsion::Rayo::Component::Output.new(options.merge(render_document: {value: url, content_type: "application/ssml+xml"}))
26
26
  expect_message_waiting_for_response component
27
27
  end
28
28
 
@@ -73,10 +73,10 @@ module Adhearsion
73
73
  end
74
74
 
75
75
  context "with a media engine" do
76
- let(:media_engine) { :native }
76
+ let(:renderer) { :native }
77
77
  it "should use the specified media engine in the component" do
78
- expect_ssml_output ssml, renderer: media_engine
79
- expect(subject.play_audio(audio_file, renderer: media_engine)).to be true
78
+ expect_ssml_output ssml, renderer: renderer
79
+ expect(subject.play_audio(audio_file, renderer: renderer)).to be true
80
80
  end
81
81
  end
82
82
  end
@@ -91,7 +91,7 @@ module Adhearsion
91
91
 
92
92
  it 'plays the correct ssml' do
93
93
  expect_async_ssml_output ssml
94
- expect(subject.play_audio!(audio_file)).to be_a Punchblock::Component::Output
94
+ expect(subject.play_audio!(audio_file)).to be_a Adhearsion::Rayo::Component::Output
95
95
  end
96
96
 
97
97
  context "with a fallback" do
@@ -107,15 +107,15 @@ module Adhearsion
107
107
 
108
108
  it 'places the fallback in the SSML doc' do
109
109
  expect_async_ssml_output ssml
110
- expect(subject.play_audio!(audio_file, :fallback => fallback)).to be_a Punchblock::Component::Output
110
+ expect(subject.play_audio!(audio_file, :fallback => fallback)).to be_a Adhearsion::Rayo::Component::Output
111
111
  end
112
112
  end
113
113
 
114
- context "with a media engine" do
115
- let(:media_engine) { :native }
116
- it "should use the specified media engine in the SSML" do
117
- expect_async_ssml_output ssml, renderer: media_engine
118
- expect(subject.play_audio!(audio_file, renderer: media_engine)).to be_a Punchblock::Component::Output
114
+ context "with a renderer" do
115
+ let(:renderer) { :native }
116
+ it "should use the specified renderer in the output component" do
117
+ expect_async_ssml_output ssml, renderer: renderer
118
+ expect(subject.play_audio!(audio_file, renderer: renderer)).to be_a Adhearsion::Rayo::Component::Output
119
119
  end
120
120
  end
121
121
  end
@@ -176,7 +176,7 @@ module Adhearsion
176
176
 
177
177
  it 'plays the correct ssml' do
178
178
  expect_async_ssml_output ssml
179
- expect(subject.play_numeric!(input)).to be_a Punchblock::Component::Output
179
+ expect(subject.play_numeric!(input)).to be_a Adhearsion::Rayo::Component::Output
180
180
  end
181
181
  end
182
182
 
@@ -185,7 +185,7 @@ module Adhearsion
185
185
 
186
186
  it 'plays the correct ssml' do
187
187
  expect_async_ssml_output ssml
188
- expect(subject.play_numeric!(input)).to be_a Punchblock::Component::Output
188
+ expect(subject.play_numeric!(input)).to be_a Adhearsion::Rayo::Component::Output
189
189
  end
190
190
  end
191
191
 
@@ -203,7 +203,7 @@ module Adhearsion
203
203
 
204
204
  it "should use the specified renderer in the SSML" do
205
205
  expect_async_ssml_output ssml, renderer: renderer
206
- expect(subject.play_numeric!(input, renderer: renderer)).to be_a Punchblock::Component::Output
206
+ expect(subject.play_numeric!(input, renderer: renderer)).to be_a Adhearsion::Rayo::Component::Output
207
207
  end
208
208
  end
209
209
  end
@@ -233,7 +233,7 @@ module Adhearsion
233
233
 
234
234
  it 'plays the url' do
235
235
  expect_async_url_output input
236
- expect(subject.play_document!(input)).to be_a Punchblock::Component::Output
236
+ expect(subject.play_document!(input)).to be_a Adhearsion::Rayo::Component::Output
237
237
  end
238
238
  end
239
239
 
@@ -347,7 +347,7 @@ module Adhearsion
347
347
 
348
348
  it 'plays the correct SSML' do
349
349
  expect_async_ssml_output ssml
350
- expect(subject.play_time!(input)).to be_a Punchblock::Component::Output
350
+ expect(subject.play_time!(input)).to be_a Adhearsion::Rayo::Component::Output
351
351
  end
352
352
  end
353
353
 
@@ -357,7 +357,7 @@ module Adhearsion
357
357
 
358
358
  it 'plays the correct SSML' do
359
359
  expect_async_ssml_output ssml
360
- expect(subject.play_time!(input)).to be_a Punchblock::Component::Output
360
+ expect(subject.play_time!(input)).to be_a Adhearsion::Rayo::Component::Output
361
361
  end
362
362
  end
363
363
 
@@ -368,7 +368,7 @@ module Adhearsion
368
368
 
369
369
  it 'plays the correct SSML' do
370
370
  expect_async_ssml_output ssml
371
- expect(subject.play_time!(input, :format => format)).to be_a Punchblock::Component::Output
371
+ expect(subject.play_time!(input, :format => format)).to be_a Adhearsion::Rayo::Component::Output
372
372
  end
373
373
  end
374
374
 
@@ -380,7 +380,7 @@ module Adhearsion
380
380
 
381
381
  it 'plays the correct SSML' do
382
382
  expect_async_ssml_output ssml
383
- expect(subject.play_time!(base_input, :strftime => strftime)).to be_a Punchblock::Component::Output
383
+ expect(subject.play_time!(base_input, :strftime => strftime)).to be_a Adhearsion::Rayo::Component::Output
384
384
  end
385
385
  end
386
386
 
@@ -393,7 +393,7 @@ module Adhearsion
393
393
 
394
394
  it 'plays the correct SSML' do
395
395
  expect_async_ssml_output ssml
396
- expect(subject.play_time!(base_input, :format => format, :strftime => strftime)).to be_a Punchblock::Component::Output
396
+ expect(subject.play_time!(base_input, :format => format, :strftime => strftime)).to be_a Adhearsion::Rayo::Component::Output
397
397
  end
398
398
  end
399
399
 
@@ -405,7 +405,7 @@ module Adhearsion
405
405
 
406
406
  it "should use the specified renderer in the SSML" do
407
407
  expect_async_ssml_output ssml, renderer: renderer
408
- expect(subject.play_time!(input, format: format, renderer: renderer)).to be_a Punchblock::Component::Output
408
+ expect(subject.play_time!(input, format: format, renderer: renderer)).to be_a Adhearsion::Rayo::Component::Output
409
409
  end
410
410
  end
411
411
 
@@ -611,7 +611,7 @@ module Adhearsion
611
611
 
612
612
  it 'plays the audio file' do
613
613
  expect_async_ssml_output ssml
614
- expect(subject.play!(audio_file)).to be_a Punchblock::Component::Output
614
+ expect(subject.play!(audio_file)).to be_a Adhearsion::Rayo::Component::Output
615
615
  end
616
616
 
617
617
  it 'plays the audio file with the specified extra options if present' do
@@ -635,7 +635,7 @@ module Adhearsion
635
635
 
636
636
  it 'plays all arguments in one document' do
637
637
  expect_async_ssml_output ssml
638
- expect(subject.play!(*args)).to be_a Punchblock::Component::Output
638
+ expect(subject.play!(*args)).to be_a Adhearsion::Rayo::Component::Output
639
639
  end
640
640
 
641
641
  it 'plays all arguments in one document with the extra options if present' do
@@ -657,7 +657,7 @@ module Adhearsion
657
657
 
658
658
  it 'plays the number' do
659
659
  expect_async_ssml_output ssml
660
- expect(subject.play!(argument)).to be_a Punchblock::Component::Output
660
+ expect(subject.play!(argument)).to be_a Adhearsion::Rayo::Component::Output
661
661
  end
662
662
  end
663
663
 
@@ -673,7 +673,7 @@ module Adhearsion
673
673
 
674
674
  it 'plays the number' do
675
675
  expect_async_ssml_output ssml
676
- expect(subject.play!(argument)).to be_a Punchblock::Component::Output
676
+ expect(subject.play!(argument)).to be_a Adhearsion::Rayo::Component::Output
677
677
  end
678
678
  end
679
679
 
@@ -689,7 +689,7 @@ module Adhearsion
689
689
 
690
690
  it 'plays the time' do
691
691
  expect_async_ssml_output ssml
692
- expect(subject.play!(time)).to be_a Punchblock::Component::Output
692
+ expect(subject.play!(time)).to be_a Adhearsion::Rayo::Component::Output
693
693
  end
694
694
  end
695
695
 
@@ -704,7 +704,7 @@ module Adhearsion
704
704
 
705
705
  it 'plays the time' do
706
706
  expect_async_ssml_output ssml
707
- expect(subject.play!(date)).to be_a Punchblock::Component::Output
707
+ expect(subject.play!(date)).to be_a Adhearsion::Rayo::Component::Output
708
708
  end
709
709
  end
710
710
 
@@ -723,7 +723,7 @@ module Adhearsion
723
723
 
724
724
  it 'plays the time with the specified format and strftime' do
725
725
  expect_async_ssml_output ssml
726
- expect(subject.play!(:value => date, :format => format, :strftime => strftime)).to be_a Punchblock::Component::Output
726
+ expect(subject.play!(:value => date, :format => format, :strftime => strftime)).to be_a Adhearsion::Rayo::Component::Output
727
727
  end
728
728
  end
729
729
 
@@ -732,106 +732,7 @@ module Adhearsion
732
732
 
733
733
  it "plays the SSML without generating" do
734
734
  expect_async_ssml_output ssml
735
- expect(subject.play!(ssml)).to be_a Punchblock::Component::Output
736
- end
737
- end
738
- end
739
-
740
- describe "#interruptible_play" do
741
- let(:output1) { "one two" }
742
- let(:output2) { "three four" }
743
- let(:non_existing) { "http://adhearsion.com/nonexistingfile.mp3" }
744
- let(:extra_options) { {renderer: :native } }
745
-
746
- it "plays two outputs in succession" do
747
- expect(subject).to receive(:stream_file).twice
748
- digit = subject.interruptible_play output1, output2
749
- expect(digit).to be_nil
750
- end
751
-
752
- it "stops at the first play when input is received" do
753
- expect(subject).to receive(:stream_file).once.and_return(2)
754
- digit = subject.interruptible_play output1, output2
755
- expect(digit).to eq(2)
756
- end
757
-
758
- it "passes options on to #stream_file" do
759
- expect(subject).to receive(:stream_file).once.with(output1, '0123456789#*', extra_options)
760
- expect(subject).to receive(:stream_file).once.with(output2, '0123456789#*', extra_options)
761
- digit = subject.interruptible_play output1, output2, extra_options
762
- expect(digit).to be_nil
763
- end
764
-
765
- it 'raises an exception when output is unsuccessful' do
766
- expect(subject).to receive(:stream_file).once.and_raise Output::PlaybackError, "Output failed"
767
- expect { subject.interruptible_play non_existing }.to raise_error(Output::PlaybackError)
768
- end
769
- end
770
-
771
- describe "#stream_file" do
772
- let(:allowed_digits) { '35' }
773
- let(:prompt) { "Press 3 or 5 to make something happen." }
774
-
775
- let(:ssml) do
776
- RubySpeech::SSML.draw do
777
- string "Press 3 or 5 to make something happen."
778
- end
779
- end
780
-
781
- let(:grammar) do
782
- RubySpeech::GRXML.draw :mode => 'dtmf', :root => 'acceptdigits' do
783
- rule id: 'acceptdigits' do
784
- one_of do
785
- allowed_digits.each { |d| item { d.to_s } }
786
- end
787
- end
788
- end
789
- end
790
-
791
- let(:output_component) {
792
- Punchblock::Component::Output.new :ssml => ssml.to_s
793
- }
794
-
795
- let(:input_component) {
796
- Punchblock::Component::Input.new :mode => :dtmf,
797
- :grammar => { :value => grammar.to_s }
798
- }
799
-
800
- def expect_component_complete_event
801
- expect_input_component_complete_event 'dtmf-5'
802
- end
803
-
804
- #test does pass and method works, but not sure if the empty method is a good idea
805
- it "plays the correct output" do
806
- allow(controller).to receive(:write_and_await_response)
807
-
808
- expect_component_complete_event
809
- expect_component_execution Punchblock::Component::Output.new(:ssml => ssml)
810
- subject.stream_file prompt, allowed_digits
811
- end
812
-
813
- it "returns a single digit amongst the allowed when pressed" do
814
- expect(controller).to receive(:write_and_await_response).with(kind_of(Punchblock::Component::Input)) do |input_component|
815
- input_component.trigger_event_handler Punchblock::Event::Complete.new
816
- end
817
-
818
- expect(controller).to receive(:write_and_await_response).once.with(kind_of(Punchblock::Component::Output))
819
-
820
- expect_any_instance_of(Punchblock::Component::Output).to receive(:stop!)
821
- expect_any_instance_of(Punchblock::Component::Output).to receive(:complete_event).and_return double('complete', reason: double('Reason'))
822
- expect_input_component_complete_event 'dtmf-5'
823
-
824
- expect(subject.stream_file(prompt, allowed_digits)).to eq('5')
825
- end
826
-
827
- context "with output options passed in" do
828
- let(:extra_options) { {renderer: :native } }
829
- it "plays the correct output with options" do
830
- allow(controller).to receive(:write_and_await_response)
831
-
832
- expect_component_complete_event
833
- expect_component_execution Punchblock::Component::Output.new({:ssml => ssml}.merge(extra_options))
834
- subject.stream_file prompt, allowed_digits, extra_options
735
+ expect(subject.play!(ssml)).to be_a Adhearsion::Rayo::Component::Output
835
736
  end
836
737
  end
837
738
  end
@@ -847,7 +748,7 @@ module Adhearsion
847
748
  it 'plays the correct SSML' do
848
749
  ssml = RubySpeech::SSML.draw { string "Hello world" }
849
750
  expect_ssml_output ssml
850
- expect(subject.say(ssml)).to be_a Punchblock::Component::Output
751
+ expect(subject.say(ssml)).to be_a Adhearsion::Rayo::Component::Output
851
752
  end
852
753
  end
853
754
 
@@ -856,30 +757,16 @@ module Adhearsion
856
757
  str = "Hello world"
857
758
  ssml = RubySpeech::SSML.draw { string str }
858
759
  expect_ssml_output ssml
859
- expect(subject.say(str)).to be_a Punchblock::Component::Output
860
- end
861
- end
862
-
863
- describe "with a default voice set in PB config" do
864
- before { Adhearsion.config.punchblock.default_voice = 'foo' }
865
-
866
- it 'sets the voice on the output component' do
867
- str = "Hello world"
868
- ssml = RubySpeech::SSML.draw { string str }
869
- expect_ssml_output ssml, voice: 'foo'
870
- subject.say(str)
760
+ expect(subject.say(str)).to be_a Adhearsion::Rayo::Component::Output
871
761
  end
872
-
873
- after { Adhearsion.config.punchblock.default_voice = nil }
874
762
  end
875
763
 
876
- describe "with a default voice set in core and PB config" do
764
+ describe "with a default voice set in core config" do
877
765
  before do
878
- Adhearsion.config.punchblock.default_voice = 'foo'
879
- Adhearsion.config.platform.media.default_voice = 'bar'
766
+ Adhearsion.config.core.media.default_voice = 'bar'
880
767
  end
881
768
 
882
- it 'prefers core config to set the voice on the output component' do
769
+ it 'sets the voice on the output component' do
883
770
  str = "Hello world"
884
771
  ssml = RubySpeech::SSML.draw { string str }
885
772
  expect_ssml_output ssml, voice: 'bar'
@@ -887,31 +774,16 @@ module Adhearsion
887
774
  end
888
775
 
889
776
  after do
890
- Adhearsion.config.punchblock.default_voice = nil
891
- Adhearsion.config.platform.media.default_voice = nil
777
+ Adhearsion.config.core.media.default_voice = nil
892
778
  end
893
779
  end
894
780
 
895
- describe "with a default media engine set in PB config" do
896
- before { Adhearsion.config.punchblock.media_engine = 'foo' }
897
-
898
- it 'sets the renderer on the output component' do
899
- str = "Hello world"
900
- ssml = RubySpeech::SSML.draw { string str }
901
- expect_ssml_output ssml, renderer: 'foo'
902
- subject.say(str)
903
- end
904
-
905
- after { Adhearsion.config.punchblock.media_engine = nil }
906
- end
907
-
908
- describe "with a default renderer set in core and PB config" do
781
+ describe "with a default renderer set in config" do
909
782
  before do
910
- Adhearsion.config.punchblock.media_engine = 'foo'
911
- Adhearsion.config.platform.media.default_renderer = 'bar'
783
+ Adhearsion.config.core.media.default_renderer = 'bar'
912
784
  end
913
785
 
914
- it 'prefers core config to set the renderer on the output component' do
786
+ it 'sets the renderer on the output component' do
915
787
  str = "Hello world"
916
788
  ssml = RubySpeech::SSML.draw { string str }
917
789
  expect_ssml_output ssml, renderer: 'bar'
@@ -919,8 +791,7 @@ module Adhearsion
919
791
  end
920
792
 
921
793
  after do
922
- Adhearsion.config.punchblock.media_engine = nil
923
- Adhearsion.config.platform.media.default_renderer = nil
794
+ Adhearsion.config.core.media.default_renderer = nil
924
795
  end
925
796
  end
926
797
 
@@ -929,7 +800,7 @@ module Adhearsion
929
800
  argument = 123
930
801
  ssml = RubySpeech::SSML.draw { string '123' }
931
802
  expect_ssml_output ssml
932
- expect(subject.say(argument)).to be_a Punchblock::Component::Output
803
+ expect(subject.say(argument)).to be_a Adhearsion::Rayo::Component::Output
933
804
  end
934
805
  end
935
806
  end
@@ -951,7 +822,7 @@ module Adhearsion
951
822
  it 'plays the correct SSML' do
952
823
  ssml = RubySpeech::SSML.draw { string "Hello world" }
953
824
  expect_async_ssml_output ssml
954
- expect(subject.say!(ssml)).to be_a Punchblock::Component::Output
825
+ expect(subject.say!(ssml)).to be_a Adhearsion::Rayo::Component::Output
955
826
  end
956
827
  end
957
828
 
@@ -960,30 +831,16 @@ module Adhearsion
960
831
  str = "Hello world"
961
832
  ssml = RubySpeech::SSML.draw { string str }
962
833
  expect_async_ssml_output ssml
963
- expect(subject.say!(str)).to be_a Punchblock::Component::Output
834
+ expect(subject.say!(str)).to be_a Adhearsion::Rayo::Component::Output
964
835
  end
965
836
  end
966
837
 
967
- describe "with a default voice set in PB config" do
968
- before { Adhearsion.config.punchblock.default_voice = 'foo' }
969
-
970
- it 'sets the voice on the output component' do
971
- str = "Hello world"
972
- ssml = RubySpeech::SSML.draw { string str }
973
- expect_async_ssml_output ssml, voice: 'foo'
974
- subject.say!(str)
975
- end
976
-
977
- after { Adhearsion.config.punchblock.default_voice = nil }
978
- end
979
-
980
- describe "with a default voice set in core and PB config" do
838
+ describe "with a default voice set in config" do
981
839
  before do
982
- Adhearsion.config.punchblock.default_voice = 'foo'
983
- Adhearsion.config.platform.media.default_voice = 'bar'
840
+ Adhearsion.config.core.media.default_voice = 'bar'
984
841
  end
985
842
 
986
- it 'prefers core config to set the voice on the output component' do
843
+ it 'sets the voice on the output component' do
987
844
  str = "Hello world"
988
845
  ssml = RubySpeech::SSML.draw { string str }
989
846
  expect_async_ssml_output ssml, voice: 'bar'
@@ -991,31 +848,16 @@ module Adhearsion
991
848
  end
992
849
 
993
850
  after do
994
- Adhearsion.config.punchblock.default_voice = nil
995
- Adhearsion.config.platform.media.default_voice = nil
996
- end
997
- end
998
-
999
- describe "with a default media engine set in PB config" do
1000
- before { Adhearsion.config.punchblock.media_engine = 'foo' }
1001
-
1002
- it 'sets the renderer on the output component' do
1003
- str = "Hello world"
1004
- ssml = RubySpeech::SSML.draw { string str }
1005
- expect_async_ssml_output ssml, renderer: 'foo'
1006
- subject.say!(str)
851
+ Adhearsion.config.core.media.default_voice = nil
1007
852
  end
1008
-
1009
- after { Adhearsion.config.punchblock.media_engine = nil }
1010
853
  end
1011
854
 
1012
- describe "with a default renderer set in core and PB config" do
855
+ describe "with a default renderer set in config" do
1013
856
  before do
1014
- Adhearsion.config.punchblock.media_engine = 'foo'
1015
- Adhearsion.config.platform.media.default_renderer = 'bar'
857
+ Adhearsion.config.core.media.default_renderer = 'bar'
1016
858
  end
1017
859
 
1018
- it 'prefers core config to set the renderer on the output component' do
860
+ it 'sets the renderer on the output component' do
1019
861
  str = "Hello world"
1020
862
  ssml = RubySpeech::SSML.draw { string str }
1021
863
  expect_async_ssml_output ssml, renderer: 'bar'
@@ -1023,8 +865,7 @@ module Adhearsion
1023
865
  end
1024
866
 
1025
867
  after do
1026
- Adhearsion.config.punchblock.media_engine = nil
1027
- Adhearsion.config.platform.media.default_renderer = nil
868
+ Adhearsion.config.core.media.default_renderer = nil
1028
869
  end
1029
870
  end
1030
871
 
@@ -1033,7 +874,7 @@ module Adhearsion
1033
874
  argument = 123
1034
875
  ssml = RubySpeech::SSML.draw { string '123' }
1035
876
  expect_async_ssml_output ssml
1036
- expect(subject.say!(argument)).to be_a Punchblock::Component::Output
877
+ expect(subject.say!(argument)).to be_a Adhearsion::Rayo::Component::Output
1037
878
  end
1038
879
  end
1039
880
  end
@@ -1082,7 +923,7 @@ module Adhearsion
1082
923
 
1083
924
  it 'plays the correct ssml' do
1084
925
  expect_async_ssml_output ssml
1085
- expect(subject.say_characters!('1234#abc')).to be_a Punchblock::Component::Output
926
+ expect(subject.say_characters!('1234#abc')).to be_a Adhearsion::Rayo::Component::Output
1086
927
  end
1087
928
  end
1088
929
 
@@ -1095,7 +936,113 @@ module Adhearsion
1095
936
 
1096
937
  it 'plays the correct ssml' do
1097
938
  expect_async_ssml_output ssml
1098
- expect(subject.say_characters!(1234)).to be_a Punchblock::Component::Output
939
+ expect(subject.say_characters!(1234)).to be_a Adhearsion::Rayo::Component::Output
940
+ end
941
+ end
942
+ end
943
+
944
+ describe "i18n" do
945
+ before do
946
+ I18n.default_locale = :en
947
+ end
948
+
949
+ describe 'getting and setting the locale' do
950
+ it 'should be able to set and get the locale' do
951
+ expect(controller.locale).to be(:en)
952
+ controller.locale = :it
953
+ expect(controller.locale).to be(:it)
954
+ end
955
+ end
956
+
957
+ describe 'requesting a translation' do
958
+ it 'should use a default locale' do
959
+ ssml = controller.t :have_many_cats
960
+ expect(ssml['xml:lang']).to match(/^en/)
961
+ end
962
+
963
+ it 'should allow overriding the locale per-request' do
964
+ ssml = controller.t :have_many_cats, locale: 'it'
965
+ expect(ssml['xml:lang']).to match(/^it/)
966
+ end
967
+
968
+ it 'should allow overriding the locale for the entire call' do
969
+ controller.locale = 'it'
970
+ ssml = controller.t :have_many_cats
971
+ expect(ssml['xml:lang']).to match(/^it/)
972
+ controller2 = Class.new(Adhearsion::CallController).new call
973
+ expect(controller2.locale).to eql('it')
974
+ end
975
+
976
+ it 'should generate proper SSML with both audio and text fallback translations' do
977
+ ssml = controller.t :have_many_cats
978
+ expect(ssml).to eql(RubySpeech::SSML.draw(language: 'en') do
979
+ audio src: "file://#{Adhearsion.root}/app/assets/audio/en/have_many_cats.wav" do
980
+ string 'I have quite a few cats'
981
+ end
982
+ end)
983
+ end
984
+
985
+ it 'should generate proper SSML with only audio (no fallback text) translations' do
986
+ ssml = controller.t :my_shirt_is_white
987
+ expect(ssml).to eql(RubySpeech::SSML.draw(language: 'en') do
988
+ audio src: "file://#{Adhearsion.root}/app/assets/audio/en/my_shirt_is_white.wav" do
989
+ string ''
990
+ end
991
+ end)
992
+ end
993
+
994
+ it 'should generate proper SSML with only text (no audio) translations' do
995
+ ssml = controller.t :many_people_out_today
996
+ expect(ssml).to eql(RubySpeech::SSML.draw(language: 'en') do
997
+ string 'There are many people out today'
998
+ end)
999
+ end
1000
+
1001
+ it 'should generate a path to the audio prompt based on the requested locale' do
1002
+ ssml = controller.t :my_shirt_is_white, locale: 'it'
1003
+ expect(ssml).to eql(RubySpeech::SSML.draw(language: 'it') do
1004
+ audio src: "file://#{Adhearsion.root}/app/assets/audio/it/la_mia_camicia_e_bianca.wav" do
1005
+ string ''
1006
+ end
1007
+ end)
1008
+ end
1009
+
1010
+ it 'should fall back to a text translation if the locale structure does not break out audio vs. tts' do
1011
+ ssml = controller.t :seventeen, locale: 'it'
1012
+ expect(ssml).to eql(RubySpeech::SSML.draw(language: 'it') do
1013
+ string 'diciassette'
1014
+ end)
1015
+ end
1016
+ end
1017
+
1018
+ describe 'with fallback disabled, requesting a translation' do
1019
+ before do
1020
+ Adhearsion.config.core.i18n.fallback = false
1021
+ end
1022
+
1023
+ after do
1024
+ Adhearsion.config.core.i18n.fallback = true
1025
+ end
1026
+
1027
+ it 'should generate proper SSML with only audio (no text) translations' do
1028
+ ssml = controller.t :my_shirt_is_white
1029
+ expect(ssml).to eql(RubySpeech::SSML.draw(language: 'en') do
1030
+ audio src: "file://#{Adhearsion.root}/app/assets/audio/en/my_shirt_is_white.wav"
1031
+ end)
1032
+ end
1033
+
1034
+ it 'should generate proper SSML with only text (no audio) translations' do
1035
+ ssml = controller.t :many_people_out_today
1036
+ expect(ssml).to eql(RubySpeech::SSML.draw(language: 'en') do
1037
+ string 'There are many people out today'
1038
+ end)
1039
+ end
1040
+
1041
+ it 'should generate proper SSML with only audio translations when both are supplied' do
1042
+ ssml = controller.t :have_many_cats
1043
+ expect(ssml).to eql(RubySpeech::SSML.draw(language: 'en') do
1044
+ audio src: "file://#{Adhearsion.root}/app/assets/audio/en/have_many_cats.wav"
1045
+ end)
1099
1046
  end
1100
1047
  end
1101
1048
  end