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
@@ -0,0 +1,88 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adhearsion::URIList do
6
+ describe '#size' do
7
+ subject { super().size }
8
+ it { is_expected.to eq(0) }
9
+ end
10
+
11
+ context "created with a set of entries" do
12
+ subject { described_class.new 'http://example.com/hello.mp3', 'http://example.com/goodbye.mp3' }
13
+
14
+ describe '#size' do
15
+ subject { super().size }
16
+ it { is_expected.to eq(2) }
17
+ end
18
+
19
+ describe '#to_ary' do
20
+ subject { super().to_ary }
21
+ it { is_expected.to eq(['http://example.com/hello.mp3', 'http://example.com/goodbye.mp3']) }
22
+ end
23
+
24
+ describe '#to_s' do
25
+ subject { super().to_s }
26
+ it { is_expected.to eq("http://example.com/hello.mp3\nhttp://example.com/goodbye.mp3") }
27
+ end
28
+ end
29
+
30
+ context "created with an array of entries" do
31
+ subject { described_class.new ['http://example.com/hello.mp3', 'http://example.com/goodbye.mp3'] }
32
+
33
+ describe '#size' do
34
+ subject { super().size }
35
+ it { is_expected.to eq(2) }
36
+ end
37
+
38
+ describe '#to_ary' do
39
+ subject { super().to_ary }
40
+ it { is_expected.to eq(['http://example.com/hello.mp3', 'http://example.com/goodbye.mp3']) }
41
+ end
42
+
43
+ describe '#to_s' do
44
+ subject { super().to_s }
45
+ it { is_expected.to eq("http://example.com/hello.mp3\nhttp://example.com/goodbye.mp3") }
46
+ end
47
+ end
48
+
49
+ context "imported from a string" do
50
+ let(:string) do
51
+ <<-STRING
52
+ http://example.com/hello.mp3
53
+ http://example.com/goodbye.mp3
54
+ STRING
55
+ end
56
+
57
+ subject { described_class.import string }
58
+
59
+ describe '#size' do
60
+ subject { super().size }
61
+ it { is_expected.to eq(2) }
62
+ end
63
+
64
+ describe '#to_ary' do
65
+ subject { super().to_ary }
66
+ it { is_expected.to eq(['http://example.com/hello.mp3', 'http://example.com/goodbye.mp3']) }
67
+ end
68
+
69
+ describe '#to_s' do
70
+ subject { super().to_s }
71
+ it { is_expected.to eq("http://example.com/hello.mp3\nhttp://example.com/goodbye.mp3") }
72
+ end
73
+ end
74
+
75
+ describe "comparisons" do
76
+ context "when the elements are the same" do
77
+ it "resolves equal" do
78
+ expect(described_class.new('foo', 'bar')).to eq(described_class.new('foo', 'bar'))
79
+ end
80
+ end
81
+
82
+ context "when the elements are different" do
83
+ it "does not resolve equal" do
84
+ expect(described_class.new('foo', 'baz')).not_to eq(described_class.new('bar', 'baz'))
85
+ end
86
+ end
87
+ end
88
+ end
@@ -6,12 +6,12 @@ describe Adhearsion do
6
6
  describe "#root=" do
7
7
  it "should update properly the config root variable" do
8
8
  Adhearsion.root = "./"
9
- expect(Adhearsion.config[:platform].root).to eq(Dir.getwd)
9
+ expect(Adhearsion.config[:core].root).to eq(Dir.getwd)
10
10
  end
11
11
 
12
12
  it "should update properly the config root variable when path is nil" do
13
13
  Adhearsion.root = nil
14
- expect(Adhearsion.config[:platform].root).to be_nil
14
+ expect(Adhearsion.config[:core].root).to be_nil
15
15
  end
16
16
  end
17
17
 
@@ -22,18 +22,6 @@ describe Adhearsion do
22
22
  end
23
23
  end
24
24
 
25
- describe "#ahn_root=" do
26
- it "should update properly the config root variable" do
27
- Adhearsion.ahn_root = "./"
28
- expect(Adhearsion.config[:platform].root).to eq(Dir.getwd)
29
- end
30
-
31
- it "should update properly the config root variable when path is nil" do
32
- Adhearsion.ahn_root = nil
33
- expect(Adhearsion.config[:platform].root).to be_nil
34
- end
35
- end
36
-
37
25
  describe "#config" do
38
26
  it "should return a Configuration instance" do
39
27
  expect(subject.config).to be_instance_of Adhearsion::Configuration
@@ -113,6 +101,93 @@ describe Adhearsion do
113
101
  end
114
102
  end
115
103
 
104
+ describe '#execute_component' do
105
+ let(:message) { Adhearsion::Rayo::Command::Accept.new }
106
+ let(:response) { :foo }
107
+ let(:mock_client) { double 'Client' }
108
+
109
+ let(:execute_expectation) { expect(described_class.client).to receive(:execute_command).once }
110
+
111
+ before do
112
+ Adhearsion::Rayo::Initializer.client = mock_client
113
+ allow(message).to receive_messages :execute! => true
114
+ message.response = response
115
+ execute_expectation
116
+ end
117
+
118
+ it "writes a command to the client" do
119
+ execute_expectation.with(message, :async => true)
120
+ described_class.execute_component message
121
+ end
122
+
123
+ it "blocks until a response is received" do
124
+ slow_command = Adhearsion::Rayo::Command::Dial.new
125
+ slow_command.request!
126
+ starting_time = Time.now
127
+ Thread.new do
128
+ sleep 0.5
129
+ slow_command.response = response
130
+ end
131
+ described_class.execute_component slow_command
132
+ expect(Time.now - starting_time).to be >= 0.4
133
+ end
134
+
135
+ describe "with a successful response" do
136
+ it "returns the executed command" do
137
+ expect(described_class.execute_component(message)).to be message
138
+ end
139
+ end
140
+
141
+ describe "with an error response" do
142
+ let(:response) { Exception.new }
143
+
144
+ it "raises the error" do
145
+ expect { described_class.execute_component message }.to raise_error Exception
146
+ end
147
+ end
148
+ end
149
+
150
+ describe '#client_with_connection' do
151
+ let(:mock_connection) { double('Connection').as_null_object }
152
+
153
+ context 'with :xmpp' do
154
+ it 'sets up an XMPP connection, passing options, and a client with the connection attached' do
155
+ options = {:username => 'foo', :password => 'bar'}
156
+ expect(Adhearsion::Rayo::Connection::XMPP).to receive(:new).once.with(options).and_return mock_connection
157
+ client = Adhearsion.client_with_connection :xmpp, options
158
+ expect(client).to be_a Adhearsion::Rayo::Client
159
+ expect(client.connection).to be mock_connection
160
+ end
161
+ end
162
+
163
+ context 'with :XMPP' do
164
+ it 'sets up an XMPP connection, passing options, and a client with the connection attached' do
165
+ options = {:username => 'foo', :password => 'bar'}
166
+ expect(Adhearsion::Rayo::Connection::XMPP).to receive(:new).once.with(options).and_return mock_connection
167
+ client = Adhearsion.client_with_connection :XMPP, options
168
+ expect(client).to be_a Adhearsion::Rayo::Client
169
+ expect(client.connection).to be mock_connection
170
+ end
171
+ end
172
+
173
+ context 'with :asterisk' do
174
+ it 'sets up an Asterisk connection, passing options, and a client with the connection attached' do
175
+ options = {:username => 'foo', :password => 'bar'}
176
+ expect(Adhearsion::Rayo::Connection::Asterisk).to receive(:new).once.with(options).and_return mock_connection
177
+ client = Adhearsion.client_with_connection :asterisk, options
178
+ expect(client).to be_a Adhearsion::Rayo::Client
179
+ expect(client.connection).to be mock_connection
180
+ end
181
+ end
182
+
183
+ context 'with :yate' do
184
+ it 'raises ArgumentError' do
185
+ options = {:username => 'foo', :password => 'bar'}
186
+ expect { Adhearsion.client_with_connection :yate, options }.to raise_error(ArgumentError)
187
+ end
188
+ end
189
+ end
190
+
116
191
  it "should have an encoding on all files" do
