punchblock 2.5.2 → 2.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +2 -0
  3. data/CHANGELOG.md +6 -0
  4. data/README.markdown +2 -1
  5. data/lib/punchblock/translator/asterisk/call.rb +3 -3
  6. data/lib/punchblock/translator/asterisk/component/mrcp_recog_prompt.rb +15 -9
  7. data/lib/punchblock/translator/asterisk/component/output.rb +8 -1
  8. data/lib/punchblock/translator/input_component.rb +2 -0
  9. data/lib/punchblock/version.rb +1 -1
  10. data/punchblock.gemspec +1 -1
  11. data/spec/punchblock/client/component_registry_spec.rb +3 -3
  12. data/spec/punchblock/client_spec.rb +22 -15
  13. data/spec/punchblock/command/accept_spec.rb +17 -7
  14. data/spec/punchblock/command/answer_spec.rb +19 -9
  15. data/spec/punchblock/command/dial_spec.rb +76 -27
  16. data/spec/punchblock/command/hangup_spec.rb +17 -7
  17. data/spec/punchblock/command/join_spec.rb +78 -24
  18. data/spec/punchblock/command/mute_spec.rb +3 -3
  19. data/spec/punchblock/command/redirect_spec.rb +33 -12
  20. data/spec/punchblock/command/reject_spec.rb +41 -14
  21. data/spec/punchblock/command/unjoin_spec.rb +29 -12
  22. data/spec/punchblock/command/unmute_spec.rb +3 -3
  23. data/spec/punchblock/command_node_spec.rb +43 -20
  24. data/spec/punchblock/component/asterisk/agi/command_spec.rb +52 -12
  25. data/spec/punchblock/component/asterisk/ami/action_spec.rb +69 -21
  26. data/spec/punchblock/component/component_node_spec.rb +12 -12
  27. data/spec/punchblock/component/input_spec.rb +304 -87
  28. data/spec/punchblock/component/output_spec.rb +434 -173
  29. data/spec/punchblock/component/prompt_spec.rb +63 -20
  30. data/spec/punchblock/component/receive_fax_spec.rb +43 -14
  31. data/spec/punchblock/component/record_spec.rb +215 -71
  32. data/spec/punchblock/component/send_fax_spec.rb +54 -15
  33. data/spec/punchblock/connection/asterisk_spec.rb +34 -24
  34. data/spec/punchblock/connection/freeswitch_spec.rb +9 -9
  35. data/spec/punchblock/connection/xmpp_spec.rb +92 -83
  36. data/spec/punchblock/event/answered_spec.rb +14 -4
  37. data/spec/punchblock/event/asterisk/ami/event_spec.rb +34 -12
  38. data/spec/punchblock/event/complete_spec.rb +36 -16
  39. data/spec/punchblock/event/dtmf_spec.rb +9 -3
  40. data/spec/punchblock/event/end_spec.rb +43 -10
  41. data/spec/punchblock/event/input_timers_started_spec.rb +1 -1
  42. data/spec/punchblock/event/joined_spec.rb +29 -7
  43. data/spec/punchblock/event/offer_spec.rb +41 -10
  44. data/spec/punchblock/event/ringing_spec.rb +14 -4
  45. data/spec/punchblock/event/started_speaking_spec.rb +9 -3
  46. data/spec/punchblock/event/stopped_speaking_spec.rb +9 -3
  47. data/spec/punchblock/event/unjoined_spec.rb +24 -6
  48. data/spec/punchblock/protocol_error_spec.rb +16 -13
  49. data/spec/punchblock/ref_spec.rb +90 -26
  50. data/spec/punchblock/translator/asterisk/call_spec.rb +176 -161
  51. data/spec/punchblock/translator/asterisk/component/asterisk/agi_command_spec.rb +18 -18
  52. data/spec/punchblock/translator/asterisk/component/asterisk/ami_action_spec.rb +9 -9
  53. data/spec/punchblock/translator/asterisk/component/composed_prompt_spec.rb +14 -14
  54. data/spec/punchblock/translator/asterisk/component/input_spec.rb +57 -36
  55. data/spec/punchblock/translator/asterisk/component/mrcp_native_prompt_spec.rb +50 -50
  56. data/spec/punchblock/translator/asterisk/component/mrcp_prompt_spec.rb +59 -48
  57. data/spec/punchblock/translator/asterisk/component/output_spec.rb +231 -221
  58. data/spec/punchblock/translator/asterisk/component/record_spec.rb +82 -82
  59. data/spec/punchblock/translator/asterisk/component/stop_by_redirect_spec.rb +10 -10
  60. data/spec/punchblock/translator/asterisk/component_spec.rb +4 -4
  61. data/spec/punchblock/translator/asterisk_spec.rb +89 -82
  62. data/spec/punchblock/translator/freeswitch/call_spec.rb +114 -99
  63. data/spec/punchblock/translator/freeswitch/component/flite_output_spec.rb +19 -19
  64. data/spec/punchblock/translator/freeswitch/component/input_spec.rb +24 -24
  65. data/spec/punchblock/translator/freeswitch/component/output_spec.rb +23 -23
  66. data/spec/punchblock/translator/freeswitch/component/record_spec.rb +78 -78
  67. data/spec/punchblock/translator/freeswitch/component/tts_output_spec.rb +19 -19
  68. data/spec/punchblock/translator/freeswitch/component_spec.rb +8 -8
  69. data/spec/punchblock/translator/freeswitch_spec.rb +66 -59
  70. data/spec/punchblock/uri_list_spec.rb +45 -10
  71. data/spec/punchblock_spec.rb +13 -13
  72. data/spec/spec_helper.rb +18 -11
  73. data/spec/support/mock_connection_with_event_handler.rb +1 -1
  74. metadata +5 -4
@@ -6,7 +6,7 @@ module Punchblock
6
6
  module Component
7
7
  describe Input do
8
8
  it 'registers itself' do
9
- RayoNode.class_from_registration(:input, 'urn:xmpp:rayo:input:1').should be == described_class
9
+ expect(RayoNode.class_from_registration(:input, 'urn:xmpp:rayo:input:1')).to eq(described_class)
10
10
  end
11
11
 
12
12
  describe "when setting options in initializer" do
@@ -23,16 +23,55 @@ module Punchblock
23
23
  :min_confidence => 0.5
24
24
  end
25
25
 
26
- its(:grammars) { should be == [Input::Grammar.new(:value => '[5 DIGITS]', :content_type => 'application/grammar+custom')] }
27
- its(:mode) { should be == :voice }
28
- its(:terminator) { should be == '#' }
29
- its(:max_silence) { should be == 1000 }
30
- its(:recognizer) { should be == 'default' }
31
- its(:language) { should be == 'en-US' }
32
- its(:initial_timeout) { should be == 2000 }
33
- its(:inter_digit_timeout) { should be == 2000 }
34
- its(:sensitivity) { should be == 0.5 }
35
- its(:min_confidence) { should be == 0.5 }
26
+ describe '#grammars' do
27
+ subject { super().grammars }
28
+ it { should be == [Input::Grammar.new(:value => '[5 DIGITS]', :content_type => 'application/grammar+custom')] }
29
+ end
30
+
31
+ describe '#mode' do
32
+ subject { super().mode }
33
+ it { should be == :voice }
34
+ end
35
+
36
+ describe '#terminator' do
37
+ subject { super().terminator }
38
+ it { should be == '#' }
39
+ end
40
+
41
+ describe '#max_silence' do
42
+ subject { super().max_silence }
43
+ it { should be == 1000 }
44
+ end
45
+
46
+ describe '#recognizer' do
47
+ subject { super().recognizer }
48
+ it { should be == 'default' }
49
+ end
50
+
51
+ describe '#language' do
52
+ subject { super().language }
53
+ it { should be == 'en-US' }
54
+ end
55
+
56
+ describe '#initial_timeout' do
57
+ subject { super().initial_timeout }
58
+ it { should be == 2000 }
59
+ end
60
+
61
+ describe '#inter_digit_timeout' do
62
+ subject { super().inter_digit_timeout }
63
+ it { should be == 2000 }
64
+ end
65
+
66
+ describe '#sensitivity' do
67
+ subject { super().sensitivity }
68
+ it { should be == 0.5 }
69
+ end
70
+
71
+ describe '#min_confidence' do
72
+ subject { super().min_confidence }
73
+ it { should be == 0.5 }
74
+ end
36
75
 
37
76
  context "with multiple grammars" do
38
77
  subject do
@@ -42,44 +81,50 @@ module Punchblock
42
81
  ]
43
82
  end
44
83
 
45
- its(:grammars) { should be == [
84
+ describe '#grammars' do
85
+ subject { super().grammars }
86
+ it { should be == [
46
87
  Input::Grammar.new(:value => '[5 DIGITS]', :content_type => 'application/grammar+custom'),
47
88
  Input::Grammar.new(:value => '[10 DIGITS]', :content_type => 'application/grammar+custom')
48
89
  ]}
90
+ end
49
91
  end
50
92
 
51
93
  context "with a nil grammar" do
52
94
  it "removes all grammars" do
53
95
  subject.grammar = nil
54
- subject.grammars.should == []
96
+ expect(subject.grammars).to eq([])
55
97
  end
56
98
  end
57
99
 
58
100
  context "without any grammars" do
59
101
  subject { described_class.new }
60
102
 
61
- its(:grammars) { should == [] }
103
+ describe '#grammars' do
104
+ subject { super().grammars }
105
+ it { should == [] }
106
+ end
62
107
  end
63
108
 
64
109
  describe "exporting to Rayo" do
65
110
  it "should export to XML that can be understood by its parser" do
66
111
  new_instance = RayoNode.from_xml subject.to_rayo
67
- new_instance.should be_instance_of described_class
68
- new_instance.grammars.should be == [Input::Grammar.new(value: '[5 DIGITS]', content_type: 'application/grammar+custom')]
69
- new_instance.mode.should be == :voice
70
- new_instance.terminator.should be == '#'
71
- new_instance.max_silence.should be == 1000
72
- new_instance.recognizer.should be == 'default'
73
- new_instance.language.should be == 'en-US'
74
- new_instance.initial_timeout.should be == 2000
75
- new_instance.inter_digit_timeout.should be == 2000
76
- new_instance.sensitivity.should be == 0.5
77
- new_instance.min_confidence.should be == 0.5
112
+ expect(new_instance).to be_instance_of described_class
113
+ expect(new_instance.grammars).to eq([Input::Grammar.new(value: '[5 DIGITS]', content_type: 'application/grammar+custom')])
114
+ expect(new_instance.mode).to eq(:voice)
115
+ expect(new_instance.terminator).to eq('#')
116
+ expect(new_instance.max_silence).to eq(1000)
117
+ expect(new_instance.recognizer).to eq('default')
118
+ expect(new_instance.language).to eq('en-US')
119
+ expect(new_instance.initial_timeout).to eq(2000)
120
+ expect(new_instance.inter_digit_timeout).to eq(2000)
121
+ expect(new_instance.sensitivity).to eq(0.5)
122
+ expect(new_instance.min_confidence).to eq(0.5)
78
123
  end
79
124
 
80
125
  it "should wrap the grammar value in CDATA" do
81
126
  grammar_node = subject.to_rayo.at_xpath('ns:grammar', ns: described_class.registered_ns)
82
- grammar_node.children.first.should be_a Nokogiri::XML::CDATA
127
+ expect(grammar_node.children.first).to be_a Nokogiri::XML::CDATA
83
128
  end
84
129
 
85
130
  it "should render to a parent node if supplied" do
@@ -87,7 +132,7 @@ module Punchblock
87
132
  parent = Nokogiri::XML::Node.new 'foo', doc
88
133
  doc.root = parent
89
134
  rayo_doc = subject.to_rayo(parent)
90
- rayo_doc.should == parent
135
+ expect(rayo_doc).to eq(parent)
91
136
  end
92
137
  end
93
138
  end
@@ -119,20 +164,63 @@ module Punchblock
119
164
 
120
165
  it { should be_instance_of Input }
121
166
 
122
- its(:grammars) { should be == [Input::Grammar.new(:value => '[5 DIGITS]', :content_type => 'application/grammar+custom'), Input::Grammar.new(:value => '[10 DIGITS]', :content_type => 'application/grammar+custom')] }
123
- its(:mode) { should be == :voice }
124
- its(:terminator) { should be == '#' }
125
- its(:max_silence) { should be == 1000 }
126
- its(:recognizer) { should be == 'default' }
127
- its(:language) { should be == 'en-US' }
128
- its(:initial_timeout) { should be == 2000 }
129
- its(:inter_digit_timeout) { should be == 2000 }
130
- its(:sensitivity) { should be == 0.5 }
131
- its(:min_confidence) { should be == 0.5 }
167
+ describe '#grammars' do
168
+ subject { super().grammars }
169
+ it { should be == [Input::Grammar.new(:value => '[5 DIGITS]', :content_type => 'application/grammar+custom'), Input::Grammar.new(:value => '[10 DIGITS]', :content_type => 'application/grammar+custom')] }
170
+ end
171
+
172
+ describe '#mode' do
173
+ subject { super().mode }
174
+ it { should be == :voice }
175
+ end
176
+
177
+ describe '#terminator' do
178
+ subject { super().terminator }
179
+ it { should be == '#' }
180
+ end
181
+
182
+ describe '#max_silence' do
183
+ subject { super().max_silence }
184
+ it { should be == 1000 }
185
+ end
186
+
187
+ describe '#recognizer' do
188
+ subject { super().recognizer }
189
+ it { should be == 'default' }
190
+ end
191
+
192
+ describe '#language' do
193
+ subject { super().language }
194
+ it { should be == 'en-US' }
195
+ end
196
+
197
+ describe '#initial_timeout' do
198
+ subject { super().initial_timeout }
199
+ it { should be == 2000 }
200
+ end
201
+
202
+ describe '#inter_digit_timeout' do
203
+ subject { super().inter_digit_timeout }
204
+ it { should be == 2000 }
205
+ end
206
+
207
+ describe '#sensitivity' do
208
+ subject { super().sensitivity }
209
+ it { should be == 0.5 }
210
+ end
211
+
212
+ describe '#min_confidence' do
213
+ subject { super().min_confidence }
214
+ it { should be == 0.5 }
215
+ end
132
216
 
133
217
  context "without any grammars" do
134
218
  let(:stanza) { '<input xmlns="urn:xmpp:rayo:input:1"/>' }
135
- its(:grammars) { should be == [] }
219
+
220
+ describe '#grammars' do
221
+ subject { super().grammars }
222
+ it { should be == [] }
223
+ end
136
224
  end
137
225
  end
138
226
 
@@ -149,15 +237,25 @@ module Punchblock
149
237
  describe Input::Grammar do
150
238
  describe "when not passing a content type" do
151
239
  subject { Input::Grammar.new :value => grxml_doc }
152
- its(:content_type) { should be == 'application/srgs+xml' }
240
+
241
+ describe '#content_type' do
242
+ subject { super().content_type }
243
+ it { should be == 'application/srgs+xml' }
244
+ end
153
245
  end
154
246
 
155
247
  describe 'with a GRXML grammar' do
156
248
  subject { Input::Grammar.new :value => grxml_doc, :content_type => 'application/srgs+xml' }
157
249
 
158
- its(:content_type) { should be == 'application/srgs+xml' }
250
+ describe '#content_type' do
251
+ subject { super().content_type }
252
+ it { should be == 'application/srgs+xml' }
253
+ end
159
254
 
160
- its(:value) { should be == grxml_doc }
255
+ describe '#value' do
256
+ subject { super().value }
257
+ it { should be == grxml_doc }
258
+ end
161
259
 
162
260
  describe "comparison" do
163
261
  let(:grammar2) { Input::Grammar.new :value => grxml_doc }
@@ -168,7 +266,7 @@ module Punchblock
168
266
  end
169
267
 
170
268
  it "has children nested inside" do
171
- subject.to_rayo.children.first.should be_a Nokogiri::XML::CDATA
269
+ expect(subject.to_rayo.children.first).to be_a Nokogiri::XML::CDATA
172
270
  end
173
271
  end
174
272
 
@@ -177,16 +275,23 @@ module Punchblock
177
275
 
178
276
  subject { Input::Grammar.new :url => url }
179
277
 
180
- its(:url) { should be == url }
181
- its(:content_type) { should be nil}
278
+ describe '#url' do
279
+ subject { super().url }
280
+ it { should be == url }
281
+ end
282
+
283
+ describe '#content_type' do
284
+ subject { super().content_type }
285
+ it { should be nil}
286
+ end
182
287
 
183
288
  describe "comparison" do
184
289
  it "should be the same with the same url" do
185
- Input::Grammar.new(:url => url).should be == Input::Grammar.new(:url => url)
290
+ expect(Input::Grammar.new(:url => url)).to eq(Input::Grammar.new(:url => url))
186
291
  end
187
292
 
188
293
  it "should be different with a different url" do
189
- Input::Grammar.new(:url => url).should_not be == Input::Grammar.new(:url => 'http://doo.com/dah')
294
+ expect(Input::Grammar.new(:url => url)).not_to eq(Input::Grammar.new(:url => 'http://doo.com/dah'))
190
295
  end
191
296
  end
192
297
  end
@@ -195,7 +300,7 @@ module Punchblock
195
300
  subject { Input::Grammar.new url: "urn:xmpp:rayo:cpa:beep:1" }
196
301
 
197
302
  it "has no children" do
198
- subject.to_rayo.children.count.should == 0
303
+ expect(subject.to_rayo.children.count).to eq(0)
199
304
  end
200
305
  end
201
306
  end
@@ -213,9 +318,20 @@ module Punchblock
213
318
  describe '#stop_action' do
214
319
  subject { command.stop_action }
215
320
 
216
- its(:to_xml) { should be == '<stop xmlns="urn:xmpp:rayo:ext:1"/>' }
217
- its(:component_id) { should be == 'abc123' }
218
- its(:target_call_id) { should be == '123abc' }
321
+ describe '#to_xml' do
322
+ subject { super().to_xml }
323
+ it { should be == '<stop xmlns="urn:xmpp:rayo:ext:1"/>' }
324
+ end
325
+
326
+ describe '#component_id' do
327
+ subject { super().component_id }
328
+ it { should be == 'abc123' }
329
+ end
330
+
331
+ describe '#target_call_id' do
332
+ subject { super().target_call_id }
333
+ it { should be == '123abc' }
334
+ end
219
335
  end
220
336
 
221
337
  describe '#stop!' do
@@ -226,14 +342,14 @@ module Punchblock
226
342
  end
227
343
 
228
344
  it "should send its command properly" do
229
- mock_client.should_receive(:execute_command).with(command.stop_action, :target_call_id => '123abc', :component_id => 'abc123')
345
+ expect(mock_client).to receive(:execute_command).with(command.stop_action, :target_call_id => '123abc', :component_id => 'abc123')
230
346
  command.stop!
231
347
  end
232
348
  end
233
349
 
234
350
  describe "when the command is not executing" do
235
351
  it "should raise an error" do
236
- lambda { command.stop! }.should raise_error(InvalidActionError, "Cannot stop a Input that is new")
352
+ expect { command.stop! }.to raise_error(InvalidActionError, "Cannot stop a Input that is new")
237
353
  end
238
354
  end
239
355
  end
@@ -281,25 +397,75 @@ module Punchblock
281
397
 
282
398
  it { should be_instance_of Input::Complete::Match }
283
399
 
284
- its(:name) { should be == :match }
285
- its(:content_type) { should be == 'application/nlsml+xml' }
286
- its(:nlsml) { should be == expected_nlsml }
287
- its(:mode) { should be == :voice }
288
- its(:confidence) { should be == 0.6 }
289
- its(:interpretation) { should be == { airline: { to_city: 'Pittsburgh' } } }
290
- its(:utterance) { should be == 'I want to go to Pittsburgh' }
400
+ describe '#name' do
401
+ subject { super().name }
402
+ it { should be == :match }
403
+ end
404
+
405
+ describe '#content_type' do
406
+ subject { super().content_type }
407
+ it { should be == 'application/nlsml+xml' }
408
+ end
409
+
410
+ describe '#nlsml' do
411
+ subject { super().nlsml }
412
+ it { should be == expected_nlsml }
413
+ end
414
+
415
+ describe '#mode' do
416
+ subject { super().mode }
417
+ it { should be == :voice }
418
+ end
419
+
420
+ describe '#confidence' do
421
+ subject { super().confidence }
422
+ it { should be == 0.6 }
423
+ end
424
+
425
+ describe '#interpretation' do
426
+ subject { super().interpretation }
427
+ it { should be == { airline: { to_city: 'Pittsburgh' } } }
428
+ end
429
+
430
+ describe '#utterance' do
431
+ subject { super().utterance }
432
+ it { should be == 'I want to go to Pittsburgh' }
433
+ end
291
434
 
292
435
  describe "when creating from an NLSML document" do
293
436
  subject do
294
437
  Input::Complete::Match.new :nlsml => expected_nlsml
295
438
  end
296
439
 
297
- its(:content_type) { should be == 'application/nlsml+xml' }
298
- its(:nlsml) { should be == expected_nlsml }
299
- its(:mode) { should be == :voice }
300
- its(:confidence) { should be == 0.6 }
301
- its(:interpretation) { should be == { airline: { to_city: 'Pittsburgh' } } }
302
- its(:utterance) { should be == 'I want to go to Pittsburgh' }
440
+ describe '#content_type' do
441
+ subject { super().content_type }
442
+ it { should be == 'application/nlsml+xml' }
443
+ end
444
+
445
+ describe '#nlsml' do
446
+ subject { super().nlsml }
447
+ it { should be == expected_nlsml }
448
+ end
449
+
450
+ describe '#mode' do
451
+ subject { super().mode }
452
+ it { should be == :voice }
453
+ end
454
+
455
+ describe '#confidence' do
456
+ subject { super().confidence }
457
+ it { should be == 0.6 }
458
+ end
459
+
460
+ describe '#interpretation' do
461
+ subject { super().interpretation }
462
+ it { should be == { airline: { to_city: 'Pittsburgh' } } }
463
+ end
464
+
465
+ describe '#utterance' do
466
+ subject { super().utterance }
467
+ it { should be == 'I want to go to Pittsburgh' }
468
+ end
303
469
  end
304
470
 
305
471
  context "when not enclosed in CDATA, but escaped" do
@@ -314,7 +480,7 @@ module Punchblock
314
480
  end
315
481
 
316
482
  it "should parse the NLSML correctly" do
317
- subject.nlsml.grammar.should == "http://flight"
483
+ expect(subject.nlsml.grammar).to eq("http://flight")
318
484
  end
319
485
  end
320
486
 
@@ -330,14 +496,14 @@ module Punchblock
330
496
  end
331
497
 
332
498
  it "should parse the NLSML correctly" do
333
- subject.nlsml.grammar.should == "http://flight"
499
+ expect(subject.nlsml.grammar).to eq("http://flight")
334
500
  end
335
501
  end
336
502
 
337
503
  describe "comparison" do
338
504
  context "with the same nlsml" do
339
505
  it "should be equal" do
340
- subject.should == RayoNode.from_xml(parse_stanza(stanza).root).reason
506
+ expect(subject).to eq(RayoNode.from_xml(parse_stanza(stanza).root).reason)
341
507
  end
342
508
  end
343
509
 
@@ -353,7 +519,7 @@ module Punchblock
353
519
  end
354
520
 
355
521
  it "should not be equal" do
356
- subject.should_not == RayoNode.from_xml(parse_stanza(other_stanza).root).reason
522
+ expect(subject).not_to eq(RayoNode.from_xml(parse_stanza(other_stanza).root).reason)
357
523
  end
358
524
  end
359
525
  end
@@ -372,7 +538,10 @@ module Punchblock
372
538
 
373
539
  it { should be_instance_of Input::Complete::NoMatch }
374
540
 
375
- its(:name) { should be == :nomatch }
541
+ describe '#name' do
542
+ subject { super().name }
543
+ it { should be == :nomatch }
544
+ end
376
545
  end
377
546
 
378
547
  describe Input::Complete::NoInput do
@@ -388,7 +557,10 @@ module Punchblock
388
557
 
389
558
  it { should be_instance_of Input::Complete::NoInput }
390
559
 
391
- its(:name) { should be == :noinput }
560
+ describe '#name' do
561
+ subject { super().name }
562
+ it { should be == :noinput }
563
+ end
392
564
  end
393
565
 
394
566
  describe Input::Signal do
@@ -403,20 +575,50 @@ module Punchblock
403
575
  it { should be_instance_of Input::Signal }
404
576
  it { should be_a Punchblock::Event }
405
577
 
406
- its(:name) { should be == :signal }
407
- its(:type) { should be == 'urn:xmpp:rayo:cpa:beep:1' }
408
- its(:duration) { should be == 1000 }
409
- its(:value) { should be == '8000' }
578
+ describe '#name' do
579
+ subject { super().name }
580
+ it { should be == :signal }
581
+ end
582
+
583
+ describe '#type' do
584
+ subject { super().type }
585
+ it { should be == 'urn:xmpp:rayo:cpa:beep:1' }
586
+ end
587
+
588
+ describe '#duration' do
589
+ subject { super().duration }
590
+ it { should be == 1000 }
591
+ end
592
+
593
+ describe '#value' do
594
+ subject { super().value }
595
+ it { should be == '8000' }
596
+ end
410
597
 
411
598
  describe "when creating from options" do
412
599
  subject do
413
600
  Input::Signal.new type: 'urn:xmpp:rayo:cpa:beep:1', duration: 1000, value: '8000'
414
601
  end
415
602
 
416
- its(:name) { should be == :signal }
417
- its(:type) { should be == 'urn:xmpp:rayo:cpa:beep:1' }
418
- its(:duration) { should be == 1000 }
419
- its(:value) { should be == '8000' }
603
+ describe '#name' do
604
+ subject { super().name }
605
+ it { should be == :signal }
606
+ end
607
+
608
+ describe '#type' do
609
+ subject { super().type }
610
+ it { should be == 'urn:xmpp:rayo:cpa:beep:1' }
611
+ end
612
+
613
+ describe '#duration' do
614
+ subject { super().duration }
615
+ it { should be == 1000 }
616
+ end
617
+
618
+ describe '#value' do
619
+ subject { super().value }
620
+ it { should be == '8000' }
621
+ end
420
622
  end
421
623
 
422
624
  context "when in a complete event" do
@@ -432,16 +634,31 @@ module Punchblock
432
634
 
433
635
  it { should be_instance_of Input::Signal }
434
636
 
435
- its(:name) { should be == :signal }
436
- its(:type) { should be == 'urn:xmpp:rayo:cpa:beep:1' }
437
- its(:duration) { should be == 1000 }
438
- its(:value) { should be == '8000' }
637
+ describe '#name' do
638
+ subject { super().name }
639
+ it { should be == :signal }
640
+ end
641
+
642
+ describe '#type' do
643
+ subject { super().type }
644
+ it { should be == 'urn:xmpp:rayo:cpa:beep:1' }
645
+ end
646
+
647
+ describe '#duration' do
648
+ subject { super().duration }
649
+ it { should be == 1000 }
650
+ end
651
+
652
+ describe '#value' do
653
+ subject { super().value }
654
+ it { should be == '8000' }
655
+ end
439
656
  end
440
657
 
441
658
  describe "comparison" do
442
659
  context "with the same options" do
443
660
  it "should be equal" do
444
- subject.should == RayoNode.from_xml(parse_stanza(stanza).root)
661
+ expect(subject).to eq(RayoNode.from_xml(parse_stanza(stanza).root))
445
662
  end
446
663
  end
447
664
 
@@ -449,7 +666,7 @@ module Punchblock
449
666
  let(:other_stanza) { '<signal xmlns="urn:xmpp:rayo:cpa:1" type="urn:xmpp:rayo:cpa:ring:1" duration="1000" value="8000"/>' }
450
667
 
451
668
  it "should not be equal" do
452
- subject.should_not == RayoNode.from_xml(parse_stanza(other_stanza).root)
669
+ expect(subject).not_to eq(RayoNode.from_xml(parse_stanza(other_stanza).root))
453
670
  end
454
671
  end
455
672
 
@@ -457,7 +674,7 @@ module Punchblock
457
674
  let(:other_stanza) { '<signal xmlns="urn:xmpp:rayo:cpa:1" type="urn:xmpp:rayo:cpa:beep:1" duration="100" value="8000"/>' }
458
675
 
459
676
  it "should not be equal" do
460
- subject.should_not == RayoNode.from_xml(parse_stanza(other_stanza).root)
677
+ expect(subject).not_to eq(RayoNode.from_xml(parse_stanza(other_stanza).root))
461
678
  end
462
679
  end
463
680
 
@@ -465,7 +682,7 @@ module Punchblock
465
682
  let(:other_stanza) { '<signal xmlns="urn:xmpp:rayo:cpa:1" type="urn:xmpp:rayo:cpa:beep:1" duration="1000" value="7000"/>' }
466
683
 
467
684
  it "should not be equal" do
468
- subject.should_not == RayoNode.from_xml(parse_stanza(other_stanza).root)
685
+ expect(subject).not_to eq(RayoNode.from_xml(parse_stanza(other_stanza).root))
469
686
  end
470
687
  end
471
688
  end