punchblock 1.5.3 → 1.6.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.
- data/CHANGELOG.md +6 -0
- data/lib/punchblock/component/asterisk/ami/action.rb +2 -2
- data/lib/punchblock/component/input.rb +5 -5
- data/lib/punchblock/component/output.rb +4 -4
- data/lib/punchblock/component/record.rb +3 -3
- data/lib/punchblock/event/asterisk/ami/event.rb +1 -1
- data/lib/punchblock/has_headers.rb +1 -1
- data/lib/punchblock/key_value_pair_node.rb +2 -3
- data/lib/punchblock/translator/asterisk/call.rb +14 -2
- data/lib/punchblock/translator/freeswitch/call.rb +3 -0
- data/lib/punchblock/version.rb +1 -1
- data/spec/punchblock/command/dial_spec.rb +4 -2
- data/spec/punchblock/component/asterisk/ami/action_spec.rb +9 -9
- data/spec/punchblock/event/answered_spec.rb +3 -3
- data/spec/punchblock/event/asterisk/ami/event_spec.rb +1 -1
- data/spec/punchblock/event/end_spec.rb +3 -3
- data/spec/punchblock/event/offer_spec.rb +3 -3
- data/spec/punchblock/event/ringing_spec.rb +3 -3
- data/spec/punchblock/header_spec.rb +2 -37
- data/spec/punchblock/translator/asterisk/call_spec.rb +21 -0
- data/spec/punchblock/translator/freeswitch/call_spec.rb +11 -0
- data/spec/spec_helper.rb +11 -22
- metadata +4 -4
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# [develop](https://github.com/adhearsion/punchblock)
|
|
2
2
|
|
|
3
|
+
# [v1.6.0](https://github.com/adhearsion/punchblock/compare/v1.5.3...v1.6.0) - [2012-11-14](https://rubygems.org/gems/punchblock/versions/1.6.0)
|
|
4
|
+
* Feature: Set dial headers on FreeSWITCH originate command (SIP only)
|
|
5
|
+
* Feature: Set dial headers on Asterisk originate command (SIP only)
|
|
6
|
+
* Bugfix: Headers were being re-written downcased and with underscores
|
|
7
|
+
* Bugfix: Ensure all numeric component attributes are written as the correct type
|
|
8
|
+
|
|
3
9
|
# [v1.5.3](https://github.com/adhearsion/punchblock/compare/v1.5.2...v1.5.3) - [2012-11-01](https://rubygems.org/gems/punchblock/versions/1.5.3)
|
|
4
10
|
* Doc: Add link to docs for unrenderable doc error
|
|
5
11
|
|
|
@@ -28,7 +28,7 @@ module Punchblock
|
|
|
28
28
|
#
|
|
29
29
|
def params_hash
|
|
30
30
|
params.inject({}) do |hash, param|
|
|
31
|
-
hash[param.name] = param.value
|
|
31
|
+
hash[param.name.downcase.gsub('-', '_').to_sym] = param.value
|
|
32
32
|
hash
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -104,7 +104,7 @@ module Punchblock
|
|
|
104
104
|
#
|
|
105
105
|
def attributes_hash
|
|
106
106
|
attributes.inject({}) do |hash, attribute|
|
|
107
|
-
hash[attribute.name] = attribute.value
|
|
107
|
+
hash[attribute.name.downcase.gsub('-', '_').to_sym] = attribute.value
|
|
108
108
|
hash
|
|
109
109
|
end
|
|
110
110
|
end
|
|
@@ -48,7 +48,7 @@ module Punchblock
|
|
|
48
48
|
# @param [Integer] other the amount of time in milliseconds that an input command will wait until considered that a silence becomes a NO-MATCH
|
|
49
49
|
#
|
|
50
50
|
def max_silence=(other)
|
|
51
|
-
write_attr :'max-silence', other
|
|
51
|
+
write_attr :'max-silence', other.to_i
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
##
|
|
@@ -62,7 +62,7 @@ module Punchblock
|
|
|
62
62
|
# @param [Float] min_confidence with which to consider a response acceptable
|
|
63
63
|
#
|
|
64
64
|
def min_confidence=(min_confidence)
|
|
65
|
-
write_attr 'min-confidence', min_confidence
|
|
65
|
+
write_attr 'min-confidence', min_confidence.to_f
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
##
|
|
@@ -118,7 +118,7 @@ module Punchblock
|
|
|
118
118
|
# @param [Float] other Indicates how sensitive the interpreter should be to loud versus quiet input. Higher values represent greater sensitivity.
|
|
119
119
|
#
|
|
120
120
|
def sensitivity=(other)
|
|
121
|
-
write_attr :sensitivity, other
|
|
121
|
+
write_attr :sensitivity, other.to_f
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
##
|
|
@@ -132,7 +132,7 @@ module Punchblock
|
|
|
132
132
|
# @param [Integer] timeout Indicates the amount of time preceding input which may expire before a timeout is triggered.
|
|
133
133
|
#
|
|
134
134
|
def initial_timeout=(other)
|
|
135
|
-
write_attr :'initial-timeout', other
|
|
135
|
+
write_attr :'initial-timeout', other.to_f
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
##
|
|
@@ -146,7 +146,7 @@ module Punchblock
|
|
|
146
146
|
# @param [Integer] timeout Indicates (in the case of DTMF input) the amount of time between input digits which may expire before a timeout is triggered.
|
|
147
147
|
#
|
|
148
148
|
def inter_digit_timeout=(other)
|
|
149
|
-
write_attr :'inter-digit-timeout', other
|
|
149
|
+
write_attr :'inter-digit-timeout', other.to_i
|
|
150
150
|
end
|
|
151
151
|
|
|
152
152
|
##
|
|
@@ -98,7 +98,7 @@ module Punchblock
|
|
|
98
98
|
# @param [Integer] other Indicates some offset through which the output should be skipped before rendering begins.
|
|
99
99
|
#
|
|
100
100
|
def start_offset=(other)
|
|
101
|
-
write_attr :'start-offset', other
|
|
101
|
+
write_attr :'start-offset', other.to_i
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
##
|
|
@@ -126,7 +126,7 @@ module Punchblock
|
|
|
126
126
|
# @param [Integer] other Indicates the duration of silence that should space repeats of the rendered document.
|
|
127
127
|
#
|
|
128
128
|
def repeat_interval=(other)
|
|
129
|
-
write_attr :'repeat-interval', other
|
|
129
|
+
write_attr :'repeat-interval', other.to_i
|
|
130
130
|
end
|
|
131
131
|
|
|
132
132
|
##
|
|
@@ -140,7 +140,7 @@ module Punchblock
|
|
|
140
140
|
# @param [Integer] other Indicates the number of times the output should be played.
|
|
141
141
|
#
|
|
142
142
|
def repeat_times=(other)
|
|
143
|
-
write_attr :'repeat-times', other
|
|
143
|
+
write_attr :'repeat-times', other.to_i
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
##
|
|
@@ -154,7 +154,7 @@ module Punchblock
|
|
|
154
154
|
# @param [Integer] other Indicates the maximum amount of time for which the output should be allowed to run before being terminated. Includes repeats.
|
|
155
155
|
#
|
|
156
156
|
def max_time=(other)
|
|
157
|
-
write_attr :'max-time', other
|
|
157
|
+
write_attr :'max-time', other.to_i
|
|
158
158
|
end
|
|
159
159
|
|
|
160
160
|
def inspect_attributes
|
|
@@ -41,7 +41,7 @@ module Punchblock
|
|
|
41
41
|
# @param [Integer] timeout Controls the length of a period of silence after callers have spoken to conclude they finished.
|
|
42
42
|
#
|
|
43
43
|
def final_timeout=(timeout)
|
|
44
|
-
write_attr :'final-timeout', timeout
|
|
44
|
+
write_attr :'final-timeout', timeout.to_i
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
##
|
|
@@ -69,7 +69,7 @@ module Punchblock
|
|
|
69
69
|
# @param [Integer] timeout Controls how long the recognizer should wait after the end of the prompt for the caller to speak before sending a Recorder event.
|
|
70
70
|
#
|
|
71
71
|
def initial_timeout=(timeout)
|
|
72
|
-
write_attr :'initial-timeout', timeout
|
|
72
|
+
write_attr :'initial-timeout', timeout.to_i
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
##
|
|
@@ -83,7 +83,7 @@ module Punchblock
|
|
|
83
83
|
# @param [Integer] other Indicates the maximum duration for the recording.
|
|
84
84
|
#
|
|
85
85
|
def max_duration=(other)
|
|
86
|
-
write_attr :'max-duration', other
|
|
86
|
+
write_attr :'max-duration', other.to_i
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
##
|
|
@@ -16,7 +16,6 @@ module KeyValuePairNode
|
|
|
16
16
|
new_node.name = name
|
|
17
17
|
new_node.value = value
|
|
18
18
|
end
|
|
19
|
-
new_node.name = new_node.name.downcase
|
|
20
19
|
end
|
|
21
20
|
end
|
|
22
21
|
end
|
|
@@ -25,13 +24,13 @@ module KeyValuePairNode
|
|
|
25
24
|
# The Header's name
|
|
26
25
|
# @return [Symbol]
|
|
27
26
|
def name
|
|
28
|
-
read_attr
|
|
27
|
+
read_attr :name
|
|
29
28
|
end
|
|
30
29
|
|
|
31
30
|
# Set the Header's name
|
|
32
31
|
# @param [Symbol] name the new name for the param
|
|
33
32
|
def name=(name)
|
|
34
|
-
write_attr :name, name
|
|
33
|
+
write_attr :name, name
|
|
35
34
|
end
|
|
36
35
|
|
|
37
36
|
# The Header's value
|
|
@@ -61,9 +61,9 @@ module Punchblock
|
|
|
61
61
|
:application => 'AGI',
|
|
62
62
|
:data => 'agi:async',
|
|
63
63
|
:channel => channel,
|
|
64
|
-
:callerid => dial_command.from
|
|
65
|
-
:variable => "punchblock_call_id=#{id}"
|
|
64
|
+
:callerid => dial_command.from
|
|
66
65
|
}
|
|
66
|
+
params[:variable] = variable_for_headers dial_command.headers
|
|
67
67
|
params[:timeout] = dial_command.timeout unless dial_command.timeout.nil?
|
|
68
68
|
|
|
69
69
|
originate_action = Punchblock::Component::Asterisk::AMI::Action.new :name => 'Originate',
|
|
@@ -297,6 +297,18 @@ module Punchblock
|
|
|
297
297
|
accumulator
|
|
298
298
|
end
|
|
299
299
|
end
|
|
300
|
+
|
|
301
|
+
def variable_for_headers(headers)
|
|
302
|
+
variables = { :punchblock_call_id => id }
|
|
303
|
+
header_counter = 51
|
|
304
|
+
headers.each do |header|
|
|
305
|
+
variables["SIPADDHEADER#{header_counter}"] = "\"#{header.name}: #{header.value}\""
|
|
306
|
+
header_counter += 1
|
|
307
|
+
end
|
|
308
|
+
variables.inject([]) do |a, (k, v)|
|
|
309
|
+
a << "#{k}=#{v}"
|
|
310
|
+
end.join(',')
|
|
311
|
+
end
|
|
300
312
|
end
|
|
301
313
|
end
|
|
302
314
|
end
|
|
@@ -139,6 +139,9 @@ module Punchblock
|
|
|
139
139
|
options[:origination_caller_id_number] = "'#{cid_number}'" if cid_number.present?
|
|
140
140
|
options[:origination_caller_id_name] = "'#{cid_name}'" if cid_name.present?
|
|
141
141
|
options[:originate_timeout] = dial_command.timeout/1000 if dial_command.timeout
|
|
142
|
+
dial_command.headers.each do |header|
|
|
143
|
+
options["sip_h_#{header.name}"] = "'#{header.value}'"
|
|
144
|
+
end
|
|
142
145
|
opts = options.inject([]) do |a, (k, v)|
|
|
143
146
|
a << "#{k}=#{v}"
|
|
144
147
|
end.join(',')
|
data/lib/punchblock/version.rb
CHANGED
|
@@ -28,8 +28,8 @@ module Punchblock
|
|
|
28
28
|
<<-MESSAGE
|
|
29
29
|
<dial to='tel:+14155551212' from='tel:+13035551212' timeout='30000' xmlns='urn:xmpp:rayo:1'>
|
|
30
30
|
<join call-id="abc123" />
|
|
31
|
-
<header name="
|
|
32
|
-
<header name="
|
|
31
|
+
<header name="X-skill" value="agent" />
|
|
32
|
+
<header name="X-customer-id" value="8877" />
|
|
33
33
|
</dial>
|
|
34
34
|
MESSAGE
|
|
35
35
|
end
|
|
@@ -38,6 +38,8 @@ module Punchblock
|
|
|
38
38
|
|
|
39
39
|
it { should be_instance_of Dial }
|
|
40
40
|
|
|
41
|
+
it_should_behave_like 'event_headers'
|
|
42
|
+
|
|
41
43
|
its(:to) { should be == 'tel:+14155551212' }
|
|
42
44
|
its(:from) { should be == 'tel:+13035551212' }
|
|
43
45
|
its(:timeout) { should be == 30000 }
|
|
@@ -34,14 +34,14 @@ module Punchblock
|
|
|
34
34
|
it_should_behave_like 'event'
|
|
35
35
|
|
|
36
36
|
its(:name) { should be == 'Originate' }
|
|
37
|
-
its(:params) { should be == [Action::Param.new(
|
|
38
|
-
Action::Param.new(
|
|
39
|
-
Action::Param.new(
|
|
40
|
-
Action::Param.new(
|
|
41
|
-
Action::Param.new(
|
|
42
|
-
Action::Param.new(
|
|
43
|
-
Action::Param.new(
|
|
44
|
-
Action::Param.new(
|
|
37
|
+
its(:params) { should be == [Action::Param.new('Channel', 'SIP/101test'),
|
|
38
|
+
Action::Param.new('Context', 'default'),
|
|
39
|
+
Action::Param.new('Exten', '8135551212'),
|
|
40
|
+
Action::Param.new('Priority', '1'),
|
|
41
|
+
Action::Param.new('Callerid', '3125551212'),
|
|
42
|
+
Action::Param.new('Timeout', '30000'),
|
|
43
|
+
Action::Param.new('Variable', 'var1=23|var2=24|var3=25'),
|
|
44
|
+
Action::Param.new('Async', '1')
|
|
45
45
|
]}
|
|
46
46
|
|
|
47
47
|
its(:params_hash) { should be == {:channel => 'SIP/101test',
|
|
@@ -112,7 +112,7 @@ module Punchblock
|
|
|
112
112
|
|
|
113
113
|
its(:name) { should be == :success }
|
|
114
114
|
its(:message) { should be == "Originate successfully queued" }
|
|
115
|
-
its(:attributes) { should be == [Attribute.new(
|
|
115
|
+
its(:attributes) { should be == [Attribute.new('Channel', 'SIP/101-3f3f'), Attribute.new('State', 'Ring')]}
|
|
116
116
|
its(:attributes_hash) { should be == {:channel => 'SIP/101-3f3f', :state => 'Ring'} }
|
|
117
117
|
|
|
118
118
|
describe "when setting options in initializer" do
|
|
@@ -14,8 +14,8 @@ module Punchblock
|
|
|
14
14
|
<<-MESSAGE
|
|
15
15
|
<answered xmlns='urn:xmpp:rayo:1'>
|
|
16
16
|
<!-- Signaling (e.g. SIP) Headers -->
|
|
17
|
-
<header name="
|
|
18
|
-
<header name="
|
|
17
|
+
<header name="X-skill" value="agent" />
|
|
18
|
+
<header name="X-customer-id" value="8877" />
|
|
19
19
|
</answered>
|
|
20
20
|
MESSAGE
|
|
21
21
|
end
|
|
@@ -35,7 +35,7 @@ module Punchblock
|
|
|
35
35
|
Answered.new :headers => { :x_skill => "agent", :x_customer_id => "8877" }
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
it_should_behave_like '
|
|
38
|
+
it_should_behave_like 'command_headers'
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -30,7 +30,7 @@ module Punchblock
|
|
|
30
30
|
it_should_behave_like 'event'
|
|
31
31
|
|
|
32
32
|
its(:name) { should be == 'Newchannel' }
|
|
33
|
-
its(:attributes) { should be == [Event::Attribute.new(
|
|
33
|
+
its(:attributes) { should be == [Event::Attribute.new('Channel', 'SIP/101-3f3f'), Event::Attribute.new('State', 'Ring'), Event::Attribute.new('Callerid', '101'), Event::Attribute.new('Uniqueid', '1094154427.10')]}
|
|
34
34
|
its(:attributes_hash) { should be == {:channel => 'SIP/101-3f3f', :state => 'Ring', :callerid => '101', :uniqueid => '1094154427.10'} }
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -15,8 +15,8 @@ module Punchblock
|
|
|
15
15
|
<end xmlns="urn:xmpp:rayo:1">
|
|
16
16
|
<timeout />
|
|
17
17
|
<!-- Signaling (e.g. SIP) Headers -->
|
|
18
|
-
<header name="
|
|
19
|
-
<header name="
|
|
18
|
+
<header name="X-skill" value="agent" />
|
|
19
|
+
<header name="X-customer-id" value="8877" />
|
|
20
20
|
</end>
|
|
21
21
|
MESSAGE
|
|
22
22
|
end
|
|
@@ -39,7 +39,7 @@ module Punchblock
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
its(:reason) { should be == :hangup }
|
|
42
|
-
it_should_behave_like '
|
|
42
|
+
it_should_behave_like 'command_headers'
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -16,8 +16,8 @@ module Punchblock
|
|
|
16
16
|
to='tel:+18003211212'
|
|
17
17
|
from='tel:+13058881212'>
|
|
18
18
|
<!-- Signaling (e.g. SIP) Headers -->
|
|
19
|
-
<header name="
|
|
20
|
-
<header name="
|
|
19
|
+
<header name="X-skill" value="agent" />
|
|
20
|
+
<header name="X-customer-id" value="8877" />
|
|
21
21
|
</offer>
|
|
22
22
|
MESSAGE
|
|
23
23
|
end
|
|
@@ -40,7 +40,7 @@ module Punchblock
|
|
|
40
40
|
:headers => { :x_skill => "agent", :x_customer_id => "8877" }
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
it_should_behave_like '
|
|
43
|
+
it_should_behave_like 'command_headers'
|
|
44
44
|
|
|
45
45
|
its(:to) { should be == 'tel:+18003211212' }
|
|
46
46
|
its(:from) { should be == 'tel:+13058881212' }
|
|
@@ -14,8 +14,8 @@ module Punchblock
|
|
|
14
14
|
<<-MESSAGE
|
|
15
15
|
<ringing xmlns='urn:xmpp:rayo:1'>
|
|
16
16
|
<!-- Signaling (e.g. SIP) Headers -->
|
|
17
|
-
<header name="
|
|
18
|
-
<header name="
|
|
17
|
+
<header name="X-skill" value="agent" />
|
|
18
|
+
<header name="X-customer-id" value="8877" />
|
|
19
19
|
</ringing>
|
|
20
20
|
MESSAGE
|
|
21
21
|
end
|
|
@@ -35,7 +35,7 @@ module Punchblock
|
|
|
35
35
|
Ringing.new :headers => { :x_skill => "agent", :x_customer_id => "8877" }
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
it_should_behave_like '
|
|
38
|
+
it_should_behave_like 'command_headers'
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -4,43 +4,8 @@ require 'spec_helper'
|
|
|
4
4
|
|
|
5
5
|
module Punchblock
|
|
6
6
|
describe Header do
|
|
7
|
-
|
|
8
|
-
n = parse_stanza "<header name='boo' value='bah' />"
|
|
9
|
-
h = Header.new n.root
|
|
10
|
-
h.name.should be == :boo
|
|
11
|
-
h.value.should be == 'bah'
|
|
12
|
-
end
|
|
7
|
+
let(:element_name) { 'header' }
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
n = Header.new :boo, 'bah'
|
|
16
|
-
n.name.should be == :boo
|
|
17
|
-
n.name = :foo
|
|
18
|
-
n.name.should be == :foo
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "substitutes - for _ on the name attribute when reading" do
|
|
22
|
-
n = parse_stanza "<header name='boo-bah' value='foo' />"
|
|
23
|
-
h = Header.new n.root
|
|
24
|
-
h.name.should be == :boo_bah
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "substitutes _ for - on the name attribute when writing" do
|
|
28
|
-
h = Header.new :boo_bah, 'foo'
|
|
29
|
-
h.to_xml.should be == '<header name="boo-bah" value="foo"/>'
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it 'has a value attribute' do
|
|
33
|
-
n = Header.new :boo, 'en'
|
|
34
|
-
n.value.should be == 'en'
|
|
35
|
-
n.value = 'de'
|
|
36
|
-
n.value.should be == 'de'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it 'can determine equality' do
|
|
40
|
-
a = Header.new :boo, 'bah'
|
|
41
|
-
a.should be == Header.new(:boo, 'bah')
|
|
42
|
-
a.should_not be == Header.new(:bah, 'bah')
|
|
43
|
-
a.should_not be == Header.new(:boo, 'boo')
|
|
44
|
-
end
|
|
9
|
+
it_should_behave_like 'key_value_pairs'
|
|
45
10
|
end
|
|
46
11
|
end # Punchblock
|
|
@@ -215,6 +215,27 @@ module Punchblock
|
|
|
215
215
|
end
|
|
216
216
|
end
|
|
217
217
|
|
|
218
|
+
context 'with headers specified' do
|
|
219
|
+
let :dial_command_options do
|
|
220
|
+
{ :headers => {'X-foo' => 'bar', 'X-doo' => 'dah'} }
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it 'includes the headers in the Originate AMI action' do
|
|
224
|
+
expected_action = Punchblock::Component::Asterisk::AMI::Action.new(:name => 'Originate',
|
|
225
|
+
:params => {
|
|
226
|
+
:async => true,
|
|
227
|
+
:application => 'AGI',
|
|
228
|
+
:data => 'agi:async',
|
|
229
|
+
:channel => 'SIP/1234',
|
|
230
|
+
:callerid => 'sip:foo@bar.com',
|
|
231
|
+
:variable => "punchblock_call_id=#{subject.id},SIPADDHEADER51=\"X-foo: bar\",SIPADDHEADER52=\"X-doo: dah\""
|
|
232
|
+
}).tap { |a| a.request! }
|
|
233
|
+
|
|
234
|
+
translator.expects(:execute_global_command!).once.with expected_action
|
|
235
|
+
subject.dial dial_command
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
218
239
|
it 'sends the call ID as a response to the Dial' do
|
|
219
240
|
subject.dial dial_command
|
|
220
241
|
dial_command.response
|
|
@@ -290,6 +290,17 @@ module Punchblock
|
|
|
290
290
|
end
|
|
291
291
|
end
|
|
292
292
|
|
|
293
|
+
context 'with headers specified' do
|
|
294
|
+
let :dial_command_options do
|
|
295
|
+
{ :headers => {'X-foo' => 'bar', 'X-doo' => 'dah'} }
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
it 'includes the headers in the originate command' do
|
|
299
|
+
stream.expects(:bgapi).once.with "originate {return_ring_ready=true,origination_uuid=#{subject.id},origination_caller_id_number='#{from}',sip_h_X-foo='bar',sip_h_X-doo='dah'}#{to} &park()"
|
|
300
|
+
subject.dial dial_command
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
293
304
|
it 'sends the call ID as a response to the Dial' do
|
|
294
305
|
subject.dial dial_command
|
|
295
306
|
dial_command.response
|
data/spec/spec_helper.rb
CHANGED
|
@@ -55,47 +55,36 @@ shared_examples_for 'command_headers' do
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
shared_examples_for 'event_headers' do
|
|
58
|
-
its(:headers) { should be == [Punchblock::Header.new(
|
|
58
|
+
its(:headers) { should be == [Punchblock::Header.new('X-skill', 'agent'), Punchblock::Header.new('X-customer-id', '8877')]}
|
|
59
59
|
its(:headers_hash) { should be == {:x_skill => 'agent', :x_customer_id => '8877'} }
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
shared_examples_for 'key_value_pairs' do
|
|
63
63
|
it 'will auto-inherit nodes' do
|
|
64
64
|
n = parse_stanza "<#{element_name} name='boo' value='bah' />"
|
|
65
|
-
h =
|
|
66
|
-
h.name.should be ==
|
|
65
|
+
h = described_class.new n.root
|
|
66
|
+
h.name.should be == 'boo'
|
|
67
67
|
h.value.should be == 'bah'
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
it 'has a name attribute' do
|
|
71
|
-
n =
|
|
72
|
-
n.name.should be ==
|
|
71
|
+
n = described_class.new :boo, 'bah'
|
|
72
|
+
n.name.should be == 'boo'
|
|
73
73
|
n.name = :foo
|
|
74
|
-
n.name.should be ==
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "substitutes - for _ on the name attribute when reading" do
|
|
78
|
-
n = parse_stanza "<#{element_name} name='boo-bah' value='foo' />"
|
|
79
|
-
h = class_name.new n.root
|
|
80
|
-
h.name.should be == :boo_bah
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "substitutes _ for - on the name attribute when writing" do
|
|
84
|
-
h = class_name.new :boo_bah, 'foo'
|
|
85
|
-
h.to_xml.should be == "<#{element_name} name=\"boo-bah\" value=\"foo\"/>"
|
|
74
|
+
n.name.should be == 'foo'
|
|
86
75
|
end
|
|
87
76
|
|
|
88
77
|
it 'has a value param' do
|
|
89
|
-
n =
|
|
78
|
+
n = described_class.new :boo, 'en'
|
|
90
79
|
n.value.should be == 'en'
|
|
91
80
|
n.value = 'de'
|
|
92
81
|
n.value.should be == 'de'
|
|
93
82
|
end
|
|
94
83
|
|
|
95
84
|
it 'can determine equality' do
|
|
96
|
-
a =
|
|
97
|
-
a.should be ==
|
|
98
|
-
a.should_not be ==
|
|
99
|
-
a.should_not be ==
|
|
85
|
+
a = described_class.new :boo, 'bah'
|
|
86
|
+
a.should be == described_class.new(:boo, 'bah')
|
|
87
|
+
a.should_not be == described_class.new(:bah, 'bah')
|
|
88
|
+
a.should_not be == described_class.new(:boo, 'boo')
|
|
100
89
|
end
|
|
101
90
|
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.
|
|
4
|
+
version: 1.6.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2012-11-
|
|
14
|
+
date: 2012-11-14 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: niceogiri
|
|
@@ -515,7 +515,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
515
515
|
version: '0'
|
|
516
516
|
segments:
|
|
517
517
|
- 0
|
|
518
|
-
hash:
|
|
518
|
+
hash: 1883502262727865241
|
|
519
519
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
520
520
|
none: false
|
|
521
521
|
requirements:
|
|
@@ -524,7 +524,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
524
524
|
version: 1.3.7
|
|
525
525
|
requirements: []
|
|
526
526
|
rubyforge_project: punchblock
|
|
527
|
-
rubygems_version: 1.8.
|
|
527
|
+
rubygems_version: 1.8.24
|
|
528
528
|
signing_key:
|
|
529
529
|
specification_version: 3
|
|
530
530
|
summary: Punchblock is a telephony middleware library
|