adhearsion 2.3.1 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb14c1255a1538690eeda472f1eb7ca04b8fc9d6
4
- data.tar.gz: 1d44d386568202e8250ab989f2d3fa76d9ada702
3
+ metadata.gz: ab3c831d82fb4d801c196646eb3fd399637c26b3
4
+ data.tar.gz: 690e4fbb38d071cd8eb46458301c66324a9b340b
5
5
  SHA512:
6
- metadata.gz: cfb2b6fe75db610496304c8de2ccb4b81a004c8820d2998758a0a5b2f2742ea4a47f0082f847ad9da33f4f7247ab0396e7c550447f857326a976226210246e27
7
- data.tar.gz: 2f3dc960267aead3512dcafcf44b5db6e239d35f58f74133f5d9592876941b2dbeef2af8f457a9b6b39291b22cc51672a99262862e8a5969bd92086ce3c20ff8
6
+ metadata.gz: a4319a75bd1f3b55a629231e4aa5db96d69f0584f8288a29eb691278dc577eff0d186a56203df6b73c324f9835365b271f8af2368c585cdbc6f4b017e0e3d286
7
+ data.tar.gz: 8b1de59e7c0db84375687fd91ac2e2d1af2cdd4e715b1e4b3fa3902c70eaf6b6bdf8569ce166af2792f98f4d96a46b946582bc7531cc314c7f2b11c788d88fb5
data/.travis.yml CHANGED
@@ -1,5 +1,4 @@
1
1
  language: ruby
2
- script: bundle exec rake --trace
3
2
  rvm:
4
3
  - 1.9.2
5
4
  - 1.9.3
@@ -11,6 +10,7 @@ matrix:
11
10
  allow_failures:
12
11
  - rvm: rbx-19mode
13
12
  - rvm: ruby-head
13
+ - rvm: jruby-19mode
14
14
  env: ARUBA_TIMEOUT=120 RAILS_ENV=development AHN_ENV=development
15
15
  notifications:
16
16
  irc: "irc.freenode.org#adhearsion"
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # [develop](https://github.com/adhearsion/adhearsion)
2
2
 
3
+ # [2.3.2](https://github.com/adhearsion/adhearsion/compare/v2.3.1...v2.3.2) - [2013-05-03](https://rubygems.org/gems/adhearsion/versions/2.3.2)
4
+ * Bugfix: Correctly register readiness to handle calls with VoIP platform.
5
+ * Bugfix: Don't raise when the router tries to clear up after a CallController which outlived its Call actor.
6
+ * Bugfix: Don't share metadata between all controllers invoked by a route. This was causing concurrent mutation bugs and all sorts of weirdness.
7
+ * Bugfix: Ensure that a CallController can still log safely even if its Call (and therefore scoped logger) is gone.
8
+ * Bugfix: Fix some spec false positives and failures due to dependency changes.
9
+
3
10
  # [2.3.1](https://github.com/adhearsion/adhearsion/compare/v2.3.0...v2.3.1) - [2013-03-28](https://rubygems.org/gems/adhearsion/versions/2.3.1)
4
11
  * Bugfix: Fix a leftover Celluloid deprecation warning
5
12
 
data/adhearsion.gemspec CHANGED
@@ -33,9 +33,9 @@ Gem::Specification.new do |s|
33
33
  s.add_runtime_dependency 'punchblock', ["~> 1.4"]
34
34
  s.add_runtime_dependency 'rake'
35
35
  s.add_runtime_dependency 'ruby_speech', ["~> 1.0"]
36
- s.add_runtime_dependency 'thor'
36
+ s.add_runtime_dependency 'thor', "~> 0.18.0"
37
37
 
38
- s.add_development_dependency 'aruba', "~> 0.4"
38
+ s.add_development_dependency 'aruba', "~> 0.5"
39
39
  s.add_development_dependency 'ci_reporter'
40
40
  s.add_development_dependency 'cucumber'
41
41
  s.add_development_dependency 'guard-cucumber'
@@ -20,6 +20,6 @@ Feature: Adhearsion Ahn CLI (Create)
20
20
  When I run `ahn create`
21
21
  Then the output should contain:
22
22
  """
23
- ahn create requires at least 1 argument: "ahn create /path/to/directory".
23
+ no arguments
24
24
  """
25
25
  And the exit status should be 1
@@ -1,10 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'timeout'
4
-
5
3
  Then /^I should see the usage message$/ do
6
4
  steps %Q{
7
- Then the output should contain "Tasks:"
8
5
  Then the output should contain "ahn create"
9
6
  Then the output should contain "ahn start"
10
7
  Then the output should contain "ahn daemon"
@@ -13,11 +10,6 @@ Then /^I should see the usage message$/ do
13
10
  }
14
11
  end
15
12
 
16
- # TODO: Remove after pull request is merged in cucumber.rb from Aruba
17
- When /^I terminate the interactive process$/ do
18
- terminate_processes!
19
- end
20
-
21
13
  When /^I wait (\d+) seconds?$/ do |arg1|
22
14
  sleep arg1.to_i
23
15
  end
@@ -60,7 +60,7 @@ module Adhearsion
60
60
  attr_reader :block
61
61
 
62
62
  delegate :[], :[]=, :to => :@metadata
63
- delegate :variables, :logger, :to => :call
63
+ delegate :variables, :to => :call
64
64
 
65
65
  #
66
66
  # Create a new instance
@@ -269,5 +269,16 @@ module Adhearsion
269
269
  def inspect
270
270
  "#<#{self.class} call=#{call.alive? ? call.id : ''}, metadata=#{metadata.inspect}>"
271
271
  end
272
+
273
+ def eql?(other)
274
+ other.instance_of?(self.class) && call == other.call && metadata == other.metadata
275
+ end
276
+ alias :== :eql?
277
+
278
+ def logger
279
+ call.logger
280
+ rescue Celluloid::DeadActorError
281
+ super
282
+ end
272
283
  end#class
273
284
  end
@@ -36,11 +36,8 @@ module Adhearsion
36
36
  end
37
37
 
38
38
  def uri?(string)
39
- uri = URI.parse string
40
- !!uri.scheme
41
- rescue URI::BadURIError
42
- false
43
- rescue URI::InvalidURIError
39
+ !! URI.parse(string).scheme
40
+ rescue URI::BadURIError, URI::InvalidURIError
44
41
  false
45
42
  end
46
43
 
@@ -23,6 +23,8 @@ If you are using Asterisk 1.8, you will need to add an additional context with t
23
23
  ```xml
24
24
  <extension name='Adhearsion'>
25
25
  <condition field="destination_number" expression="^10$">
26
+ <action application="set" data="hangup_after_bridge=false"/>
27
+ <action application="set" data="park_after_bridge=true"/>
26
28
  <action application='park'/>
27
29
  </condition>
28
30
  </extension>
@@ -43,7 +43,7 @@ module Adhearsion
43
43
  self.client = Punchblock::Client.new :connection => connection
44
44
 
45
45
  # Tell the Punchblock connection that we are ready to process calls.
46
- Events.register_callback :after_initialization do
46
+ Events.register_callback :after_initialized do
47
47
  connection.ready!
48
48
  end
49
49
 
@@ -18,7 +18,7 @@ module Adhearsion
18
18
  @target, @guards = target, guards
19
19
  end
20
20
  @guards.compact!
21
- @controller_metadata = {}
21
+ @controller_metadata = nil
22
22
  end
23
23
 
24
24
  def match?(call)
@@ -43,7 +43,7 @@ module Adhearsion
43
43
  else
44
44
  call_actor.hangup
45
45
  end
46
- rescue Call::Hangup
46
+ rescue Call::Hangup, Call::ExpiredError
47
47
  end
48
48
  callback.call if callback
49
49
  }
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Adhearsion
4
- VERSION = '2.3.1'
4
+ VERSION = '2.3.2'
5
5
  end
@@ -310,13 +310,13 @@ module Adhearsion
310
310
  end
311
311
 
312
312
  context "with a block passed" do
313
- it "should set that block as the buffer validator" do
314
- foo = nil
315
- subject.should_receive(:play_sound_files_for_menu).and_return("1")
316
- subject.ask sound_files, :limit => 0 do |buffer|
317
- foo = :bar
318
- end.menu.execute_validator_hook
319
- foo.should be == :bar
313
+ it "validates the buffer using that block, terminating on something truthy" do
314
+ subject.should_receive(:play_sound_files_for_menu).twice.and_return("1")
315
+ result = subject.ask sound_files, limit: 3 do |buffer|
316
+ buffer == '11'
317
+ end
318
+ result.status.should == :validator_terminated
319
+ result.response.should == '11'
320
320
  end
321
321
  end
322
322
 
@@ -28,6 +28,15 @@ module Adhearsion
28
28
  its(:logger) { should be call.logger }
29
29
  its(:variables) { should be call.variables }
30
30
 
31
+ context "when the call is dead" do
32
+ before { call.terminate }
33
+
34
+ it "should use an unnamed logger" do
35
+ subject.logger.should be_a ::Logging::Logger
36
+ subject.logger.name.should == "Adhearsion::CallController"
37
+ end
38
+ end
39
+
31
40
  describe "execution on a call" do
32
41
  before do
33
42
  subject.stub :execute_component_and_await_completion => nil
@@ -381,6 +390,40 @@ module Adhearsion
381
390
  (Time.now - starting_time).should > 0.5
382
391
  end
383
392
  end
393
+
394
+ describe "equality" do
395
+ context "when of the same type, operating on the same call, with the same metadata" do
396
+ let(:other) { CallController.new call, metadata }
397
+
398
+ it "should be equal" do
399
+ subject.should == other
400
+ end
401
+ end
402
+
403
+ context "when of a different type" do
404
+ let(:other) { Class.new(CallController).new call, metadata }
405
+
406
+ it "should not be equal" do
407
+ subject.should_not == other
408
+ end
409
+ end
410
+
411
+ context "when operating on a different call" do
412
+ let(:other) { CallController.new Call.new, metadata }
413
+
414
+ it "should not be equal" do
415
+ subject.should_not == other
416
+ end
417
+ end
418
+
419
+ context "with different metadata" do
420
+ let(:other) { CallController.new call, something: 'else' }
421
+
422
+ it "should not be equal" do
423
+ subject.should_not == other
424
+ end
425
+ end
426
+ end
384
427
  end
385
428
  end
386
429
 
@@ -62,9 +62,8 @@ module Adhearsion
62
62
  context "with controller metadata specified" do
63
63
  it "should set the metadata on the controller" do
64
64
  mock_call.should_receive(:dial).once.with(to, {})
65
- mock_call.should_receive(:execute_controller).once do |c|
66
- c.is_a?(controller) && c.metadata == {:foo => 'bar'}
67
- end
65
+ expected_controller = controller.new mock_call, foo: 'bar'
66
+ mock_call.should_receive(:execute_controller).with(expected_controller, kind_of(Proc)).once
68
67
  call = OutboundCall.originate to, :controller => controller, :controller_metadata => {:foo => 'bar'}
69
68
  call << Punchblock::Event::Answered.new
70
69
  end
@@ -54,6 +54,7 @@ module Adhearsion
54
54
 
55
55
  before do
56
56
  mock_call.stub :id => call_id
57
+ mock_client.as_null_object
57
58
  mock_client.stub :event_handler= => true
58
59
  Events.refresh!
59
60
  Adhearsion::Process.stub :fqdn => 'hostname'
@@ -190,7 +191,7 @@ module Adhearsion
190
191
  describe 'using FreeSWITCH' do
191
192
  let(:overrides) { {:username => 'test', :password => '123', :host => 'foo.bar.com', :port => 200, :connection_timeout => 20, :root_domain => 'foo.com', :calls_domain => 'call.foo.com', :mixers_domain => 'mixer.foo.com', :media_engine => :swift, :default_voice => :hal} }
192
193
 
193
- it 'should start an Asterisk PB connection' do
194
+ it 'should start a FreeSWITCH PB connection' do
194
195
  Punchblock::Connection::Freeswitch.should_receive(:new).once.with(overrides).and_return mock_client
195
196
  initialize_punchblock overrides.merge(:platform => :freeswitch)
196
197
  end
@@ -109,7 +109,7 @@ module Adhearsion
109
109
 
110
110
  let(:latch) { CountDownLatch.new 1 }
111
111
 
112
- before { call.wrapped_object.should_receive :write_and_await_response }
112
+ before { call.wrapped_object.stub :write_and_await_response }
113
113
 
114
114
  context "via a call controller" do
115
115
  let(:controller) { CallController }
@@ -139,6 +139,26 @@ module Adhearsion
139
139
  latch.wait(2).should be true
140
140
  end
141
141
 
142
+ context "when the CallController mutates its metadata" do
143
+ let :controller do
144
+ Class.new CallController do
145
+ def run
146
+ metadata[:foo] = 'bar'
147
+ end
148
+ end
149
+ end
150
+
151
+ before do
152
+ route.dispatch call
153
+ end
154
+
155
+ it "gives the next call fresh metadata" do
156
+ expected_controller = controller.new call, nil
157
+ call.should_receive(:execute_controller).once.with expected_controller, kind_of(Proc)
158
+ route.dispatch call
159
+ end
160
+ end
161
+
142
162
  context 'with the :ahn_prevent_hangup call variable set' do
143
163
  before { call[:ahn_prevent_hangup] = true }
144
164
 
@@ -159,6 +179,23 @@ module Adhearsion
159
179
  end.should_not raise_error
160
180
  end
161
181
  end
182
+
183
+ context "if the call is dead when trying to clear it up" do
184
+ let :controller do
185
+ Class.new CallController do
186
+ def run
187
+ call.terminate
188
+ end
189
+ end
190
+ end
191
+
192
+ it "should not raise an exception" do
193
+ lambda do
194
+ route.dispatch call, lambda { latch.countdown! }
195
+ latch.wait(2).should be true
196
+ end.should_not raise_error
197
+ end
198
+ end
162
199
  end
163
200
 
164
201
  context "via a block" do
@@ -5,6 +5,7 @@ module CallControllerTestHelpers
5
5
  test_case.let(:call_id) { new_uuid }
6
6
  test_case.let(:call) { Adhearsion::Call.new }
7
7
  test_case.let(:block) { nil }
8
+ test_case.let(:metadata) { {doo: :dah} }
8
9
  test_case.let(:controller) { new_controller test_case.describes }
9
10
 
10
11
  test_case.subject { controller }
@@ -21,7 +22,7 @@ module CallControllerTestHelpers
21
22
  target
22
23
  when Module, nil
23
24
  Class.new Adhearsion::CallController
24
- end.new call, :doo => :dah, &block
25
+ end.new call, metadata, &block
25
26
  end
26
27
 
27
28
  def expect_message_waiting_for_response(message = nil, fail = false, &block)
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.3.1
4
+ version: 2.3.2
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: 2013-03-28 00:00:00.000000000 Z
14
+ date: 2013-05-04 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -227,30 +227,30 @@ dependencies:
227
227
  name: thor
228
228
  requirement: !ruby/object:Gem::Requirement
229
229
  requirements:
230
- - - '>='
230
+ - - ~>
231
231
  - !ruby/object:Gem::Version
232
- version: '0'
232
+ version: 0.18.0
233
233
  type: :runtime
234
234
  prerelease: false
235
235
  version_requirements: !ruby/object:Gem::Requirement
236
236
  requirements:
237
- - - '>='
237
+ - - ~>
238
238
  - !ruby/object:Gem::Version
239
- version: '0'
239
+ version: 0.18.0
240
240
  - !ruby/object:Gem::Dependency
241
241
  name: aruba
242
242
  requirement: !ruby/object:Gem::Requirement
243
243
  requirements:
244
244
  - - ~>
245
245
  - !ruby/object:Gem::Version
246
- version: '0.4'
246
+ version: '0.5'
247
247
  type: :development
248
248
  prerelease: false
249
249
  version_requirements: !ruby/object:Gem::Requirement
250
250
  requirements:
251
251
  - - ~>
252
252
  - !ruby/object:Gem::Version
253
- version: '0.4'
253
+ version: '0.5'
254
254
  - !ruby/object:Gem::Dependency
255
255
  name: ci_reporter
256
256
  requirement: !ruby/object:Gem::Requirement
@@ -410,7 +410,6 @@ files:
410
410
  - features/plugin_generator.feature
411
411
  - features/step_definitions/app_generator_steps.rb
412
412
  - features/step_definitions/cli_steps.rb
413
- - features/support/aruba_helper.rb
414
413
  - features/support/env.rb
415
414
  - features/support/utils.rb
416
415
  - lib/adhearsion.rb
@@ -584,7 +583,6 @@ test_files:
584
583
  - features/plugin_generator.feature
585
584
  - features/step_definitions/app_generator_steps.rb
586
585
  - features/step_definitions/cli_steps.rb
587
- - features/support/aruba_helper.rb
588
586
  - features/support/env.rb
589
587
  - features/support/utils.rb
590
588
  - spec/adhearsion/call_controller/dial_spec.rb
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Aruba
4
- module Api
5
- # output() blocks for stderr and stdout it seems
6
- def assert_partial_output_interactive(expected)
7
- unescape(_read_interactive).include?(unescape(expected)) ? true : false
8
- end
9
-
10
- def _read_interactive
11
- @interactive.read_stdout(@aruba_keep_ansi)
12
- end
13
- end
14
-
15
- class Process
16
- def read_stdout(keep_ansi)
17
- wait_for_io do
18
- @process.io.stdout.flush
19
- content = filter_ansi(open(@out.path).read, keep_ansi)
20
- end
21
- end
22
- end
23
- end
24
-