punchblock 2.4.2 → 2.5.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4cf351841230c7cb7a3c6004a3a1dabb79f203df
4
- data.tar.gz: 46911f3a2bd9e94791ea7506396b3e0e8dc8c9a7
3
+ metadata.gz: b468b4ccd6ae157d9309dd8daf2462f6a3c83a26
4
+ data.tar.gz: 2c60dd9989e3116bb0e3a57271fe813db7ab746a
5
5
  SHA512:
6
- metadata.gz: 7d625a9dede87541c2d9d49b5769415940f0fe0db4c90c6174387f8f854f00cdc8134f3e99295b1694d2b9e9257ae590dcef879fd64ff72a4231657cf1c51e5f
7
- data.tar.gz: 5f33fbb9b113bcc8d6b34466ef4cfad0cab6badbdcb35739498f7c632e56404865d3b8bd8983fe4e38a40f7152e2916f4380b0be85ccef36c633b667fbc96532
6
+ metadata.gz: 9d67fd215f169976483231ed2228ed7f6005142a10c686eebe6ee6968f84e813cea80675921e5c66dc59e2aef2024502782adbe766204803849295bc21221030
7
+ data.tar.gz: 37f3f5f6083f2e1123246a7324c9612bd8245b25470adf4024144f9478421d27a65ab9cb23fd89cfa24c96990ae0af6ae64c1e7a335aa71b01c3e5200a153e26
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # [develop](https://github.com/adhearsion/punchblock)
2
2
 
3
+ # [v2.5.0](https://github.com/adhearsion/punchblock/compare/v2.4.2...v2.5.0) - [2014-03-05](https://rubygems.org/gems/punchblock/versions/2.5.0)
4
+ * Feature: Support language, sensitivity and minimum confidence on UniMRCP-based ASR on Asterisk
5
+ * Feature: Support sending messages to calls (eg SIP MESSAGE) on Asterisk
6
+
3
7
  # [v2.4.2](https://github.com/adhearsion/punchblock/compare/v2.4.0...v2.4.2) - [2014-03-04](https://rubygems.org/gems/punchblock/versions/2.4.2)
4
8
  * Bugfix: Rayo events should not include their timestamp in comparison. This is not useful in applications, and makes testing more difficult.
5
9
 
data/Guardfile CHANGED
@@ -1,9 +1,13 @@
1
- guard 'rspec', :cli => '--format documentation' do
2
- watch(%r{^spec/.+_spec\.rb$})
3
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
- watch('spec/spec_helper.rb') { "spec/" }
1
+ group 'rspec' do
2
+ guard 'rspec', :cli => '--format documentation' do
3
+ watch(%r{^spec/.+_spec\.rb$})
4
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
5
+ watch('spec/spec_helper.rb') { "spec/" }
6
+ end
5
7
  end
6
8
 
7
- guard 'rake', task: 'benchmark', run_on_start: false do
8
- watch(/benchmarks\/*/)
9
+ group 'benchmarks' do
10
+ guard 'rake', task: 'benchmark', run_on_start: false do
11
+ watch(/benchmarks\/*/)
12
+ end
9
13
  end
@@ -29,6 +29,10 @@ module Punchblock
29
29
  translator.async.execute_command command, options
30
30
  end
31
31
 
32
+ def send_message(*args)
33
+ translator.send_message *args
34
+ end
35
+
32
36
  def handle_event(event)
33
37
  event_handler.call event
34
38
  end
@@ -98,6 +98,11 @@ module Punchblock
98
98
  connection.handle_event event
99
99
  end
100
100
 
101
+ def send_message(call_id, domain, body, options = {})
102
+ call = call_with_id call_id
103
+ call.send_message body if call
104
+ end
105
+
101
106
  def execute_command(command, options = {})
102
107
  command.request!
103
108
 
@@ -159,6 +159,11 @@ module Punchblock
159
159
  trigger_handler :ami, ami_event
160
160
  end
161
161
 
162
+ def send_message(body)
163
+ execute_agi_command 'EXEC SendText', body
164
+ rescue
165
+ end
166
+
162
167
  def execute_command(command)
163
168
  if @block_commands
164
169
  command.response = ProtocolError.new.setup :item_not_found, "Could not find a call with ID #{id}", id
@@ -46,6 +46,9 @@ module Punchblock
46
46
  opts[:nit] = @initial_timeout if @initial_timeout > -1
47
47
  opts[:dit] = @inter_digit_timeout if @inter_digit_timeout > -1
48
48
  opts[:dttc] = input_node.terminator if input_node.terminator
49
+ opts[:spl] = input_node.language if input_node.language
50
+ opts[:ct] = input_node.min_confidence if input_node.min_confidence
51
+ opts[:sl] = input_node.sensitivity if input_node.sensitivity
49
52
  yield opts
50
53
  end
51
54
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Punchblock
4
- VERSION = "2.4.2"
4
+ VERSION = "2.5.0"
5
5
  end
@@ -97,6 +97,13 @@ module Punchblock
97
97
  subject.new_call_uri.should == 'foobar'
98
98
  end
99
99
  end
100
+
101
+ describe '#send_message' do
102
+ it 'passes the message to the translator for dispatch' do
103
+ subject.translator.should_receive(:send_message).once.with(:foo)
104
+ subject.send_message :foo
105
+ end
106
+ end
100
107
  end
101
108
  end
102
109
  end
@@ -1099,6 +1099,22 @@ module Punchblock
1099
1099
  end
1100
1100
  end
1101
1101
 
1102
+ describe '#send_message' do
1103
+ let(:body) { 'Hello world' }
1104
+
1105
+ it "should invoke SendText" do
1106
+ subject.should_receive(:execute_agi_command).with('EXEC SendText', body).and_return code: 200
1107
+ subject.send_message body
1108
+ end
1109
+
1110
+ context "when an AMI error is received" do
1111
+ it "is silently ignored" do
1112
+ subject.should_receive(:execute_agi_command).with('EXEC SendText', body).and_raise RubyAMI::Error.new.tap { |e| e.message = 'Call not found' }
1113
+ subject.send_message body
1114
+ end
1115
+ end
1116
+ end
1117
+
1102
1118
  describe '#execute_command' do
1103
1119
  before do
1104
1120
  command.request!
@@ -576,11 +576,43 @@ module Punchblock
576
576
  end
577
577
 
578
578
  describe 'Input#sensitivity' do
