adhearsion 2.2.0 → 2.2.1
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/.travis.yml +6 -3
- data/CHANGELOG.md +6 -0
- data/CONTRIBUTING.md +3 -0
- data/lib/adhearsion.rb +7 -13
- data/lib/adhearsion/call.rb +0 -4
- data/lib/adhearsion/call_controller.rb +2 -0
- data/lib/adhearsion/call_controller/dial.rb +2 -0
- data/lib/adhearsion/call_controller/output/abstract_player.rb +2 -0
- data/lib/adhearsion/call_controller/output/formatter.rb +2 -0
- data/lib/adhearsion/call_controller/utility.rb +2 -0
- data/lib/adhearsion/configuration.rb +2 -0
- data/lib/adhearsion/initializer.rb +1 -1
- data/lib/adhearsion/outbound_call.rb +1 -2
- data/lib/adhearsion/plugin.rb +2 -0
- data/lib/adhearsion/router/route.rb +2 -9
- data/lib/adhearsion/statistics.rb +35 -37
- data/lib/adhearsion/version.rb +1 -1
- data/spec/adhearsion/call_controller/dial_spec.rb +3 -3
- data/spec/adhearsion/call_controller/input_spec.rb +1 -0
- data/spec/adhearsion/call_controller/output/async_player_spec.rb +1 -0
- data/spec/adhearsion/call_controller/output/formatter_spec.rb +1 -0
- data/spec/adhearsion/call_controller/output/player_spec.rb +4 -4
- data/spec/adhearsion/call_controller/output_spec.rb +1 -0
- data/spec/adhearsion/call_controller/record_spec.rb +1 -0
- data/spec/adhearsion/call_controller/utility_spec.rb +1 -0
- data/spec/adhearsion/call_controller_spec.rb +2 -2
- data/spec/adhearsion/configuration_spec.rb +1 -0
- data/spec/adhearsion/plugin_spec.rb +1 -0
- data/spec/adhearsion/punchblock_plugin_spec.rb +2 -2
- data/spec/adhearsion/statistics_spec.rb +8 -1
- data/spec/adhearsion_spec.rb +4 -0
- data/spec/spec_helper.rb +4 -6
- metadata +5 -4
data/.travis.yml
CHANGED
@@ -3,9 +3,12 @@ script: bundle exec rake --trace
|
|
3
3
|
rvm:
|
4
4
|
- 1.9.2
|
5
5
|
- 1.9.3
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
- jruby-19mode
|
7
|
+
- rbx-19mode
|
8
|
+
- ruby-head
|
9
|
+
matrix:
|
10
|
+
allow_failures:
|
11
|
+
- rvm: rbx-19mode
|
9
12
|
env: ARUBA_TIMEOUT=120 RAILS_ENV=development AHN_ENV=development
|
10
13
|
notifications:
|
11
14
|
irc: "irc.freenode.org#adhearsion"
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# [develop](https://github.com/adhearsion/adhearsion)
|
2
2
|
|
3
|
+
# [2.2.1](https://github.com/adhearsion/adhearsion/compare/v2.2.0...v2.2.1) - [2013-01-06](https://rubygems.org/gems/adhearsion/versions/2.2.1)
|
4
|
+
* Bugfix: No longer crash logging randomly
|
5
|
+
* Bugfix: Correctly route outbound calls
|
6
|
+
* Bugfix: Handle calls when daemonized correctly
|
7
|
+
* Bugfix: Test suites now pass on JRuby and Ruby 2.0.0
|
8
|
+
|
3
9
|
# [2.2.0](https://github.com/adhearsion/adhearsion/compare/v2.1.3...v2.2.0) - [2012-12-17](https://rubygems.org/gems/adhearsion/versions/2.2.0)
|
4
10
|
* Feature: Statistics API providing counts of calls dialed, offered, rejected, routed and active
|
5
11
|
|
data/CONTRIBUTING.md
ADDED
data/lib/adhearsion.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
abort "ERROR: You are running Adhearsion on an unsupported version of Ruby (Ruby #{RUBY_VERSION} #{RUBY_RELEASE_DATE})! Please upgrade to at least Ruby v1.9.2, JRuby 1.
|
3
|
+
abort "ERROR: You are running Adhearsion on an unsupported version of Ruby (Ruby #{RUBY_VERSION} #{RUBY_RELEASE_DATE})! Please upgrade to at least Ruby v1.9.2, JRuby 1.7.0 or Rubinius 2.0." if RUBY_VERSION < "1.9.2"
|
4
4
|
|
5
5
|
%w{
|
6
6
|
active_support/all
|
7
7
|
punchblock
|
8
|
-
ruby_speech
|
9
|
-
countdownlatch
|
10
|
-
loquacious
|
11
8
|
celluloid
|
12
9
|
|
13
10
|
adhearsion/version
|
@@ -99,21 +96,18 @@ module Adhearsion
|
|
99
96
|
end
|
100
97
|
|
101
98
|
def active_calls
|
102
|
-
|
103
|
-
|
104
|
-
else
|
105
|
-
@calls = Calls.new
|
106
|
-
end
|
99
|
+
Celluloid::Actor[:active_calls] || Calls.supervise_as(:active_calls)
|
100
|
+
Celluloid::Actor[:active_calls]
|
107
101
|
end
|
108
102
|
|
109
103
|
#
|
110
104
|
# @return [Adhearsion::Statistics] a statistics aggregator object capable of producing stats dumps
|
111
105
|
def statistics
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
@statistics = Statistics.new.tap(&:setup_event_handlers)
|
106
|
+
unless Celluloid::Actor[:statistics]
|
107
|
+
Statistics.supervise_as :statistics
|
108
|
+
Statistics.setup_event_handlers
|
116
109
|
end
|
110
|
+
Celluloid::Actor[:statistics]
|
117
111
|
end
|
118
112
|
|
119
113
|
def status
|
data/lib/adhearsion/call.rb
CHANGED
@@ -38,12 +38,12 @@ module Adhearsion
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def start
|
41
|
-
Adhearsion.statistics
|
42
41
|
resolve_pid_file_path
|
43
42
|
load_lib_folder
|
44
43
|
load_config_file
|
45
44
|
initialize_log_paths
|
46
45
|
daemonize! if should_daemonize?
|
46
|
+
Adhearsion.statistics
|
47
47
|
start_logging
|
48
48
|
debugging_log
|
49
49
|
launch_console if need_console?
|
data/lib/adhearsion/plugin.rb
CHANGED
@@ -8,6 +8,7 @@ module Adhearsion
|
|
8
8
|
include HasGuardedHandlers
|
9
9
|
|
10
10
|
attr_reader :name, :target, :guards
|
11
|
+
attr_accessor :controller_metadata
|
11
12
|
|
12
13
|
def initialize(name, target = nil, *guards, &block)
|
13
14
|
@name = name
|
@@ -17,6 +18,7 @@ module Adhearsion
|
|
17
18
|
@target, @guards = target, guards
|
18
19
|
end
|
19
20
|
@guards.compact!
|
21
|
+
@controller_metadata = {}
|
20
22
|
end
|
21
23
|
|
22
24
|
def match?(call)
|
@@ -47,15 +49,6 @@ module Adhearsion
|
|
47
49
|
}
|
48
50
|
end
|
49
51
|
|
50
|
-
def controller_metadata=(metadata)
|
51
|
-
@controller_metadata = metadata
|
52
|
-
end
|
53
|
-
|
54
|
-
def controller_metadata
|
55
|
-
return {} unless instance_variable_defined?(:@controller_metadata)
|
56
|
-
@controller_metadata
|
57
|
-
end
|
58
|
-
|
59
52
|
def evented?
|
60
53
|
false
|
61
54
|
end
|
@@ -6,6 +6,41 @@ module Adhearsion
|
|
6
6
|
|
7
7
|
exclusive
|
8
8
|
|
9
|
+
# @private
|
10
|
+
def self.setup_event_handlers
|
11
|
+
Events.punchblock(Punchblock::Event::Offer) do
|
12
|
+
begin
|
13
|
+
Celluloid::Actor[:statistics].register_call_offered
|
14
|
+
ensure
|
15
|
+
throw :pass
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Events.call_dialed do
|
20
|
+
begin
|
21
|
+
Celluloid::Actor[:statistics].register_call_dialed
|
22
|
+
ensure
|
23
|
+
throw :pass
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Events.call_rejected do
|
28
|
+
begin
|
29
|
+
Celluloid::Actor[:statistics].register_call_rejected
|
30
|
+
ensure
|
31
|
+
throw :pass
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Events.call_routed do |data|
|
36
|
+
begin
|
37
|
+
Celluloid::Actor[:statistics].register_call_routed data
|
38
|
+
ensure
|
39
|
+
throw :pass
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
9
44
|
def initialize
|
10
45
|
@calls_dialed = @calls_offered = @calls_routed = @calls_rejected = 0
|
11
46
|
@calls_by_route = Hash.new { |h,k| h[k] = 0 }
|
@@ -40,43 +75,6 @@ module Adhearsion
|
|
40
75
|
@calls_rejected += 1
|
41
76
|
end
|
42
77
|
|
43
|
-
# @private
|
44
|
-
def setup_event_handlers
|
45
|
-
stats = current_actor
|
46
|
-
|
47
|
-
Events.punchblock(Punchblock::Event::Offer) do
|
48
|
-
begin
|
49
|
-
stats.register_call_offered
|
50
|
-
rescue Celluloid::DeadActorError
|
51
|
-
end
|
52
|
-
throw :pass
|
53
|
-
end
|
54
|
-
|
55
|
-
Events.call_dialed do
|
56
|
-
begin
|
57
|
-
stats.register_call_dialed
|
58
|
-
rescue Celluloid::DeadActorError
|
59
|
-
end
|
60
|
-
throw :pass
|
61
|
-
end
|
62
|
-
|
63
|
-
Events.call_rejected do
|
64
|
-
begin
|
65
|
-
stats.register_call_rejected
|
66
|
-
rescue Celluloid::DeadActorError
|
67
|
-
end
|
68
|
-
throw :pass
|
69
|
-
end
|
70
|
-
|
71
|
-
Events.call_routed do |data|
|
72
|
-
begin
|
73
|
-
stats.register_call_routed data
|
74
|
-
rescue Celluloid::DeadActorError
|
75
|
-
end
|
76
|
-
throw :pass
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
78
|
def to_s
|
81
79
|
"#<#{self.class} dump=#{dump}>"
|
82
80
|
end
|
data/lib/adhearsion/version.rb
CHANGED
@@ -9,11 +9,11 @@ module Adhearsion
|
|
9
9
|
|
10
10
|
let(:to) { 'sip:foo@bar.com' }
|
11
11
|
let(:other_call_id) { new_uuid }
|
12
|
-
let(:other_mock_call) { flexmock OutboundCall.new, :id => other_call_id }
|
12
|
+
let(:other_mock_call) { flexmock OutboundCall.new, :id => other_call_id, :write_command => true }
|
13
13
|
|
14
14
|
let(:second_to) { 'sip:baz@bar.com' }
|
15
15
|
let(:second_other_call_id) { new_uuid }
|
16
|
-
let(:second_other_mock_call) { flexmock OutboundCall.new, :id => second_other_call_id }
|
16
|
+
let(:second_other_mock_call) { flexmock OutboundCall.new, :id => second_other_call_id, :write_command => true }
|
17
17
|
|
18
18
|
let(:mock_answered) { Punchblock::Event::Answered.new }
|
19
19
|
|
@@ -349,7 +349,7 @@ module Adhearsion
|
|
349
349
|
|
350
350
|
context "when a call is answered and joined, and the other ends with an error" do
|
351
351
|
it "has an overall dial status of :answer" do
|
352
|
-
|
352
|
+
flexmock(call).should_receive(:answer).once
|
353
353
|
flexmock(other_mock_call).should_receive(:join).once.with(call)
|
354
354
|
flexmock(second_other_mock_call).should_receive(:hangup).once
|
355
355
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
+
require 'ruby_speech'
|
4
5
|
|
5
6
|
module Adhearsion
|
6
7
|
class CallController
|
@@ -44,10 +45,9 @@ module Adhearsion
|
|
44
45
|
lambda { subject.output content }.should raise_error(PlaybackError)
|
45
46
|
end
|
46
47
|
|
47
|
-
it "raises a
|
48
|
-
|
49
|
-
|
50
|
-
lambda { subject.output content }.should raise_error(e)
|
48
|
+
it "raises a Call::Hangup exception if the component ends due to an error" do
|
49
|
+
expect_component_execution Punchblock::Component::Output.new(:ssml => content), Call::Hangup
|
50
|
+
lambda { subject.output content }.should raise_error(Call::Hangup)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -299,10 +299,10 @@ module Adhearsion
|
|
299
299
|
before { subject.pause! }
|
300
300
|
|
301
301
|
it "should unblock when the controller is unpaused" do
|
302
|
-
|
302
|
+
t2 = nil
|
303
303
|
latch = CountDownLatch.new 1
|
304
|
+
t1 = Time.now
|
304
305
|
Thread.new do
|
305
|
-
t1 = Time.now
|
306
306
|
subject.block_until_resumed
|
307
307
|
t2 = Time.now
|
308
308
|
latch.countdown!
|
@@ -32,13 +32,13 @@ module Adhearsion
|
|
32
32
|
it "blocks until a response is received" do
|
33
33
|
slow_command = Punchblock::Command::Dial.new
|
34
34
|
slow_command.request!
|
35
|
+
starting_time = Time.now
|
35
36
|
Thread.new do
|
36
37
|
sleep 0.5
|
37
38
|
slow_command.response = response
|
38
39
|
end
|
39
|
-
starting_time = Time.now
|
40
40
|
PunchblockPlugin.execute_component slow_command
|
41
|
-
(Time.now - starting_time).should >= 0.
|
41
|
+
(Time.now - starting_time).should >= 0.4
|
42
42
|
end
|
43
43
|
|
44
44
|
describe "with a successful response" do
|
@@ -3,12 +3,19 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Adhearsion::Statistics do
|
6
|
+
before(:all) do
|
7
|
+
Adhearsion::Statistics.setup_event_handlers
|
8
|
+
end
|
9
|
+
|
10
|
+
subject { Celluloid::Actor[:statistics] }
|
11
|
+
|
6
12
|
before do
|
7
|
-
|
13
|
+
Celluloid::Actor[:statistics] = described_class.new
|
8
14
|
flexmock(Adhearsion.active_calls).should_receive(:count).and_return 0
|
9
15
|
end
|
10
16
|
|
11
17
|
after do
|
18
|
+
Celluloid::Actor.clear_registry
|
12
19
|
Adhearsion.router = nil
|
13
20
|
end
|
14
21
|
|
data/spec/adhearsion_spec.rb
CHANGED
@@ -86,6 +86,8 @@ describe Adhearsion do
|
|
86
86
|
original.terminate
|
87
87
|
original.should_not be_alive
|
88
88
|
|
89
|
+
sleep 0.25
|
90
|
+
|
89
91
|
current = Adhearsion.active_calls
|
90
92
|
current.should be_alive
|
91
93
|
current.should_not be original
|
@@ -106,6 +108,8 @@ describe Adhearsion do
|
|
106
108
|
original.terminate
|
107
109
|
original.should_not be_alive
|
108
110
|
|
111
|
+
sleep 0.25
|
112
|
+
|
109
113
|
current = Adhearsion.statistics
|
110
114
|
current.should be_alive
|
111
115
|
current.should_not be original
|
data/spec/spec_helper.rb
CHANGED
@@ -40,12 +40,12 @@ RSpec.configure do |config|
|
|
40
40
|
config.run_all_when_everything_filtered = true
|
41
41
|
config.color_enabled = true
|
42
42
|
|
43
|
-
config.before :
|
44
|
-
Adhearsion.
|
43
|
+
config.before :suite do
|
44
|
+
Adhearsion::Logging.start Adhearsion::Logging.default_appenders, :trace, Adhearsion.config.platform.logging.formatter
|
45
45
|
end
|
46
46
|
|
47
|
-
config.
|
48
|
-
|
47
|
+
config.before :each do
|
48
|
+
Adhearsion.router = nil
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -54,8 +54,6 @@ Adhearsion::Events.exeption do |e|
|
|
54
54
|
puts e.backtrace.join("\n")
|
55
55
|
end
|
56
56
|
|
57
|
-
Adhearsion::Logging.silence!
|
58
|
-
|
59
57
|
# Test modules for #mixin methods
|
60
58
|
module TestBiscuit
|
61
59
|
def throwadogabone
|
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.2.
|
4
|
+
version: 2.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2013-01-06 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: activesupport
|
@@ -464,6 +464,7 @@ files:
|
|
464
464
|
- .travis.yml
|
465
465
|
- .yardopts
|
466
466
|
- CHANGELOG.md
|
467
|
+
- CONTRIBUTING.md
|
467
468
|
- Gemfile
|
468
469
|
- Guardfile
|
469
470
|
- LICENSE
|
@@ -636,7 +637,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
636
637
|
version: '0'
|
637
638
|
segments:
|
638
639
|
- 0
|
639
|
-
hash:
|
640
|
+
hash: 2773669927993814773
|
640
641
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
641
642
|
none: false
|
642
643
|
requirements:
|
@@ -645,7 +646,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
645
646
|
version: '0'
|
646
647
|
segments:
|
647
648
|
- 0
|
648
|
-
hash:
|
649
|
+
hash: 2773669927993814773
|
649
650
|
requirements: []
|
650
651
|
rubyforge_project:
|
651
652
|
rubygems_version: 1.8.24
|