117
192
  Dir['{bin,features,lib,spec}/**/*.rb'].each do |filename|
118
193
  File.open filename do |file|
@@ -0,0 +1,13 @@
1
+ en:
2
+ have_many_cats:
3
+ audio: have_many_cats.wav
4
+ text: "I have quite a few cats"
5
+
6
+ my_shirt_is_white:
7
+ audio: my_shirt_is_white.wav
8
+
9
+ many_people_out_today:
10
+ text: There are many people out today
11
+
12
+ # Simulating an external, non adhearsion-i18n translation:
13
+ seventeen: seventeen
@@ -0,0 +1,13 @@
1
+ it:
2
+ have_many_cats:
3
+ audio: ho_parecchi_gatti.wav
4
+ text: "Ho parecchi gatti"
5
+
6
+ my_shirt_is_white:
7
+ audio: la_mia_camicia_e_bianca.wav
8
+
9
+ many_people_out_today:
10
+ text: Ci sono molti persone fuori oggi
11
+
12
+ # Simulating an external, non adhearsion-i18n translation:
13
+ seventeen: diciassette
@@ -21,30 +21,43 @@ Bundler.require(:default, :test) if defined?(Bundler)
21
21
  Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
22
22
 
23
23
  RSpec.configure do |config|
24
- config.mock_framework = :rspec
25
24
  config.filter_run :focus => true
26
25
  config.run_all_when_everything_filtered = true
27
26
  config.color = true
28
27
 
28
+ config.mock_with :rspec do |mocks|
29
+ mocks.add_stub_and_should_receive_to Celluloid::AbstractProxy
30
+ end
31
+
29
32
  config.raise_errors_for_deprecations!
30
33
 
31
34
  config.before :suite do
32
- Adhearsion::Logging.start Adhearsion::Logging.default_appenders, :trace, Adhearsion.config.platform.logging.formatter
33
- Adhearsion.config.platform.after_hangup_lifetime = 10
35
+ Adhearsion::Logging.start :trace, Adhearsion.config.core.logging.formatter
36
+ Adhearsion.config.core.after_hangup_lifetime = 10
34
37
  Adhearsion::Initializer.new.initialize_exception_logger
35
38
  end
36
39
 
37
40
  config.before :each do
41
+ Adhearsion.config.core.i18n.locale_path = ["#{File.dirname(__FILE__)}/fixtures/locale"]
42
+ Adhearsion::Initializer.new.setup_i18n_load_path
43
+
38
44
  Adhearsion.router = nil
39
- allow(Punchblock).to receive(:new_request_id).and_return 'foo'
45
+ @uuid = SecureRandom.uuid
46
+ allow(Adhearsion).to receive(:new_request_id).and_return @uuid
40
47
  end
41
48
 
42
49
  config.after :each do
43
50
  Timecop.return
51
+ if defined?(:Celluloid)
52
+ Celluloid.shutdown
53
+ Adhearsion.active_calls = nil
54
+ Celluloid.boot
55
+ Adhearsion::Events.refresh!
56
+ end
44
57
  end
45
58
  end
46
59
 
47
- Adhearsion::Events.exeption do |e|
60
+ Adhearsion::Events.exception do |e|
48
61
  puts e.message
49
62
  puts e.backtrace.join("\n")
50
63
  end
@@ -46,11 +46,12 @@ module CallControllerTestHelpers
46
46
  else
47
47
  expectation.and_return component
48
48
  end
49
+ expectation
49
50
  end
50
51
 
51
52
  def expect_input_component_complete_event(utterance)
52
- complete_event = Punchblock::Event::Complete.new
53
+ complete_event = Adhearsion::Event::Complete.new
53
54
  allow(complete_event).to receive_messages reason: double(utterance: utterance, name: :input)
54
- allow_any_instance_of(Punchblock::Component::Input).to receive_messages(complete?: true, complete_event: complete_event)
55
+ allow_any_instance_of(Adhearsion::Rayo::Component::Input).to receive_messages(complete?: true, complete_event: complete_event)
55
56
  end
56
57
  end
@@ -2,11 +2,13 @@
2
2
 
3
3
  module InitializerStubs
4
4
  UNWANTED_BEHAVIOR = {
5
- Adhearsion::Initializer => [:debugging_log, :initialize_log_paths, :update_rails_env_var, :require, :load, :init_plugins, :run_plugins]
5
+ Adhearsion::Initializer => [:debugging_log, :require, :load, :init_plugins, :run_plugins]
6
6
  } unless defined? UNWANTED_BEHAVIOR
7
7
 
8
8
  def stub_behavior_for_initializer_with_no_path_changing_behavior
9
9
  stub_unwanted_behavior
10
+ allow(Adhearsion::Rayo::Initializer).to receive(:init).and_return(true)
11
+ allow(Adhearsion::Rayo::Initializer).to receive(:run).and_return(true)
10
12
  yield if block_given?
11
13
  ensure