579
- pending
579
+ context 'a string' do
580
+ let(:input_command_opts) { { sensitivity: '0.2' } }
581
+
582
+ it 'should pass the sl option to MRCPRecog' do
583
+ expect_mrcprecog_with_options(/sl=0.2/)
584
+ subject.execute
585
+ end
586
+ end
587
+
588
+ context 'unset' do
589
+ let(:input_command_opts) { { sensitivity: nil } }
590
+
591
+ it 'should not pass any options to MRCPRecog' do
592
+ expect_mrcprecog_with_options(//)
593
+ subject.execute
594
+ end
595
+ end
580
596
  end
581
597
 
582
598
  describe 'Input#min-confidence' do
583
- pending
599
+ context 'a string' do
600
+ let(:input_command_opts) { { min_confidence: '0.5' } }
601
+
602
+ it 'should pass the ct option to MRCPRecog' do
603
+ expect_mrcprecog_with_options(/ct=0.5/)
604
+ subject.execute
605
+ end
606
+ end
607
+
608
+ context 'unset' do
609
+ let(:input_command_opts) { { min_confidence: nil } }
610
+
611
+ it 'should not pass any options to MRCPRecog' do
612
+ expect_mrcprecog_with_options(//)
613
+ subject.execute
614
+ end
615
+ end
584
616
  end
585
617
 
586
618
  describe 'Input#max-silence' do
@@ -592,7 +624,23 @@ module Punchblock
592
624
  end
593
625
 
594
626
  describe 'Input#language' do
595
- pending
627
+ context 'a string' do
628
+ let(:input_command_opts) { { language: 'en-GB' } }
629
+
630
+ it 'should pass the spl option to MRCPRecog' do
631
+ expect_mrcprecog_with_options(/spl=en-GB/)
632
+ subject.execute
633
+ end
634
+ end
635
+
636
+ context 'unset' do
637
+ let(:input_command_opts) { { language: nil } }
638
+
639
+ it 'should not pass any options to MRCPRecog' do
640
+ expect_mrcprecog_with_options(//)
641
+ subject.execute
642
+ end
643
+ end
596
644
  end
597
645
 
598
646
  describe "#execute_command" do
@@ -568,11 +568,43 @@ module Punchblock
568
568
  end
569
569
 
570
570
  describe 'Input#sensitivity' do
571
- pending
571
+ context 'a string' do
572
+ let(:input_command_opts) { { sensitivity: '0.2' } }
573
+
574
+ it 'should pass the sl option to SynthAndRecog' do
575
+ expect_synthandrecog_with_options(/sl=0.2/)
576
+ subject.execute
577
+ end
578
+ end
579
+
580
+ context 'unset' do
581
+ let(:input_command_opts) { { sensitivity: nil } }
582
+
583
+ it 'should not pass any options to SynthAndRecog' do
584
+ expect_synthandrecog_with_options(//)
585
+ subject.execute
586
+ end
587
+ end
572
588
  end
573
589
 
574
590
  describe 'Input#min-confidence' do
575
- pending
591
+ context 'a string' do
592
+ let(:input_command_opts) { { min_confidence: '0.5' } }
593
+
594
+ it 'should pass the ct option to SynthAndRecog' do
595
+ expect_synthandrecog_with_options(/ct=0.5/)
596
+ subject.execute
597
+ end
598
+ end
599
+
600
+ context 'unset' do
601
+ let(:input_command_opts) { { min_confidence: nil } }
602
+
603
+ it 'should not pass any options to SynthAndRecog' do
604
+ expect_synthandrecog_with_options(//)
605
+ subject.execute
606
+ end
607
+ end
576
608
  end
577
609
 
578
610
  describe 'Input#max-silence' do
@@ -584,7 +616,23 @@ module Punchblock
584
616
  end
585
617
 
586
618
  describe 'Input#language' do
587
- pending
619
+ context 'a string' do
620
+ let(:input_command_opts) { { language: 'en-GB' } }
621
+
622
+ it 'should pass the spl option to SynthAndRecog' do
623
+ expect_synthandrecog_with_options(/spl=en-GB/)
624
+ subject.execute
625
+ end
626
+ end
627
+
628
+ context 'unset' do
629
+ let(:input_command_opts) { { language: nil } }
630
+
631
+ it 'should not pass any options to SynthAndRecog' do
632
+ expect_synthandrecog_with_options(//)
633
+ subject.execute
634
+ end
635
+ end
588
636
  end
589
637
 
590
638
  describe "#execute_command" do
@@ -59,6 +59,29 @@ module Punchblock
59
59
  end
60
60
  end
61
61
 
62
+ describe '#send_message' do
63
+ let(:call_id) { 'abc123' }
64
+ let(:body) { 'hello world' }
65
+ let(:call) { Translator::Asterisk::Call.new 'SIP/foo', subject, ami_client, connection }
66
+
67
+ before do
68
+ call.stub(:id).and_return call_id
69
+ subject.register_call call
70
+ end
71
+
72
+ it 'sends the command to the call for execution' do
73
+ call.should_receive(:send_message).once.with body
74
+ subject.send_message call_id, 'example.com', body, subject: 'stuff'
75
+ end
76
+
77
+ context "when the call doesn't exist" do
78
+ it "should not crash the translator" do
79
+ subject.send_message 'oops', 'example.com', body, subject: 'stuff'
80
+ subject.should be_alive
81
+ end
82
+ end
83
+ end
84
+
62
85
  describe '#register_call' do
63
86
  let(:call_id) { 'abc123' }
64
87
  let(:channel) { 'SIP/foo' }
@@ -235,10 +258,11 @@ module Punchblock
235
258
  subject.execute_global_command earlier_command
236
259
 
237
260
  @first_call = subject.call_with_id(requested_uri)
261
+
262
+ subject.execute_global_command command
238
263
  end
239
264
 
240
265
  it "should set the command response to a conflict error" do
241
- subject.execute_global_command command
242
266
  command.response(0.1).should == ProtocolError.new.setup(:conflict, 'Call ID already in use')
243
267
  end
244
268
 
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: 2.4.2
4
+ version: 2.5.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: 2014-03-04 00:00:00.000000000 Z
13
+ date: 2014-03-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri