adhearsion 2.6.4 → 3.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -9
  3. data/CHANGELOG.md +22 -7
  4. data/Gemfile +2 -0
  5. data/README.markdown +4 -5
  6. data/Rakefile +1 -2
  7. data/adhearsion.gemspec +19 -8
  8. data/features/cli_create.feature +19 -3
  9. data/features/step_definitions/cli_steps.rb +0 -11
  10. data/features/support/env.rb +3 -4
  11. data/lib/adhearsion.rb +48 -27
  12. data/lib/adhearsion/call.rb +34 -50
  13. data/lib/adhearsion/call_controller.rb +6 -12
  14. data/lib/adhearsion/call_controller/dial.rb +15 -53
  15. data/lib/adhearsion/call_controller/input.rb +39 -162
  16. data/lib/adhearsion/call_controller/input/ask_grammar_builder.rb +44 -0
  17. data/lib/adhearsion/call_controller/input/menu_builder.rb +136 -0
  18. data/lib/adhearsion/call_controller/input/prompt_builder.rb +78 -0
  19. data/lib/adhearsion/call_controller/input/result.rb +46 -0
  20. data/lib/adhearsion/call_controller/output.rb +48 -67
  21. data/lib/adhearsion/call_controller/output/abstract_player.rb +3 -3
  22. data/lib/adhearsion/call_controller/output/async_player.rb +3 -3
  23. data/lib/adhearsion/call_controller/output/player.rb +1 -1
  24. data/lib/adhearsion/call_controller/record.rb +23 -8
  25. data/lib/adhearsion/calls.rb +1 -1
  26. data/lib/adhearsion/cli_commands/ahn_command.rb +2 -65
  27. data/lib/adhearsion/cli_commands/thor_errors.rb +0 -6
  28. data/lib/adhearsion/configuration.rb +91 -39
  29. data/lib/adhearsion/core_ext/blather/stanza.rb +41 -0
  30. data/lib/adhearsion/core_ext/blather/stanza/presence.rb +13 -0
  31. data/lib/adhearsion/error.rb +5 -0
  32. data/lib/adhearsion/event.rb +21 -0
  33. data/lib/adhearsion/event/active_speaker.rb +11 -0
  34. data/lib/adhearsion/event/answered.rb +11 -0
  35. data/lib/adhearsion/event/asterisk.rb +10 -0
  36. data/lib/adhearsion/event/asterisk/ami.rb +34 -0
  37. data/lib/adhearsion/event/complete.rb +75 -0
  38. data/lib/adhearsion/event/dtmf.rb +11 -0
  39. data/lib/adhearsion/event/end.rb +22 -0
  40. data/lib/adhearsion/event/input_timers_started.rb +9 -0
  41. data/lib/adhearsion/event/joined.rb +17 -0
  42. data/lib/adhearsion/event/offer.rb +14 -0
  43. data/lib/adhearsion/event/ringing.rb +11 -0
  44. data/lib/adhearsion/event/started_speaking.rb +13 -0
  45. data/lib/adhearsion/event/stopped_speaking.rb +13 -0
  46. data/lib/adhearsion/event/unjoined.rb +17 -0
  47. data/lib/adhearsion/events.rb +47 -66
  48. data/lib/adhearsion/foundation.rb +0 -1
  49. data/lib/adhearsion/foundation/object.rb +0 -5
  50. data/lib/adhearsion/generators/app/app_generator.rb +4 -1
  51. data/lib/adhearsion/generators/app/templates/Gemfile.erb +2 -10
  52. data/lib/adhearsion/generators/app/templates/adhearsion.erb +9 -9
  53. data/lib/adhearsion/generators/app/templates/config.ru +7 -0
  54. data/lib/adhearsion/generators/app/templates/en.yml +4 -0
  55. data/lib/adhearsion/generators/app/templates/events.erb +2 -2
  56. data/lib/adhearsion/generators/app/templates/hello_world.wav +0 -0
  57. data/lib/adhearsion/generators/app/templates/simon_game.rb +2 -1
  58. data/lib/adhearsion/generators/app/templates/simon_game_spec.rb +2 -2
  59. data/lib/adhearsion/has_headers.rb +34 -0
  60. data/lib/adhearsion/http_server.rb +37 -0
  61. data/lib/adhearsion/initializer.rb +19 -153
  62. data/lib/adhearsion/logging.rb +6 -25
  63. data/lib/adhearsion/outbound_call.rb +5 -5
  64. data/lib/adhearsion/plugin.rb +1 -0
  65. data/lib/adhearsion/protocol_error.rb +26 -0
  66. data/lib/adhearsion/rayo.rb +30 -0
  67. data/lib/adhearsion/rayo/client.rb +62 -0
  68. data/lib/adhearsion/rayo/client/component_registry.rb +33 -0
  69. data/lib/adhearsion/rayo/command.rb +21 -0
  70. data/lib/adhearsion/rayo/command/accept.rb +16 -0
  71. data/lib/adhearsion/rayo/command/answer.rb +16 -0
  72. data/lib/adhearsion/rayo/command/dial.rb +57 -0
  73. data/lib/adhearsion/rayo/command/hangup.rb +16 -0
  74. data/lib/adhearsion/rayo/command/join.rb +43 -0
  75. data/lib/adhearsion/rayo/command/mute.rb +13 -0
  76. data/lib/adhearsion/rayo/command/redirect.rb +23 -0
  77. data/lib/adhearsion/rayo/command/reject.rb +40 -0
  78. data/lib/adhearsion/rayo/command/unjoin.rb +24 -0
  79. data/lib/adhearsion/rayo/command/unmute.rb +13 -0
  80. data/lib/adhearsion/rayo/command_node.rb +47 -0
  81. data/lib/adhearsion/rayo/component.rb +21 -0
  82. data/lib/adhearsion/rayo/component/asterisk.rb +13 -0
  83. data/lib/adhearsion/rayo/component/asterisk/agi.rb +14 -0
  84. data/lib/adhearsion/rayo/component/asterisk/agi/command.rb +46 -0
  85. data/lib/adhearsion/rayo/component/asterisk/ami.rb +14 -0
  86. data/lib/adhearsion/rayo/component/asterisk/ami/action.rb +61 -0
  87. data/lib/adhearsion/rayo/component/component_node.rb +90 -0
  88. data/lib/adhearsion/rayo/component/input.rb +186 -0
  89. data/lib/adhearsion/rayo/component/output.rb +471 -0
  90. data/lib/adhearsion/rayo/component/prompt.rb +53 -0
  91. data/lib/adhearsion/rayo/component/receive_fax.rb +26 -0
  92. data/lib/adhearsion/rayo/component/record.rb +165 -0
  93. data/lib/adhearsion/rayo/component/send_fax.rb +64 -0
  94. data/lib/adhearsion/rayo/component/stop.rb +11 -0
  95. data/lib/adhearsion/rayo/connection.rb +12 -0
  96. data/lib/adhearsion/rayo/connection/asterisk.rb +74 -0
  97. data/lib/adhearsion/rayo/connection/connected.rb +22 -0
  98. data/lib/adhearsion/rayo/connection/generic_connection.rb +22 -0
  99. data/lib/adhearsion/rayo/connection/xmpp.rb +198 -0
  100. data/lib/adhearsion/rayo/disconnected_error.rb +22 -0
  101. data/lib/adhearsion/{punchblock_plugin → rayo}/initializer.rb +19 -19
  102. data/lib/adhearsion/rayo/rayo_node.rb +127 -0
  103. data/lib/adhearsion/rayo/ref.rb +57 -0
  104. data/lib/adhearsion/statistics.rb +1 -1
  105. data/lib/adhearsion/tasks.rb +1 -2
  106. data/lib/adhearsion/tasks/configuration.rb +1 -1
  107. data/lib/adhearsion/tasks/environment.rb +0 -2
  108. data/lib/adhearsion/tasks/i18n.rb +49 -0
  109. data/lib/adhearsion/translator.rb +11 -0
  110. data/lib/adhearsion/translator/asterisk.rb +234 -0
  111. data/lib/adhearsion/translator/asterisk/agi_app.rb +17 -0
  112. data/lib/adhearsion/translator/asterisk/agi_command.rb +45 -0
  113. data/lib/adhearsion/translator/asterisk/ami_error_converter.rb +20 -0
  114. data/lib/adhearsion/translator/asterisk/call.rb +416 -0
  115. data/lib/adhearsion/translator/asterisk/channel.rb +43 -0
  116. data/lib/adhearsion/translator/asterisk/component.rb +88 -0
  117. data/lib/adhearsion/translator/asterisk/component/asterisk.rb +15 -0
  118. data/lib/adhearsion/translator/asterisk/component/asterisk/agi_command.rb +42 -0
  119. data/lib/adhearsion/translator/asterisk/component/asterisk/ami_action.rb +68 -0
  120. data/lib/adhearsion/translator/asterisk/component/composed_prompt.rb +76 -0
  121. data/lib/adhearsion/translator/asterisk/component/dtmf_recognizer.rb +137 -0
  122. data/lib/adhearsion/translator/asterisk/component/input.rb +34 -0
  123. data/lib/adhearsion/translator/asterisk/component/input_component.rb +90 -0
  124. data/lib/adhearsion/translator/asterisk/component/mrcp_native_prompt.rb +71 -0
  125. data/lib/adhearsion/translator/asterisk/component/mrcp_prompt.rb +55 -0
  126. data/lib/adhearsion/translator/asterisk/component/mrcp_recog_prompt.rb +165 -0
  127. data/lib/adhearsion/translator/asterisk/component/output.rb +233 -0
  128. data/lib/adhearsion/translator/asterisk/component/record.rb +101 -0
  129. data/lib/adhearsion/translator/asterisk/component/stop_by_redirect.rb +30 -0
  130. data/lib/adhearsion/translator/asterisk/unimrcp_app.rb +28 -0
  131. data/lib/adhearsion/uri_list.rb +21 -0
  132. data/lib/adhearsion/version.rb +1 -1
  133. data/spec/adhearsion/call_controller/dial_spec.rb +79 -1420
  134. data/spec/adhearsion/call_controller/input_spec.rb +1141 -237
  135. data/spec/adhearsion/call_controller/output/async_player_spec.rb +10 -10
  136. data/spec/adhearsion/call_controller/output/player_spec.rb +8 -8
  137. data/spec/adhearsion/call_controller/output_spec.rb +162 -215
  138. data/spec/adhearsion/call_controller/record_spec.rb +15 -16
  139. data/spec/adhearsion/call_controller_spec.rb +23 -40
  140. data/spec/adhearsion/call_spec.rb +123 -129
  141. data/spec/adhearsion/calls_spec.rb +3 -3
  142. data/spec/adhearsion/configuration_spec.rb +94 -108
  143. data/spec/adhearsion/event/answered_spec.rb +50 -0
  144. data/spec/adhearsion/event/asterisk/Find Results +402 -0
  145. data/spec/adhearsion/event/asterisk/ami_spec.rb +81 -0
  146. data/spec/adhearsion/event/complete_spec.rb +176 -0
  147. data/spec/adhearsion/event/dtmf_spec.rb +35 -0
  148. data/spec/adhearsion/event/end_spec.rb +85 -0
  149. data/spec/adhearsion/event/input_timers_started_spec.rb +19 -0
  150. data/spec/adhearsion/event/joined_spec.rb +53 -0
  151. data/spec/adhearsion/event/offer_spec.rb +106 -0
  152. data/spec/adhearsion/event/ringing_spec.rb +50 -0
  153. data/spec/adhearsion/event/started_speaking_spec.rb +37 -0
  154. data/spec/adhearsion/event/stopped_speaking_spec.rb +37 -0
  155. data/spec/adhearsion/event/unjoined_spec.rb +48 -0
  156. data/spec/adhearsion/event/untitled +0 -0
  157. data/spec/adhearsion/events_spec.rb +19 -45
  158. data/spec/adhearsion/initializer_spec.rb +12 -184
  159. data/spec/adhearsion/logging_spec.rb +5 -20
  160. data/spec/adhearsion/outbound_call_spec.rb +13 -13
  161. data/spec/adhearsion/plugin_spec.rb +3 -4
  162. data/spec/adhearsion/protocol_error_spec.rb +91 -0
  163. data/spec/adhearsion/rayo/client/component_registry_spec.rb +26 -0
  164. data/spec/adhearsion/rayo/client_spec.rb +134 -0
  165. data/spec/adhearsion/rayo/command/accept_spec.rb +63 -0
  166. data/spec/adhearsion/rayo/command/answer_spec.rb +73 -0
  167. data/spec/adhearsion/rayo/command/dial_spec.rb +156 -0
  168. data/spec/adhearsion/rayo/command/hangup_spec.rb +63 -0
  169. data/spec/adhearsion/rayo/command/join_spec.rb +158 -0
  170. data/spec/adhearsion/rayo/command/mute_spec.rb +32 -0
  171. data/spec/adhearsion/rayo/command/redirect_spec.rb +89 -0
  172. data/spec/adhearsion/rayo/command/reject_spec.rb +117 -0
  173. data/spec/adhearsion/rayo/command/unjoin_spec.rb +82 -0
  174. data/spec/adhearsion/rayo/command/unmute_spec.rb +32 -0
  175. data/spec/adhearsion/rayo/command_node_spec.rb +101 -0
  176. data/spec/adhearsion/rayo/component/asterisk/agi/command_spec.rb +111 -0
  177. data/spec/adhearsion/rayo/component/asterisk/ami/action_spec.rb +173 -0
  178. data/spec/adhearsion/rayo/component/component_node_spec.rb +110 -0
  179. data/spec/adhearsion/rayo/component/input_spec.rb +715 -0
  180. data/spec/adhearsion/rayo/component/output_spec.rb +1030 -0
  181. data/spec/adhearsion/rayo/component/prompt_spec.rb +171 -0
  182. data/spec/adhearsion/rayo/component/receive_fax_spec.rb +136 -0
  183. data/spec/adhearsion/rayo/component/record_spec.rb +497 -0
  184. data/spec/adhearsion/rayo/component/send_fax_spec.rb +144 -0
  185. data/spec/adhearsion/rayo/connection/asterisk_spec.rb +118 -0
  186. data/spec/adhearsion/rayo/connection/xmpp_spec.rb +449 -0
  187. data/spec/adhearsion/rayo/initializer_spec.rb +353 -0
  188. data/spec/adhearsion/rayo/ref_spec.rb +168 -0
  189. data/spec/adhearsion/rayo_spec.rb +7 -0
  190. data/spec/adhearsion/router/route_spec.rb +1 -1
  191. data/spec/adhearsion/statistics_spec.rb +2 -5
  192. data/spec/adhearsion/translator/asterisk/call_spec.rb +2047 -0
  193. data/spec/adhearsion/translator/asterisk/component/asterisk/agi_command_spec.rb +256 -0
  194. data/spec/adhearsion/translator/asterisk/component/asterisk/ami_action_spec.rb +151 -0
  195. data/spec/adhearsion/translator/asterisk/component/composed_prompt_spec.rb +257 -0
  196. data/spec/adhearsion/translator/asterisk/component/input_spec.rb +571 -0
  197. data/spec/adhearsion/translator/asterisk/component/mrcp_native_prompt_spec.rb +774 -0
  198. data/spec/adhearsion/translator/asterisk/component/mrcp_prompt_spec.rb +1244 -0
  199. data/spec/adhearsion/translator/asterisk/component/output_spec.rb +1850 -0
  200. data/spec/adhearsion/translator/asterisk/component/record_spec.rb +426 -0
  201. data/spec/adhearsion/translator/asterisk/component/stop_by_redirect_spec.rb +62 -0
  202. data/spec/adhearsion/translator/asterisk/component_spec.rb +83 -0
  203. data/spec/adhearsion/translator/asterisk_spec.rb +685 -0
  204. data/spec/adhearsion/uri_list_spec.rb +88 -0
  205. data/spec/adhearsion_spec.rb +89 -14
  206. data/spec/fixtures/locale/en.yml +13 -0
  207. data/spec/fixtures/locale/it.yml +13 -0
  208. data/spec/spec_helper.rb +18 -5
  209. data/spec/support/call_controller_test_helpers.rb +3 -2
  210. data/spec/support/initializer_stubs.rb +3 -1
  211. data/spec/support/punchblock_examples.rb +65 -0
  212. data/spec/support/punchblock_mocks.rb +12 -0
  213. metadata +412 -70
  214. data/features/cli_daemon.feature +0 -20
  215. data/features/cli_restart.feature +0 -52
  216. data/features/cli_stop.feature +0 -50
  217. data/lib/adhearsion/call_controller/menu_dsl.rb +0 -21
  218. data/lib/adhearsion/call_controller/menu_dsl/array_match_calculator.rb +0 -26
  219. data/lib/adhearsion/call_controller/menu_dsl/calculated_match.rb +0 -43
  220. data/lib/adhearsion/call_controller/menu_dsl/calculated_match_collection.rb +0 -45
  221. data/lib/adhearsion/call_controller/menu_dsl/fixnum_match_calculator.rb +0 -11
  222. data/lib/adhearsion/call_controller/menu_dsl/match_calculator.rb +0 -40
  223. data/lib/adhearsion/call_controller/menu_dsl/menu.rb +0 -207
  224. data/lib/adhearsion/call_controller/menu_dsl/menu_builder.rb +0 -92
  225. data/lib/adhearsion/call_controller/menu_dsl/range_match_calculator.rb +0 -60
  226. data/lib/adhearsion/call_controller/menu_dsl/string_match_calculator.rb +0 -25
  227. data/lib/adhearsion/call_controller/utility.rb +0 -77
  228. data/lib/adhearsion/foundation/custom_daemonizer.rb +0 -52
  229. data/lib/adhearsion/punchblock_plugin.rb +0 -63
  230. data/scripts/cloc-1.64.pl +0 -10483
  231. data/spec/adhearsion/call_controller/menu_dsl/array_match_calculator_spec.rb +0 -76
  232. data/spec/adhearsion/call_controller/menu_dsl/calculated_match_collection_spec.rb +0 -60
  233. data/spec/adhearsion/call_controller/menu_dsl/calculated_match_spec.rb +0 -61
  234. data/spec/adhearsion/call_controller/menu_dsl/fixnum_match_calculator_spec.rb +0 -39
  235. data/spec/adhearsion/call_controller/menu_dsl/match_calculator_spec.rb +0 -17
  236. data/spec/adhearsion/call_controller/menu_dsl/menu_builder_spec.rb +0 -165
  237. data/spec/adhearsion/call_controller/menu_dsl/menu_spec.rb +0 -420
  238. data/spec/adhearsion/call_controller/menu_dsl/range_match_calculator_spec.rb +0 -32
  239. data/spec/adhearsion/call_controller/menu_dsl/string_match_calculator_spec.rb +0 -40
  240. data/spec/adhearsion/call_controller/utility_spec.rb +0 -90
  241. data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +0 -356
  242. data/spec/adhearsion/punchblock_plugin_spec.rb +0 -59
@@ -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: