punchblock 1.8.2 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +8 -0
  4. data/lib/punchblock/component/asterisk/agi/command.rb +0 -11
  5. data/lib/punchblock/connection/asterisk.rb +3 -3
  6. data/lib/punchblock/translator/asterisk/agi_command.rb +40 -0
  7. data/lib/punchblock/translator/asterisk/call.rb +56 -47
  8. data/lib/punchblock/translator/asterisk/component/asterisk/agi_command.rb +13 -37
  9. data/lib/punchblock/translator/asterisk/component/asterisk/ami_action.rb +24 -41
  10. data/lib/punchblock/translator/asterisk/component/input.rb +2 -1
  11. data/lib/punchblock/translator/asterisk/component/output.rb +16 -21
  12. data/lib/punchblock/translator/asterisk/component/record.rb +11 -19
  13. data/lib/punchblock/translator/asterisk/component.rb +12 -9
  14. data/lib/punchblock/translator/asterisk.rb +16 -22
  15. data/lib/punchblock/translator/dtmf_recognizer.rb +4 -4
  16. data/lib/punchblock/translator/freeswitch/component/input.rb +2 -1
  17. data/lib/punchblock/translator/input_component.rb +2 -2
  18. data/lib/punchblock/version.rb +1 -1
  19. data/punchblock.gemspec +1 -1
  20. data/spec/punchblock/connection/asterisk_spec.rb +8 -7
  21. data/spec/punchblock/translator/asterisk/call_spec.rb +262 -229
  22. data/spec/punchblock/translator/asterisk/component/asterisk/agi_command_spec.rb +57 -29
  23. data/spec/punchblock/translator/asterisk/component/asterisk/ami_action_spec.rb +40 -46
  24. data/spec/punchblock/translator/asterisk/component/input_spec.rb +7 -7
  25. data/spec/punchblock/translator/asterisk/component/output_spec.rb +84 -53
  26. data/spec/punchblock/translator/asterisk/component/record_spec.rb +55 -83
  27. data/spec/punchblock/translator/asterisk/component/stop_by_redirect_spec.rb +5 -1
  28. data/spec/punchblock/translator/asterisk/component_spec.rb +2 -10
  29. data/spec/punchblock/translator/asterisk_spec.rb +73 -100
  30. metadata +5 -10
@@ -7,7 +7,7 @@ module Punchblock
7
7
  module Translator
8
8
  describe Asterisk do
9
9
  let(:ami_client) { mock 'RubyAMI::Client' }
10
- let(:connection) { mock 'Connection::Asterisk' }
10
+ let(:connection) { mock 'Connection::Asterisk', handle_event: nil }
11
11
  let(:media_engine) { :asterisk }
12
12
 
13
13
  let(:translator) { Asterisk.new ami_client, connection, media_engine }
@@ -31,7 +31,7 @@ module Punchblock
31
31
 
32
32
  describe '#shutdown' do
33
33
  it "instructs all calls to shutdown" do
34
- call = Asterisk::Call.new 'foo', subject
34
+ call = Asterisk::Call.new 'foo', subject, ami_client, connection
35
35
  call.async.should_receive(:shutdown).once
36
36
  subject.register_call call
37
37
  subject.shutdown
@@ -84,7 +84,7 @@ module Punchblock
84
84
  describe '#register_call' do
85
85
  let(:call_id) { 'abc123' }
86
86
  let(:channel) { 'SIP/foo' }
87
- let(:call) { Translator::Asterisk::Call.new channel, subject }
87
+ let(:call) { Translator::Asterisk::Call.new channel, subject, ami_client, connection }
88
88
 
89
89
  before do
90
90
  call.stub(:id).and_return call_id
@@ -103,7 +103,7 @@ module Punchblock
103
103
  describe '#deregister_call' do
104
104
  let(:call_id) { 'abc123' }
105
105
  let(:channel) { 'SIP/foo' }
106
- let(:call) { Translator::Asterisk::Call.new channel, subject }
106
+ let(:call) { Translator::Asterisk::Call.new channel, subject, ami_client, connection }
107
107
 
108
108
  before do
109
109
  call.stub(:id).and_return call_id
@@ -138,7 +138,7 @@ module Punchblock
138
138
  let(:command) { Command::Answer.new.tap { |c| c.target_call_id = call_id } }
139
139
 
140
140
  context "with a known call ID" do
141
- let(:call) { Translator::Asterisk::Call.new 'SIP/foo', subject }
141
+ let(:call) { Translator::Asterisk::Call.new 'SIP/foo', subject, ami_client, connection }
142
142
 
143
143
  before do
144
144
  command.request!
@@ -165,8 +165,8 @@ module Punchblock
165
165
  let(:call_id) { dial_command.response.id }
166
166
 
167
167
  before do
168
+ subject.async.should_receive(:execute_global_command)
168
169
  subject.execute_command dial_command
169
- ami_client.as_null_object
170
170
  end
171
171
 
172
172
  it 'sends an error in response to the command' do
@@ -191,11 +191,10 @@ module Punchblock
191
191
 
192
192
  context "for an incoming call which began executing but crashed" do
193
193
  let :ami_event do
194
- RubyAMI::Event.new('AsyncAGI').tap do |e|
195
- e['SubEvent'] = "Start"
196
- e['Channel'] = "SIP/1234-00000000"
197
- e['Env'] = "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
198
- end
194
+ RubyAMI::Event.new 'AsyncAGI',
195
+ 'SubEvent' => "Start",
196
+ 'Channel' => "SIP/1234-00000000",
197
+ 'Env' => "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
199
198
  end
200
199
 
201
200
  let(:call) { subject.call_for_channel('SIP/1234-00000000') }
@@ -235,7 +234,7 @@ module Punchblock
235
234
  end
236
235
 
237
236
  describe '#execute_component_command' do
238
- let(:call) { Translator::Asterisk::Call.new 'SIP/foo', subject }
237
+ let(:call) { Translator::Asterisk::Call.new 'SIP/foo', subject, ami_client, connection }
239
238
  let(:component_node) { Component::Output.new }
240
239
  let(:component) { Translator::Asterisk::Component::Output.new(component_node, call) }
241
240
 
@@ -272,7 +271,7 @@ module Punchblock
272
271
 
273
272
  before do
274
273
  command.request!
275
- ami_client.as_null_object
274
+ ami_client.stub(:send_action).and_return RubyAMI::Response.new
276
275
  end
277
276
 
278
277
  it 'should be able to look up the call by channel ID' do
@@ -297,13 +296,13 @@ module Punchblock
297
296
  let(:mock_action) { stub('Asterisk::Component::Asterisk::AMIAction').as_null_object }
298
297
 
299
298
  it 'should create a component actor and execute it asynchronously' do
300
- Asterisk::Component::Asterisk::AMIAction.should_receive(:new).once.with(command, subject).and_return mock_action
299
+ Asterisk::Component::Asterisk::AMIAction.should_receive(:new).once.with(command, subject, ami_client).and_return mock_action
301
300
  mock_action.async.should_receive(:execute).once
302
301
  subject.execute_global_command command
303
302
  end
304
303
 
305
304
  it 'registers the component' do
306
- Asterisk::Component::Asterisk::AMIAction.should_receive(:new).once.with(command, subject).and_return mock_action
305
+ Asterisk::Component::Asterisk::AMIAction.should_receive(:new).once.with(command, subject, ami_client).and_return mock_action
307
306
  subject.wrapped_object.should_receive(:register_component).with mock_action
308
307
  subject.execute_global_command command
309
308
  end
@@ -331,12 +330,11 @@ module Punchblock
331
330
 
332
331
  describe '#handle_ami_event' do
333
332
  let :ami_event do
334
- RubyAMI::Event.new('Newchannel').tap do |e|
335
- e['Channel'] = "SIP/101-3f3f"
336
- e['State'] = "Ring"
337
- e['Callerid'] = "101"
338
- e['Uniqueid'] = "1094154427.10"
339
- end
333
+ RubyAMI::Event.new 'Newchannel',
334
+ 'Channel' => "SIP/101-3f3f",
335
+ 'State' => "Ring",
336
+ 'Callerid' => "101",
337
+ 'Uniqueid' => "1094154427.10"
340
338
  end
341
339
 
342
340
  let :expected_pb_event do
@@ -362,30 +360,19 @@ module Punchblock
362
360
  describe 'with a FullyBooted event' do
363
361
  let(:ami_event) { RubyAMI::Event.new 'FullyBooted' }
364
362
 
365
- context 'once' do
366
- it 'does not send anything to the connection' do
367
- subject.connection.should_receive(:handle_event).never
368
- subject.handle_ami_event ami_event
369
- end
370
- end
371
-
372
- context 'twice' do
373
- it 'sends a connected event to the event handler' do
374
- subject.connection.should_receive(:handle_event).once.with Connection::Connected.new
375
- subject.wrapped_object.should_receive(:run_at_fully_booted).once
376
- subject.handle_ami_event ami_event
377
- subject.handle_ami_event ami_event
378
- end
363
+ it 'sends a connected event to the event handler' do
364
+ subject.connection.should_receive(:handle_event).once.with Connection::Connected.new
365
+ subject.wrapped_object.should_receive(:run_at_fully_booted).once
366
+ subject.handle_ami_event ami_event
379
367
  end
380
368
  end
381
369
 
382
370
  describe 'with an AsyncAGI Start event' do
383
371
  let :ami_event do
384
- RubyAMI::Event.new('AsyncAGI').tap do |e|
385
- e['SubEvent'] = "Start"
386
- e['Channel'] = "SIP/1234-00000000"
387
- e['Env'] = "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
388
- end
372
+ RubyAMI::Event.new 'AsyncAGI',
373
+ 'SubEvent' => "Start",
374
+ 'Channel' => "SIP/1234-00000000",
375
+ 'Env' => "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
389
376
  end
390
377
 
391
378
  before { subject.wrapped_object.stub :handle_pb_event }
@@ -428,7 +415,7 @@ module Punchblock
428
415
  end
429
416
 
430
417
  context 'if a call already exists for a matching channel' do
431
- let(:call) { Asterisk::Call.new "SIP/1234-00000000", subject }
418
+ let(:call) { Asterisk::Call.new "SIP/1234-00000000", subject, ami_client, connection }
432
419
 
433
420
  before do
434
421
  subject.register_call call
@@ -442,11 +429,10 @@ module Punchblock
442
429
 
443
430
  context "for a 'h' extension" do
444
431
  let :ami_event do
445
- RubyAMI::Event.new('AsyncAGI').tap do |e|
446
- e['SubEvent'] = "Start"
447
- e['Channel'] = "SIP/1234-00000000"
448
- e['Env'] = "agi_extension%3A%20h%0A%0A"
449
- end
432
+ RubyAMI::Event.new 'AsyncAGI',
433
+ 'SubEvent' => "Start",
434
+ 'Channel' => "SIP/1234-00000000",
435
+ 'Env' => "agi_extension%3A%20h%0A%0A"
450
436
  end
451
437
 
452
438
  it "should not create a new call" do
@@ -462,11 +448,10 @@ module Punchblock
462
448
 
463
449
  context "for a 'Kill' type" do
464
450
  let :ami_event do
465
- RubyAMI::Event.new('AsyncAGI').tap do |e|
466
- e['SubEvent'] = "Start"
467
- e['Channel'] = "SIP/1234-00000000"
468
- e['Env'] = "agi_type%3A%20Kill%0A%0A"
469
- end
451
+ RubyAMI::Event.new 'AsyncAGI',
452
+ 'SubEvent' => "Start",
453
+ 'Channel' => "SIP/1234-00000000",
454
+ 'Env' => "agi_type%3A%20Kill%0A%0A"
470
455
  end
471
456
 
472
457
  it "should not create a new call" do
@@ -483,13 +468,12 @@ module Punchblock
483
468
 
484
469
  describe 'with a VarSet event including a punchblock_call_id' do
485
470
  let :ami_event do
486
- RubyAMI::Event.new('VarSet').tap do |e|
487
- e["Privilege"] = "dialplan,all"
488
- e["Channel"] = "SIP/1234-00000000"
489
- e["Variable"] = "punchblock_call_id"
490
- e["Value"] = call_id
491
- e["Uniqueid"] = "1326210224.0"
492
- end
471
+ RubyAMI::Event.new 'VarSet',
472
+ "Privilege" => "dialplan,all",
473
+ "Channel" => "SIP/1234-00000000",
474
+ "Variable" => "punchblock_call_id",
475
+ "Value" => call_id,
476
+ "Uniqueid" => "1326210224.0"
493
477
  end
494
478
 
495
479
  before do
@@ -536,18 +520,17 @@ module Punchblock
536
520
 
537
521
  describe 'with an AMI event for a known channel' do
538
522
  let :ami_event do
539
- RubyAMI::Event.new('Hangup').tap do |e|
540
- e['Uniqueid'] = "1320842458.8"
541
- e['Calleridnum'] = "5678"
542
- e['Calleridname'] = "Jane Smith"
543
- e['Cause'] = "0"
544
- e['Cause-txt'] = "Unknown"
545
- e['Channel'] = "SIP/1234-00000000"
546
- end
523
+ RubyAMI::Event.new 'Hangup',
524
+ 'Uniqueid' => "1320842458.8",
525
+ 'Calleridnum' => "5678",
526
+ 'Calleridname' => "Jane Smith",
527
+ 'Cause' => "0",
528
+ 'Cause-txt' => "Unknown",
529
+ 'Channel' => "SIP/1234-00000000"
547
530
  end
548
531
 
549
532
  let(:call) do
550
- Asterisk::Call.new "SIP/1234-00000000", subject, "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
533
+ Asterisk::Call.new "SIP/1234-00000000", subject, ami_client, connection, "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
551
534
  end
552
535
 
553
536
  before do
@@ -561,17 +544,16 @@ module Punchblock
561
544
 
562
545
  context 'with a Channel1 and Channel2 specified on the event' do
563
546
  let :ami_event do
564
- RubyAMI::Event.new('BridgeAction').tap do |e|
565
- e['Privilege'] = "call,all"
566
- e['Response'] = "Success"
567
- e['Channel1'] = "SIP/1234-00000000"
568
- e['Channel2'] = "SIP/5678-00000000"
569
- end
547
+ RubyAMI::Event.new 'BridgeAction',
548
+ 'Privilege' => "call,all",
549
+ 'Response' => "Success",
550
+ 'Channel1' => "SIP/1234-00000000",
551
+ 'Channel2' => "SIP/5678-00000000"
570
552
  end
571
553
 
572
554
  context 'with calls for those channels' do
573
555
  let(:call2) do
574
- Asterisk::Call.new "SIP/5678-00000000", subject, "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
556
+ Asterisk::Call.new "SIP/5678-00000000", subject, ami_client, connection, "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
575
557
  end
576
558
 
577
559
  before { subject.register_call call2 }
@@ -587,25 +569,23 @@ module Punchblock
587
569
 
588
570
  describe 'with an event for a channel with Bridge and special statuses appended' do
589
571
  let :ami_event do
590
- RubyAMI::Event.new('AGIExec').tap do |e|
591
- e['SubEvent'] = "End"
592
- e['Channel'] = "Bridge/SIP/1234-00000000<ZOMBIE>"
593
- end
572
+ RubyAMI::Event.new 'AGIExec',
573
+ 'SubEvent' => "End",
574
+ 'Channel' => "Bridge/SIP/1234-00000000<ZOMBIE>"
594
575
  end
595
576
 
596
577
  let :ami_event2 do
597
- RubyAMI::Event.new('Hangup').tap do |e|
598
- e['Uniqueid'] = "1320842458.8"
599
- e['Calleridnum'] = "5678"
600
- e['Calleridname'] = "Jane Smith"
601
- e['Cause'] = "0"
602
- e['Cause-txt'] = "Unknown"
603
- e['Channel'] = "Bridge/SIP/1234-00000000<ZOMBIE>"
604
- end
578
+ RubyAMI::Event.new 'Hangup',
579
+ 'Uniqueid' => "1320842458.8",
580
+ 'Calleridnum' => "5678",
581
+ 'Calleridname' => "Jane Smith",
582
+ 'Cause' => "0",
583
+ 'Cause-txt' => "Unknown",
584
+ 'Channel' => "Bridge/SIP/1234-00000000<ZOMBIE>"
605
585
  end
606
586
 
607
587
  let(:call) do
608
- Asterisk::Call.new "SIP/1234-00000000", subject, "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
588
+ Asterisk::Call.new "SIP/1234-00000000", subject, ami_client, connection, "agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F1234-00000000%0Aagi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201320835995.0%0Aagi_version%3A%201.8.4.1%0Aagi_callerid%3A%205678%0Aagi_calleridname%3A%20Jane%20Smith%0Aagi_callingpres%3A%200%0Aagi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0Aagi_dnid%3A%201000%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20default%0Aagi_extension%3A%201000%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0Aagi_accountcode%3A%20%0Aagi_threadid%3A%204366221312%0A%0A"
609
589
  end
610
590
 
611
591
  before do
@@ -623,41 +603,34 @@ module Punchblock
623
603
  end
624
604
 
625
605
  end
626
- end#handle_ami_event
627
-
628
- describe '#send_ami_action' do
629
- it 'should send the action to the AMI client' do
630
- ami_client.should_receive(:send_action).once.with 'foo', :foo => :bar
631
- subject.send_ami_action 'foo', :foo => :bar
632
- end
633
606
  end
634
607
 
635
608
  describe '#run_at_fully_booted' do
636
609
  let(:broken_path) { "/this/is/not/a/valid/path" }
637
610
 
638
611
  let(:passed_show) do
639
- OpenStruct.new({:text_body => "[ Context 'adhearsion-redirect' created by 'pbx_config' ]\n '1' => 1. AGI(agi:async)[pbx_config]\n\n-= 1 extension (1 priority) in 1 context. =-"})
612
+ OpenStruct.new text_body: "[ Context 'adhearsion-redirect' created by 'pbx_config' ]\n '1' => 1. AGI(agi:async)[pbx_config]\n\n-= 1 extension (1 priority) in 1 context. =-"
640
613
  end
641
614
 
642
615
  let(:failed_show) do
643
- OpenStruct.new({:text_body => "There is no existence of 'adhearsion-redirect' context\nCommand 'dialplan show adhearsion-redirect' failed."})
616
+ OpenStruct.new text_body: "There is no existence of 'adhearsion-redirect' context\nCommand 'dialplan show adhearsion-redirect' failed."
644
617
  end
645
618
 
646
619
  it 'should send the redirect extension Command to the AMI client' do
647
620
  ami_client.should_receive(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
648
- ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}")
621
+ ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").and_return(passed_show)
649
622
  subject.run_at_fully_booted
650
623
  end
651
624
 
652
625
  it 'should check the context for existence and do nothing if it is there' do
653
626
  ami_client.should_receive(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
654
- ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").and_yield(passed_show)
627
+ ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").and_return(passed_show)
655
628
  subject.run_at_fully_booted
656
629
  end
657
630
 
658
631
  it 'should check the context for existence and log an error if it is not there' do
659
632
  ami_client.should_receive(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
660
- ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").and_yield(failed_show)
633
+ ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").and_return(failed_show)
661
634
  Punchblock.logger.should_receive(:error).once.with("Punchblock failed to add the #{Asterisk::REDIRECT_EXTENSION} extension to the #{Asterisk::REDIRECT_CONTEXT} context. Please add a [#{Asterisk::REDIRECT_CONTEXT}] entry to your dialplan.")
662
635
  subject.run_at_fully_booted
663
636
  end
@@ -665,7 +638,7 @@ module Punchblock
665
638
  it 'should check the recording directory for existence' do
666
639
  stub_const('Punchblock::Translator::Asterisk::Component::Record::RECORDING_BASE_PATH', broken_path)
667
640
  ami_client.should_receive(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
668
- ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}")
641
+ ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").and_return(passed_show)
669
642
  Punchblock.logger.should_receive(:warn).once.with("Recordings directory #{broken_path} does not exist. Recording might not work. This warning can be ignored if Adhearsion is running on a separate machine than Asterisk. See http://adhearsion.com/docs/call-controllers#recording")
670
643
  subject.run_at_fully_booted
671
644
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: punchblock
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.2
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Goecke
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-04-19 00:00:00.000000000 Z
13
+ date: 2013-05-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: niceogiri
@@ -136,20 +136,14 @@ dependencies:
136
136
  requirements:
137
137
  - - ~>
138
138
  - !ruby/object:Gem::Version
139
- version: '1.2'
140
- - - '>='
141
- - !ruby/object:Gem::Version
142
- version: 1.2.1
139
+ version: '2.0'
143
140
  type: :runtime
144
141
  prerelease: false
145
142
  version_requirements: !ruby/object:Gem::Requirement
146
143
  requirements:
147
144
  - - ~>
148
145
  - !ruby/object:Gem::Version
149
- version: '1.2'
150
- - - '>='
151
- - !ruby/object:Gem::Version
152
- version: 1.2.1
146
+ version: '2.0'
153
147
  - !ruby/object:Gem::Dependency
154
148
  name: ruby_fs
155
149
  requirement: !ruby/object:Gem::Requirement
@@ -381,6 +375,7 @@ files:
381
375
  - lib/punchblock/ref.rb
382
376
  - lib/punchblock/translator.rb
383
377
  - lib/punchblock/translator/asterisk.rb
378
+ - lib/punchblock/translator/asterisk/agi_command.rb
384
379
  - lib/punchblock/translator/asterisk/call.rb
385
380
  - lib/punchblock/translator/asterisk/component.rb
386
381
  - lib/punchblock/translator/asterisk/component/asterisk.rb