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
@@ -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