12
14
  unstub_directory_changing_behavior
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ require 'ruby_ami'
4
+
5
+ def parse_stanza(xml)
6
+ Nokogiri::XML.parse xml, nil, nil, Nokogiri::XML::ParseOptions::NOBLANKS
7
+ end
8
+
9
+ def import_stanza(xml)
10
+ Blather::Stanza.import parse_stanza(xml).root
11
+ end
12
+
13
+ def stub_uuids(value)
14
+ allow(RubyAMI).to receive_messages :new_uuid => value
15
+ allow(Adhearsion).to receive_messages :new_uuid => value
16
+ end
17
+
18
+ # FIXME: change this to rayo_event? It can be ambigous
19
+ shared_examples_for 'event' do
20
+ describe '#target_call_id' do
21
+ subject { super().target_call_id }
22
+ it { is_expected.to eq('9f00061') }
23
+ end
24
+
25
+ describe '#component_id' do
26
+ subject { super().component_id }
27
+ it { is_expected.to eq('1') }
28
+ end
29
+ end
30
+
31
+ shared_examples_for 'command_headers' do
32
+ end
33
+
34
+ shared_examples_for 'event_headers' do
35
+ end
36
+
37
+ shared_examples_for 'key_value_pairs' do
38
+ it 'will auto-inherit nodes' do
39
+ n = parse_stanza "<#{element_name} name='boo' value='bah' />"
40
+ h = described_class.new n.root
41
+ expect(h.name).to eq('boo')
42
+ expect(h.value).to eq('bah')
43
+ end
44
+
45
+ it 'has a name attribute' do
46
+ n = described_class.new :boo, 'bah'
47
+ expect(n.name).to eq('boo')
48
+ n.name = :foo
49
+ expect(n.name).to eq('foo')
50
+ end
51
+
52
+ it 'has a value param' do
53
+ n = described_class.new :boo, 'en'
54
+ expect(n.value).to eq('en')
55
+ n.value = 'de'
56
+ expect(n.value).to eq('de')
57
+ end
58
+
59
+ it 'can determine equality' do
60
+ a = described_class.new :boo, 'bah'
61
+ expect(a).to eq(described_class.new(:boo, 'bah'))
62
+ expect(a).not_to eq(described_class.new(:bah, 'bah'))
63
+ expect(a).not_to eq(described_class.new(:boo, 'boo'))
64
+ end
65
+ end
@@ -7,3 +7,15 @@ def mock_offer(id = nil, headers = {})
7
7
  offer.as_null_object
8
8
  end
9
9
  end
10
+
11
+ module HasMockCallbackConnection
12
+ def self.included(test_case)
13
+ test_case.let(:connection) do
14
+ double('Connection').tap do |mc|
15
+ allow(mc).to receive :handle_event do |event|
16
+ original_command.add_event event
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adhearsion
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.4
4
+ version: 3.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay Phillips
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-05-07 00:00:00.000000000 Z
14
+ date: 2015-06-24 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -47,6 +47,20 @@ dependencies:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
49
  version: '1.9'
50
+ - !ruby/object:Gem::Dependency
51
+ name: blather
52
+ requirement: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.0'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.0'
50
64
  - !ruby/object:Gem::Dependency
51
65
  name: bundler
52
66
  requirement: !ruby/object:Gem::Requirement
@@ -67,14 +81,14 @@ dependencies:
67
81
  requirements:
68
82
  - - "~>"
69
83
  - !ruby/object:Gem::Version
70
- version: '0.14'
84
+ version: '0.16'
71
85
  type: :runtime
72
86
  prerelease: false
73
87
  version_requirements: !ruby/object:Gem::Requirement
74
88
  requirements:
75
89
  - - "~>"
76
90
  - !ruby/object:Gem::Version
77
- version: '0.14'
91
+ version: '0.16'
78
92
  - !ruby/object:Gem::Dependency
79
93
  name: countdownlatch
80
94
  requirement: !ruby/object:Gem::Requirement
@@ -118,19 +132,19 @@ dependencies:
118
132
  - !ruby/object:Gem::Version
119
133
  version: '1.0'
120
134
  - !ruby/object:Gem::Dependency
121
- name: girl_friday
135
+ name: future-resource
122
136
  requirement: !ruby/object:Gem::Requirement
123
137
  requirements:
124
- - - ">="
138
+ - - "~>"
125
139
  - !ruby/object:Gem::Version
126
- version: '0'
140
+ version: '1.0'
127
141
  type: :runtime
128
142
  prerelease: false
129
143
  version_requirements: !ruby/object:Gem::Requirement
130
144
  requirements:
131
- - - ">="
145
+ - - "~>"
132
146
  - !ruby/object:Gem::Version
133
- version: '0'
147
+ version: '1.0'
134
148
  - !ruby/object:Gem::Dependency
135
149
  name: has-guarded-handlers
136
150
  requirement: !ruby/object:Gem::Requirement
@@ -138,6 +152,9 @@ dependencies:
138
152
  - - "~>"
139
153
  - !ruby/object:Gem::Version
140
154
  version: '1.6'
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: 1.6.3
141
158
  type: :runtime
142
159
  prerelease: false
143
160
  version_requirements: !ruby/object:Gem::Requirement
@@ -145,48 +162,71 @@ dependencies:
145
162
  - - "~>"
146
163
  - !ruby/object:Gem::Version
147
164
  version: '1.6'
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: 1.6.3
168
+ - !ruby/object:Gem::Dependency
169
+ name: i18n
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '0.6'
175
+ type: :runtime
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '0.6'
148
182
  - !ruby/object:Gem::Dependency
149
183
  name: logging
150
184
  requirement: !ruby/object:Gem::Requirement
151
185
  requirements:
152
186
  - - "~>"
153
187
  - !ruby/object:Gem::Version
154
- version: '2.0'
188
+ version: '1.8'
155
189
  type: :runtime
156
190
  prerelease: false
157
191
  version_requirements: !ruby/object:Gem::Requirement
158
192
  requirements:
159
193
  - - "~>"
160
194
  - !ruby/object:Gem::Version
161
- version: '2.0'
195
+ version: '1.8'
162
196
  - !ruby/object:Gem::Dependency
163
- name: pry
197
+ name: nokogiri
164
198
  requirement: !ruby/object:Gem::Requirement
165
199
  requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '1.5'
166
203
  - - ">="
167
204
  - !ruby/object:Gem::Version
168
- version: '0'
205
+ version: 1.5.6
169
206
  type: :runtime
170
207
  prerelease: false
171
208
  version_requirements: !ruby/object:Gem::Requirement
172
209
  requirements:
210
+ - - "~>"
211
+ - !ruby/object:Gem::Version
212
+ version: '1.5'
173
213
  - - ">="
174
214
  - !ruby/object:Gem::Version
175
- version: '0'
215
+ version: 1.5.6
176
216
  - !ruby/object:Gem::Dependency
177
- name: punchblock
217
+ name: pry
178
218
  requirement: !ruby/object:Gem::Requirement
179
219
  requirements:
180
- - - "~>"
220
+ - - ">="
181
221
  - !ruby/object:Gem::Version
182
- version: '2.6'
222
+ version: '0'
183
223
  type: :runtime
184
224
  prerelease: false
185
225
  version_requirements: !ruby/object:Gem::Requirement
186
226
  requirements:
187
- - - "~>"
227
+ - - ">="
188
228
  - !ruby/object:Gem::Version
189
- version: '2.6'
229
+ version: '0'
190
230
  - !ruby/object:Gem::Dependency
191
231
  name: rake
192
232
  requirement: !ruby/object:Gem::Requirement
@@ -201,20 +241,90 @@ dependencies:
201
241
  - - ">="
202
242
  - !ruby/object:Gem::Version
203
243
  version: '0'
244
+ - !ruby/object:Gem::Dependency
245
+ name: reel
246
+ requirement: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - "~>"
249
+ - !ruby/object:Gem::Version
250
+ version: 0.5.0
251
+ type: :runtime
252
+ prerelease: false
253
+ version_requirements: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: 0.5.0
258
+ - !ruby/object:Gem::Dependency
259
+ name: reel-rack
260
+ requirement: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: 0.2.0
265
+ type: :runtime
266
+ prerelease: false
267
+ version_requirements: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: 0.2.0
272
+ - !ruby/object:Gem::Dependency
273
+ name: ruby_ami
274
+ requirement: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: '2.2'
279
+ type: :runtime
280
+ prerelease: false
281
+ version_requirements: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '2.2'
286
+ - !ruby/object:Gem::Dependency
287
+ name: ruby_jid
288
+ requirement: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '1.0'
293
+ type: :runtime
294
+ prerelease: false
295
+ version_requirements: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - "~>"
298
+ - !ruby/object:Gem::Version
299
+ version: '1.0'
204
300
  - !ruby/object:Gem::Dependency
205
301
  name: ruby_speech
206
302
  requirement: !ruby/object:Gem::Requirement
207
303
  requirements:
208
304
  - - "~>"
209
305
  - !ruby/object:Gem::Version
210
- version: '2.0'
306
+ version: '2.3'
307
+ type: :runtime
308
+ prerelease: false
309
+ version_requirements: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - "~>"
312
+ - !ruby/object:Gem::Version
313
+ version: '2.3'
314
+ - !ruby/object:Gem::Dependency
315
+ name: state_machine
316
+ requirement: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: '1.0'
211
321
  type: :runtime
212
322
  prerelease: false
213
323
  version_requirements: !ruby/object:Gem::Requirement
214
324
  requirements:
215
325
  - - "~>"
216
326
  - !ruby/object:Gem::Version
217
- version: '2.0'
327
+ version: '1.0'
218
328
  - !ruby/object:Gem::Dependency
219
329
  name: thor
220
330
  requirement: !ruby/object:Gem::Requirement
@@ -229,6 +339,20 @@ dependencies:
229
339
  - - "~>"
230
340
  - !ruby/object:Gem::Version
231
341
  version: 0.18.0
342
+ - !ruby/object:Gem::Dependency
343
+ name: virtus
344
+ requirement: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - "~>"
347
+ - !ruby/object:Gem::Version
348
+ version: '1.0'
349
+ type: :runtime
350
+ prerelease: false
351
+ version_requirements: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - "~>"
354
+ - !ruby/object:Gem::Version
355
+ version: '1.0'
232
356
  - !ruby/object:Gem::Dependency
233
357
  name: aruba
234
358
  requirement: !ruby/object:Gem::Requirement
@@ -243,6 +367,34 @@ dependencies:
243
367
  - - "~>"
244
368
  - !ruby/object:Gem::Version
245
369
  version: '0.5'
370
+ - !ruby/object:Gem::Dependency
371
+ name: ci_reporter_rspec
372
+ requirement: !ruby/object:Gem::Requirement
373
+ requirements:
374
+ - - ">="
375
+ - !ruby/object:Gem::Version
376
+ version: '0'
377
+ type: :development
378
+ prerelease: false
379
+ version_requirements: !ruby/object:Gem::Requirement
380
+ requirements:
381
+ - - ">="
382
+ - !ruby/object:Gem::Version
383
+ version: '0'
384
+ - !ruby/object:Gem::Dependency
385
+ name: ci_reporter_cucumber
386
+ requirement: !ruby/object:Gem::Requirement
387
+ requirements:
388
+ - - ">="
389
+ - !ruby/object:Gem::Version
390
+ version: '0'
391
+ type: :development
392
+ prerelease: false
393
+ version_requirements: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - ">="
396
+ - !ruby/object:Gem::Version
397
+ version: '0'
246
398
  - !ruby/object:Gem::Dependency
247
399
  name: cucumber
248
400
  requirement: !ruby/object:Gem::Requirement
@@ -299,6 +451,34 @@ dependencies:
299
451
  - - "~>"
300
452
  - !ruby/object:Gem::Version
301
453
  version: '3.0'
454
+ - !ruby/object:Gem::Dependency
455
+ name: simplecov
456
+ requirement: !ruby/object:Gem::Requirement
457
+ requirements:
458
+ - - ">="
459
+ - !ruby/object:Gem::Version
460
+ version: '0'
461
+ type: :development
462
+ prerelease: false
463
+ version_requirements: !ruby/object:Gem::Requirement
464
+ requirements:
465
+ - - ">="
466
+ - !ruby/object:Gem::Version
467
+ version: '0'
468
+ - !ruby/object:Gem::Dependency
469
+ name: simplecov-rcov
470
+ requirement: !ruby/object:Gem::Requirement
471
+ requirements:
472
+ - - ">="
473
+ - !ruby/object:Gem::Version
474
+ version: '0'
475
+ type: :development
476
+ prerelease: false
477
+ version_requirements: !ruby/object:Gem::Requirement
478
+ requirements:
479
+ - - ">="
480
+ - !ruby/object:Gem::Version
481
+ version: '0'
302
482
  - !ruby/object:Gem::Dependency
303
483
  name: yard
304
484
  requirement: !ruby/object:Gem::Requirement
@@ -379,12 +559,9 @@ files:
379
559
  - cucumber.yml
380
560
  - features/cli_basic.feature
381
561
  - features/cli_create.feature
382
- - features/cli_daemon.feature
383
562
  - features/cli_generate.feature
384
563
  - features/cli_plugin.feature
385
- - features/cli_restart.feature
386
564
  - features/cli_start.feature
387
- - features/cli_stop.feature
388
565
  - features/controller_generator.feature
389
566
  - features/plugin_generator.feature
390
567
  - features/step_definitions/app_generator_steps.rb
@@ -395,23 +572,16 @@ files:
395
572
  - lib/adhearsion/call_controller.rb
396
573
  - lib/adhearsion/call_controller/dial.rb
397
574
  - lib/adhearsion/call_controller/input.rb
398
- - lib/adhearsion/call_controller/menu_dsl.rb
399
- - lib/adhearsion/call_controller/menu_dsl/array_match_calculator.rb
400
- - lib/adhearsion/call_controller/menu_dsl/calculated_match.rb
401
- - lib/adhearsion/call_controller/menu_dsl/calculated_match_collection.rb
402
- - lib/adhearsion/call_controller/menu_dsl/fixnum_match_calculator.rb
403
- - lib/adhearsion/call_controller/menu_dsl/match_calculator.rb
404
- - lib/adhearsion/call_controller/menu_dsl/menu.rb
405
- - lib/adhearsion/call_controller/menu_dsl/menu_builder.rb
406
- - lib/adhearsion/call_controller/menu_dsl/range_match_calculator.rb
407
- - lib/adhearsion/call_controller/menu_dsl/string_match_calculator.rb
575
+ - lib/adhearsion/call_controller/input/ask_grammar_builder.rb
576
+ - lib/adhearsion/call_controller/input/menu_builder.rb
577
+ - lib/adhearsion/call_controller/input/prompt_builder.rb
578
+ - lib/adhearsion/call_controller/input/result.rb
408
579
  - lib/adhearsion/call_controller/output.rb
409
580
  - lib/adhearsion/call_controller/output/abstract_player.rb
410
581
  - lib/adhearsion/call_controller/output/async_player.rb
411
582
  - lib/adhearsion/call_controller/output/formatter.rb
412
583
  - lib/adhearsion/call_controller/output/player.rb
413
584
  - lib/adhearsion/call_controller/record.rb
414
- - lib/adhearsion/call_controller/utility.rb
415
585
  - lib/adhearsion/calls.rb
416
586
  - lib/adhearsion/cli.rb
417
587
  - lib/adhearsion/cli_commands.rb
@@ -420,9 +590,26 @@ files:
420
590
  - lib/adhearsion/cli_commands/thor_errors.rb
421
591
  - lib/adhearsion/configuration.rb
422
592
  - lib/adhearsion/console.rb
593
+ - lib/adhearsion/core_ext/blather/stanza.rb
594
+ - lib/adhearsion/core_ext/blather/stanza/presence.rb
595
+ - lib/adhearsion/error.rb
596
+ - lib/adhearsion/event.rb
597
+ - lib/adhearsion/event/active_speaker.rb
598
+ - lib/adhearsion/event/answered.rb
599
+ - lib/adhearsion/event/asterisk.rb
600
+ - lib/adhearsion/event/asterisk/ami.rb
601
+ - lib/adhearsion/event/complete.rb
602
+ - lib/adhearsion/event/dtmf.rb
603
+ - lib/adhearsion/event/end.rb
604
+ - lib/adhearsion/event/input_timers_started.rb
605
+ - lib/adhearsion/event/joined.rb
606
+ - lib/adhearsion/event/offer.rb
607
+ - lib/adhearsion/event/ringing.rb
608
+ - lib/adhearsion/event/started_speaking.rb
609
+ - lib/adhearsion/event/stopped_speaking.rb
610
+ - lib/adhearsion/event/unjoined.rb
423
611
  - lib/adhearsion/events.rb
424
612
  - lib/adhearsion/foundation.rb
425
- - lib/adhearsion/foundation/custom_daemonizer.rb
426
613
  - lib/adhearsion/foundation/exception_handler.rb
427
614
  - lib/adhearsion/foundation/libc.rb
428
615
  - lib/adhearsion/foundation/object.rb
@@ -435,9 +622,12 @@ files:
435
622
  - lib/adhearsion/generators/app/templates/README.md
436
623
  - lib/adhearsion/generators/app/templates/Rakefile
437
624
  - lib/adhearsion/generators/app/templates/adhearsion.erb
625
+ - lib/adhearsion/generators/app/templates/config.ru
438
626
  - lib/adhearsion/generators/app/templates/config/environment.rb
627
+ - lib/adhearsion/generators/app/templates/en.yml
439
628
  - lib/adhearsion/generators/app/templates/events.erb
440
629
  - lib/adhearsion/generators/app/templates/gitignore
630
+ - lib/adhearsion/generators/app/templates/hello_world.wav
441
631
  - lib/adhearsion/generators/app/templates/routes.erb
442
632
  - lib/adhearsion/generators/app/templates/rspec
443
633
  - lib/adhearsion/generators/app/templates/script/ahn
@@ -460,6 +650,8 @@ files:
460
650
  - lib/adhearsion/generators/plugin/templates/plugin-template.gemspec.tt
461
651
  - lib/adhearsion/generators/plugin/templates/spec/plugin-template/controller_methods_spec.rb.tt
462
652
  - lib/adhearsion/generators/plugin/templates/spec/spec_helper.rb.tt
653
+ - lib/adhearsion/has_headers.rb
654
+ - lib/adhearsion/http_server.rb
463
655
  - lib/adhearsion/initializer.rb
464
656
  - lib/adhearsion/linux_proc_name.rb
465
657
  - lib/adhearsion/logging.rb
@@ -468,8 +660,45 @@ files:
468
660
  - lib/adhearsion/plugin/collection.rb
469
661
  - lib/adhearsion/plugin/initializer.rb
470
662
  - lib/adhearsion/process.rb
471
- - lib/adhearsion/punchblock_plugin.rb
472
- - lib/adhearsion/punchblock_plugin/initializer.rb
663
+ - lib/adhearsion/protocol_error.rb
664
+ - lib/adhearsion/rayo.rb
665
+ - lib/adhearsion/rayo/client.rb
666
+ - lib/adhearsion/rayo/client/component_registry.rb
667
+ - lib/adhearsion/rayo/command.rb
668
+ - lib/adhearsion/rayo/command/accept.rb
669
+ - lib/adhearsion/rayo/command/answer.rb
670
+ - lib/adhearsion/rayo/command/dial.rb
671
+ - lib/adhearsion/rayo/command/hangup.rb
672
+ - lib/adhearsion/rayo/command/join.rb
673
+ - lib/adhearsion/rayo/command/mute.rb
674
+ - lib/adhearsion/rayo/command/redirect.rb
675
+ - lib/adhearsion/rayo/command/reject.rb
676
+ - lib/adhearsion/rayo/command/unjoin.rb
677
+ - lib/adhearsion/rayo/command/unmute.rb
678
+ - lib/adhearsion/rayo/command_node.rb
679
+ - lib/adhearsion/rayo/component.rb
680
+ - lib/adhearsion/rayo/component/asterisk.rb
681
+ - lib/adhearsion/rayo/component/asterisk/agi.rb
682
+ - lib/adhearsion/rayo/component/asterisk/agi/command.rb
683
+ - lib/adhearsion/rayo/component/asterisk/ami.rb
684
+ - lib/adhearsion/rayo/component/asterisk/ami/action.rb
685
+ - lib/adhearsion/rayo/component/component_node.rb
686
+ - lib/adhearsion/rayo/component/input.rb
687
+ - lib/adhearsion/rayo/component/output.rb
688
+ - lib/adhearsion/rayo/component/prompt.rb
689
+ - lib/adhearsion/rayo/component/receive_fax.rb
690
+ - lib/adhearsion/rayo/component/record.rb
691
+ - lib/adhearsion/rayo/component/send_fax.rb
692
+ - lib/adhearsion/rayo/component/stop.rb
693
+ - lib/adhearsion/rayo/connection.rb
694
+ - lib/adhearsion/rayo/connection/asterisk.rb
695
+ - lib/adhearsion/rayo/connection/connected.rb
696
+ - lib/adhearsion/rayo/connection/generic_connection.rb
697
+ - lib/adhearsion/rayo/connection/xmpp.rb
698
+ - lib/adhearsion/rayo/disconnected_error.rb
699
+ - lib/adhearsion/rayo/initializer.rb
700
+ - lib/adhearsion/rayo/rayo_node.rb
701
+ - lib/adhearsion/rayo/ref.rb
473
702
  - lib/adhearsion/router.rb
474
703
  - lib/adhearsion/router/evented_route.rb
475
704
  - lib/adhearsion/router/openended_route.rb
@@ -482,32 +711,59 @@ files:
482
711
  - lib/adhearsion/tasks/configuration.rb
483
712
  - lib/adhearsion/tasks/debugging.rb
484
713
  - lib/adhearsion/tasks/environment.rb
714
+ - lib/adhearsion/tasks/i18n.rb
485
715
  - lib/adhearsion/tasks/plugins.rb
716
+ - lib/adhearsion/translator.rb
717
+ - lib/adhearsion/translator/asterisk.rb
718
+ - lib/adhearsion/translator/asterisk/agi_app.rb
719
+ - lib/adhearsion/translator/asterisk/agi_command.rb
720
+ - lib/adhearsion/translator/asterisk/ami_error_converter.rb
721
+ - lib/adhearsion/translator/asterisk/call.rb
722
+ - lib/adhearsion/translator/asterisk/channel.rb
723
+ - lib/adhearsion/translator/asterisk/component.rb
724
+ - lib/adhearsion/translator/asterisk/component/asterisk.rb
725
+ - lib/adhearsion/translator/asterisk/component/asterisk/agi_command.rb
726
+ - lib/adhearsion/translator/asterisk/component/asterisk/ami_action.rb
727
+ - lib/adhearsion/translator/asterisk/component/composed_prompt.rb
728
+ - lib/adhearsion/translator/asterisk/component/dtmf_recognizer.rb
729
+ - lib/adhearsion/translator/asterisk/component/input.rb
730
+ - lib/adhearsion/translator/asterisk/component/input_component.rb
731
+ - lib/adhearsion/translator/asterisk/component/mrcp_native_prompt.rb
732
+ - lib/adhearsion/translator/asterisk/component/mrcp_prompt.rb
733
+ - lib/adhearsion/translator/asterisk/component/mrcp_recog_prompt.rb
734
+ - lib/adhearsion/translator/asterisk/component/output.rb
735
+ - lib/adhearsion/translator/asterisk/component/record.rb
736
+ - lib/adhearsion/translator/asterisk/component/stop_by_redirect.rb
737
+ - lib/adhearsion/translator/asterisk/unimrcp_app.rb
738
+ - lib/adhearsion/uri_list.rb
486
739
  - lib/adhearsion/version.rb
487
740
  - pre-commit
488
- - scripts/cloc-1.64.pl
489
741
  - spec/adhearsion/call_controller/dial_spec.rb
490
742
  - spec/adhearsion/call_controller/input_spec.rb
491
- - spec/adhearsion/call_controller/menu_dsl/array_match_calculator_spec.rb
492
- - spec/adhearsion/call_controller/menu_dsl/calculated_match_collection_spec.rb
493
- - spec/adhearsion/call_controller/menu_dsl/calculated_match_spec.rb
494
- - spec/adhearsion/call_controller/menu_dsl/fixnum_match_calculator_spec.rb
495
- - spec/adhearsion/call_controller/menu_dsl/match_calculator_spec.rb
496
- - spec/adhearsion/call_controller/menu_dsl/menu_builder_spec.rb
497
- - spec/adhearsion/call_controller/menu_dsl/menu_spec.rb
498
- - spec/adhearsion/call_controller/menu_dsl/range_match_calculator_spec.rb
499
- - spec/adhearsion/call_controller/menu_dsl/string_match_calculator_spec.rb
500
743
  - spec/adhearsion/call_controller/output/async_player_spec.rb
501
744
  - spec/adhearsion/call_controller/output/formatter_spec.rb
502
745
  - spec/adhearsion/call_controller/output/player_spec.rb
503
746
  - spec/adhearsion/call_controller/output_spec.rb
504
747
  - spec/adhearsion/call_controller/record_spec.rb
505
- - spec/adhearsion/call_controller/utility_spec.rb
506
748
  - spec/adhearsion/call_controller_spec.rb
507
749
  - spec/adhearsion/call_spec.rb
508
750
  - spec/adhearsion/calls_spec.rb
509
751
  - spec/adhearsion/configuration_spec.rb
510
752
  - spec/adhearsion/console_spec.rb
753
+ - spec/adhearsion/event/answered_spec.rb
754
+ - spec/adhearsion/event/asterisk/Find Results
755
+ - spec/adhearsion/event/asterisk/ami_spec.rb
756
+ - spec/adhearsion/event/complete_spec.rb
757
+ - spec/adhearsion/event/dtmf_spec.rb
758
+ - spec/adhearsion/event/end_spec.rb
759
+ - spec/adhearsion/event/input_timers_started_spec.rb
760
+ - spec/adhearsion/event/joined_spec.rb
761
+ - spec/adhearsion/event/offer_spec.rb
762
+ - spec/adhearsion/event/ringing_spec.rb
763
+ - spec/adhearsion/event/started_speaking_spec.rb
764
+ - spec/adhearsion/event/stopped_speaking_spec.rb
765
+ - spec/adhearsion/event/unjoined_spec.rb
766
+ - spec/adhearsion/event/untitled
511
767
  - spec/adhearsion/events_spec.rb
512
768
  - spec/adhearsion/generators_spec.rb
513
769
  - spec/adhearsion/initializer_spec.rb
@@ -515,8 +771,34 @@ files:
515
771
  - spec/adhearsion/outbound_call_spec.rb
516
772
  - spec/adhearsion/plugin_spec.rb
517
773
  - spec/adhearsion/process_spec.rb
518
- - spec/adhearsion/punchblock_plugin/initializer_spec.rb
519
- - spec/adhearsion/punchblock_plugin_spec.rb
774
+ - spec/adhearsion/protocol_error_spec.rb
775
+ - spec/adhearsion/rayo/client/component_registry_spec.rb
776
+ - spec/adhearsion/rayo/client_spec.rb
777
+ - spec/adhearsion/rayo/command/accept_spec.rb
778
+ - spec/adhearsion/rayo/command/answer_spec.rb
779
+ - spec/adhearsion/rayo/command/dial_spec.rb
780
+ - spec/adhearsion/rayo/command/hangup_spec.rb
781
+ - spec/adhearsion/rayo/command/join_spec.rb
782
+ - spec/adhearsion/rayo/command/mute_spec.rb
783
+ - spec/adhearsion/rayo/command/redirect_spec.rb
784
+ - spec/adhearsion/rayo/command/reject_spec.rb
785
+ - spec/adhearsion/rayo/command/unjoin_spec.rb
786
+ - spec/adhearsion/rayo/command/unmute_spec.rb
787
+ - spec/adhearsion/rayo/command_node_spec.rb
788
+ - spec/adhearsion/rayo/component/asterisk/agi/command_spec.rb
789
+ - spec/adhearsion/rayo/component/asterisk/ami/action_spec.rb
790
+ - spec/adhearsion/rayo/component/component_node_spec.rb
791
+ - spec/adhearsion/rayo/component/input_spec.rb
792
+ - spec/adhearsion/rayo/component/output_spec.rb
793
+ - spec/adhearsion/rayo/component/prompt_spec.rb
794
+ - spec/adhearsion/rayo/component/receive_fax_spec.rb
795
+ - spec/adhearsion/rayo/component/record_spec.rb
796
+ - spec/adhearsion/rayo/component/send_fax_spec.rb
797
+ - spec/adhearsion/rayo/connection/asterisk_spec.rb
798
+ - spec/adhearsion/rayo/connection/xmpp_spec.rb
799
+ - spec/adhearsion/rayo/initializer_spec.rb
800
+ - spec/adhearsion/rayo/ref_spec.rb
801
+ - spec/adhearsion/rayo_spec.rb
520
802
  - spec/adhearsion/router/evented_route_spec.rb
521
803
  - spec/adhearsion/router/openended_route_spec.rb
522
804
  - spec/adhearsion/router/route_spec.rb
@@ -524,12 +806,28 @@ files:
524
806
  - spec/adhearsion/router_spec.rb
525
807
  - spec/adhearsion/statistics/dump_spec.rb
526
808
  - spec/adhearsion/statistics_spec.rb
809
+ - spec/adhearsion/translator/asterisk/call_spec.rb
810
+ - spec/adhearsion/translator/asterisk/component/asterisk/agi_command_spec.rb
811
+ - spec/adhearsion/translator/asterisk/component/asterisk/ami_action_spec.rb
812
+ - spec/adhearsion/translator/asterisk/component/composed_prompt_spec.rb
813
+ - spec/adhearsion/translator/asterisk/component/input_spec.rb
814
+ - spec/adhearsion/translator/asterisk/component/mrcp_native_prompt_spec.rb
815
+ - spec/adhearsion/translator/asterisk/component/mrcp_prompt_spec.rb
816
+ - spec/adhearsion/translator/asterisk/component/output_spec.rb
817
+ - spec/adhearsion/translator/asterisk/component/record_spec.rb
818
+ - spec/adhearsion/translator/asterisk/component/stop_by_redirect_spec.rb
819
+ - spec/adhearsion/translator/asterisk/component_spec.rb
820
+ - spec/adhearsion/translator/asterisk_spec.rb
821
+ - spec/adhearsion/uri_list_spec.rb
527
822
  - spec/adhearsion_spec.rb
528
823
  - spec/capture_warnings.rb
824
+ - spec/fixtures/locale/en.yml
825
+ - spec/fixtures/locale/it.yml
529
826
  - spec/spec_helper.rb
530
827
  - spec/support/call_controller_test_helpers.rb
531
828
  - spec/support/initializer_stubs.rb
532
829
  - spec/support/logging_helpers.rb
830
+ - spec/support/punchblock_examples.rb
533
831
  - spec/support/punchblock_mocks.rb
534
832
  homepage: http://adhearsion.com
535
833
  licenses:
@@ -543,27 +841,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
543
841
  requirements:
544
842
  - - ">="
545
843
  - !ruby/object:Gem::Version
546
- version: 1.9.3
844
+ version: 2.2.0
547
845
  required_rubygems_version: !ruby/object:Gem::Requirement
548
846
  requirements:
549
- - - ">="
847
+ - - ">"
550
848
  - !ruby/object:Gem::Version
551
- version: '0'
849
+ version: 1.3.1
552
850
  requirements: []
553
851
  rubyforge_project:
554
- rubygems_version: 2.5.1
852
+ rubygems_version: 2.4.5
555
853
  signing_key:
556
854
  specification_version: 4
557
855
  summary: Adhearsion, open-source telephony development framework
558
856
  test_files:
559
857
  - features/cli_basic.feature
560
858
  - features/cli_create.feature
561
- - features/cli_daemon.feature
562
859
  - features/cli_generate.feature
563
860
  - features/cli_plugin.feature
564
- - features/cli_restart.feature
565
861
  - features/cli_start.feature
566
- - features/cli_stop.feature
567
862
  - features/controller_generator.feature
568
863
  - features/plugin_generator.feature
569
864
  - features/step_definitions/app_generator_steps.rb
@@ -571,26 +866,30 @@ test_files:
571
866
  - features/support/env.rb
572
867
  - spec/adhearsion/call_controller/dial_spec.rb
573
868
  - spec/adhearsion/call_controller/input_spec.rb
574
- - spec/adhearsion/call_controller/menu_dsl/array_match_calculator_spec.rb
575
- - spec/adhearsion/call_controller/menu_dsl/calculated_match_collection_spec.rb
576
- - spec/adhearsion/call_controller/menu_dsl/calculated_match_spec.rb
577
- - spec/adhearsion/call_controller/menu_dsl/fixnum_match_calculator_spec.rb
578
- - spec/adhearsion/call_controller/menu_dsl/match_calculator_spec.rb
579
- - spec/adhearsion/call_controller/menu_dsl/menu_builder_spec.rb
580
- - spec/adhearsion/call_controller/menu_dsl/menu_spec.rb
581
- - spec/adhearsion/call_controller/menu_dsl/range_match_calculator_spec.rb
582
- - spec/adhearsion/call_controller/menu_dsl/string_match_calculator_spec.rb
583
869
  - spec/adhearsion/call_controller/output/async_player_spec.rb
584
870
  - spec/adhearsion/call_controller/output/formatter_spec.rb
585
871
  - spec/adhearsion/call_controller/output/player_spec.rb
586
872
  - spec/adhearsion/call_controller/output_spec.rb
587
873
  - spec/adhearsion/call_controller/record_spec.rb
588
- - spec/adhearsion/call_controller/utility_spec.rb
589
874
  - spec/adhearsion/call_controller_spec.rb
590
875
  - spec/adhearsion/call_spec.rb
591
876
  - spec/adhearsion/calls_spec.rb
592
877
  - spec/adhearsion/configuration_spec.rb
593
878
  - spec/adhearsion/console_spec.rb
879
+ - spec/adhearsion/event/answered_spec.rb
880
+ - spec/adhearsion/event/asterisk/Find Results
881
+ - spec/adhearsion/event/asterisk/ami_spec.rb
882
+ - spec/adhearsion/event/complete_spec.rb
883
+ - spec/adhearsion/event/dtmf_spec.rb
884
+ - spec/adhearsion/event/end_spec.rb
885
+ - spec/adhearsion/event/input_timers_started_spec.rb
886
+ - spec/adhearsion/event/joined_spec.rb
887
+ - spec/adhearsion/event/offer_spec.rb
888
+ - spec/adhearsion/event/ringing_spec.rb
889
+ - spec/adhearsion/event/started_speaking_spec.rb
890
+ - spec/adhearsion/event/stopped_speaking_spec.rb
891
+ - spec/adhearsion/event/unjoined_spec.rb
892
+ - spec/adhearsion/event/untitled
594
893
  - spec/adhearsion/events_spec.rb
595
894
  - spec/adhearsion/generators_spec.rb
596
895
  - spec/adhearsion/initializer_spec.rb
@@ -598,8 +897,34 @@ test_files:
598
897
  - spec/adhearsion/outbound_call_spec.rb
599
898
  - spec/adhearsion/plugin_spec.rb
600
899
  - spec/adhearsion/process_spec.rb
601
- - spec/adhearsion/punchblock_plugin/initializer_spec.rb
602
- - spec/adhearsion/punchblock_plugin_spec.rb
900
+ - spec/adhearsion/protocol_error_spec.rb
901
+ - spec/adhearsion/rayo/client/component_registry_spec.rb
902
+ - spec/adhearsion/rayo/client_spec.rb
903
+ - spec/adhearsion/rayo/command/accept_spec.rb
904
+ - spec/adhearsion/rayo/command/answer_spec.rb
905
+ - spec/adhearsion/rayo/command/dial_spec.rb
906
+ - spec/adhearsion/rayo/command/hangup_spec.rb
907
+ - spec/adhearsion/rayo/command/join_spec.rb
908
+ - spec/adhearsion/rayo/command/mute_spec.rb
909
+ - spec/adhearsion/rayo/command/redirect_spec.rb
910
+ - spec/adhearsion/rayo/command/reject_spec.rb
911
+ - spec/adhearsion/rayo/command/unjoin_spec.rb
912
+ - spec/adhearsion/rayo/command/unmute_spec.rb
913
+ - spec/adhearsion/rayo/command_node_spec.rb
914
+ - spec/adhearsion/rayo/component/asterisk/agi/command_spec.rb
915
+ - spec/adhearsion/rayo/component/asterisk/ami/action_spec.rb
916
+ - spec/adhearsion/rayo/component/component_node_spec.rb
917
+ - spec/adhearsion/rayo/component/input_spec.rb
918
+ - spec/adhearsion/rayo/component/output_spec.rb
919
+ - spec/adhearsion/rayo/component/prompt_spec.rb
920
+ - spec/adhearsion/rayo/component/receive_fax_spec.rb
921
+ - spec/adhearsion/rayo/component/record_spec.rb
922
+ - spec/adhearsion/rayo/component/send_fax_spec.rb
923
+ - spec/adhearsion/rayo/connection/asterisk_spec.rb
924
+ - spec/adhearsion/rayo/connection/xmpp_spec.rb
925
+ - spec/adhearsion/rayo/initializer_spec.rb
926
+ - spec/adhearsion/rayo/ref_spec.rb
927
+ - spec/adhearsion/rayo_spec.rb
603
928
  - spec/adhearsion/router/evented_route_spec.rb
604
929
  - spec/adhearsion/router/openended_route_spec.rb
605
930
  - spec/adhearsion/router/route_spec.rb
@@ -607,10 +932,27 @@ test_files:
607
932
  - spec/adhearsion/router_spec.rb
608
933
  - spec/adhearsion/statistics/dump_spec.rb
609
934
  - spec/adhearsion/statistics_spec.rb
935
+ - spec/adhearsion/translator/asterisk/call_spec.rb
936
+ - spec/adhearsion/translator/asterisk/component/asterisk/agi_command_spec.rb
937
+ - spec/adhearsion/translator/asterisk/component/asterisk/ami_action_spec.rb
938
+ - spec/adhearsion/translator/asterisk/component/composed_prompt_spec.rb
939
+ - spec/adhearsion/translator/asterisk/component/input_spec.rb
940
+ - spec/adhearsion/translator/asterisk/component/mrcp_native_prompt_spec.rb
941
+ - spec/adhearsion/translator/asterisk/component/mrcp_prompt_spec.rb
942
+ - spec/adhearsion/translator/asterisk/component/output_spec.rb
943
+ - spec/adhearsion/translator/asterisk/component/record_spec.rb
944
+ - spec/adhearsion/translator/asterisk/component/stop_by_redirect_spec.rb
945
+ - spec/adhearsion/translator/asterisk/component_spec.rb
946
+ - spec/adhearsion/translator/asterisk_spec.rb
947
+ - spec/adhearsion/uri_list_spec.rb
610
948
  - spec/adhearsion_spec.rb
611
949
  - spec/capture_warnings.rb
950
+ - spec/fixtures/locale/en.yml
951
+ - spec/fixtures/locale/it.yml
612
952
  - spec/spec_helper.rb
613
953
  - spec/support/call_controller_test_helpers.rb
614
954
  - spec/support/initializer_stubs.rb
615
955
  - spec/support/logging_helpers.rb
956
+ - spec/support/punchblock_examples.rb
616
957
  - spec/support/punchblock_mocks.rb
958
+ has_rdoc: