punchblock 2.2.2 → 2.3.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: 60e6ce85c4eb99dac8e18f5b06f868e13562fa64
4
- data.tar.gz: 70ce395958873bbb5078caf5bd9ba517015d4e35
3
+ metadata.gz: a847554d66bf45ee14cc93803271b60890cfff96
4
+ data.tar.gz: 43d698af41a3b374c3b39bacdf29dbce822020bc
5
5
  SHA512:
6
- metadata.gz: deb55ad4aa2888d889f33b55c769d567b837849475fd594ba9e8a07b3628d43880ccb25ef8e9ea1d05889481b4c423b994ce15cad5fe015791baa3525b3f11a5
7
- data.tar.gz: 758ccbfed733614dbede05e2dd94525103085c7b5a0b6cf5e0bccb6e89f024e93a802716ae862157c6d87dd3d9a5a97d18444fe0673b471ddfc1520598a42a3c
6
+ metadata.gz: 6c9373c2cb2e3831e1938924197c8c141fda152423a4f985e9f3c84c38f099185cdeaeed8275f8e111c2d9f77dd39c4caad635b9031fe63786b09eb3fb53d6df
7
+ data.tar.gz: 6474dd87f25053eb002212c18744f2c216cc153c4d9df1b7938f4e45faa224988b6f5ff296b4729bbd0c538887e43897aac1c9fff83f3eccc995fc726793a313
data/.travis.yml CHANGED
@@ -11,6 +11,6 @@ matrix:
11
11
  allow_failures:
12
12
  - rvm: 1.9.2
13
13
  - rvm: ruby-head
14
- - rvm: rbx-19mode
14
+ - rvm: rbx-2.1.1
15
15
  notifications:
16
16
  irc: "irc.freenode.org#adhearsion"
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # [develop](https://github.com/adhearsion/punchblock)
2
2
 
3
+ # [v2.3.0](https://github.com/adhearsion/punchblock/compare/v2.2.2...v2.3.0) - [2014-01-30](https://rubygems.org/gems/punchblock/versions/2.3.0)
4
+ * Feature: Add input-timers-started event
5
+ * Feature: Allow client to send XMPP messages through Blather
6
+ * Bugfix: Ensure that max duration expiration of Asterisk recordings does not crash the translator when it extends past the call's destruction
7
+
3
8
  # [v2.2.2](https://github.com/adhearsion/punchblock/compare/v2.2.1...v2.2.2) - [2014-01-21](https://rubygems.org/gems/punchblock/versions/2.2.2)
4
9
  * Bugfix: Delay sending Answered event on call until AsyncAGI is invoked
5
10
 
@@ -10,7 +10,7 @@ module Punchblock
10
10
 
11
11
  attr_reader :connection, :component_registry
12
12
 
13
- delegate :run, :stop, :to => :connection
13
+ delegate :run, :stop, :send_message, :to => :connection
14
14
 
15
15
  # @param [Hash] options
16
16
  # @option options [Connection::XMPP] :connection The Punchblock connection to use for this session
@@ -31,6 +31,7 @@ module Punchblock
31
31
  return if @response.set_yet?
32
32
  @response.resource = other
33
33
  execute!
34
+ rescue FutureResource::ResourceAlreadySetException
34
35
  end
35
36
  end # CommandNode
36
37
  end # Punchblock
@@ -69,6 +69,13 @@ module Punchblock
69
69
  end
70
70
  end
71
71
 
72
+ def send_message(call_id, domain, body, options = {})
73
+ jid = Blather::JID.new(call_id, domain || root_domain).to_s
74
+ message = Blather::Stanza::Message.new(jid, body, :normal)
75
+ message.subject = options[:subject]
76
+ client.write message
77
+ end
78
+
72
79
  ##
73
80
  # Fire up the connection
74
81
  #
@@ -14,6 +14,7 @@ end
14
14
  joined
15
15
  offer
16
16
  ringing
17
+ input_timers_started
17
18
  unjoined
18
19
  started_speaking
19
20
  stopped_speaking
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ module Punchblock
4
+ class Event
5
+ class InputTimersStarted < Event
6
+ register :'input-timers-started', :prompt
7
+ end
8
+ end
9
+ end
@@ -4,12 +4,12 @@ module Punchblock
4
4
  module Translator
5
5
  class Asterisk
6
6
  module AMIErrorConverter
7
- def self.convert
7
+ def self.convert(result = ->(e) { raise ChannelGoneError, e.message } )
8
8
  yield
9
9
  rescue RubyAMI::Error => e
10
10
  case e.message
11
11
  when 'No such channel', /Channel (\S+) does not exist./
12
- raise ChannelGoneError, e.message
12
+ result.call e if result
13
13
  else
14
14
  raise e
15
15
  end
@@ -33,7 +33,7 @@ module Punchblock
33
33
  ami_client.send_action 'Monitor', 'Channel' => call.channel, 'File' => filename, 'Format' => @format, 'Mix' => true
34
34
  unless max_duration == -1
35
35
  call.after max_duration/1000 do
36
- ami_client.send_action 'StopMonitor', 'Channel' => call.channel
36
+ stop
37
37
  end
38
38
  end
39
39
 
@@ -69,6 +69,12 @@ module Punchblock
69
69
 
70
70
  private
71
71
 
72
+ def stop
73
+ AMIErrorConverter.convert(nil) do
74
+ ami_client.send_action 'StopMonitor', 'Channel' => call.channel
75
+ end
76
+ end
77
+
72
78
  def filename
73
79
  File.join RECORDING_BASE_PATH, id
74
80
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Punchblock
4
- VERSION = "2.2.2"
4
+ VERSION = "2.3.0"
5
5
  end
@@ -32,6 +32,14 @@ module Punchblock
32
32
  end
33
33
  end
34
34
 
35
+ describe '#send_message' do
36
+ it 'should send a message' do
37
+ args = [ "someone", "example.org", "Hello World!" ]
38
+ connection.should_receive(:send_message).with(*args).once
39
+ subject.send_message *args
40
+ end
41
+ end
42
+
35
43
  it 'should handle connection events' do
36
44
  subject.should_receive(:handle_event).with(mock_event).once
37
45
  connection.event_handler.call mock_event
@@ -124,6 +124,36 @@ module Punchblock
124
124
  connection.not_ready!
125
125
  end
126
126
 
127
+ describe '#send_message' do
128
+ it 'should send a "normal" message to the given user and domain' do
129
+ client = connection.send :client
130
+ client.should_receive(:write).once.with do |stanza|
131
+ stanza.to.should be == 'someone@example.org'
132
+ stanza.should be_a Blather::Stanza::Message
133
+ stanza.type.should == :normal
134
+ stanza.body.should be == 'Hello World!'
135
+ stanza.subject.should be_nil
136
+ end
137
+ connection.send_message 'someone', 'example.org', 'Hello World!'
138
+ end
139
+
140
+ it 'should default to the root domain' do
141
+ client = connection.send :client
142
+ client.should_receive(:write).once.with do |stanza|
143
+ stanza.to.should be == 'someone@rayo.net'
144
+ end
145
+ connection.send_message "someone", nil, nil
146
+ end
147
+
148
+ it 'should send a message with the given subject' do
149
+ client = connection.send :client
150
+ client.should_receive(:write).once.with do |stanza|
151
+ stanza.subject.should be == "Important Message"
152
+ end
153
+ connection.send_message nil, nil, nil, :subject => "Important Message"
154
+ end
155
+ end
156
+
127
157
  describe '#handle_presence' do
128
158
  let :complete_xml do
129
159
  <<-MSG
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Punchblock
6
+ class Event
7
+ describe InputTimersStarted do
8
+ it 'registers itself' do
9
+ RayoNode.class_from_registration(:'input-timers-started', 'urn:xmpp:rayo:prompt:1').should be == described_class
10
+ end
11
+
12
+ describe "from a stanza" do
13
+ let(:stanza) { "<input-timers-started xmlns='urn:xmpp:rayo:prompt:1' />" }
14
+
15
+ subject { RayoNode.from_xml parse_stanza(stanza).root, '9f00061', '1' }
16
+
17
+ it { should be_instance_of described_class }
18
+
19
+ it_should_behave_like 'event'
20
+ end
21
+ end
22
+ end
23
+ end
@@ -297,6 +297,15 @@ module Punchblock
297
297
  sleep 1.2
298
298
  end
299
299
 
300
+ it "should not kill the translator if the channel is down" do
301
+ ami_client.should_receive :send_action
302
+ error = RubyAMI::Error.new.tap { |e| e.message = 'No such channel' }
303
+ ami_client.should_receive(:send_action).once.with('StopMonitor', 'Channel' => channel).and_raise error
304
+ subject.execute
305
+ sleep 1.2
306
+ translator.should be_alive
307
+ end
308
+
300
309
  it "sends the correct complete event" do
301
310
  full_filename = "file://#{Record::RECORDING_BASE_PATH}/#{subject.id}.wav"
302
311
  subject.execute
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.2.2
4
+ version: 2.3.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-01-21 00:00:00.000000000 Z
13
+ date: 2014-01-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -429,6 +429,7 @@ files:
429
429
  - lib/punchblock/event/complete.rb
430
430
  - lib/punchblock/event/dtmf.rb
431
431
  - lib/punchblock/event/end.rb
432
+ - lib/punchblock/event/input_timers_started.rb
432
433
  - lib/punchblock/event/joined.rb
433
434
  - lib/punchblock/event/offer.rb
434
435
  - lib/punchblock/event/ringing.rb
@@ -504,6 +505,7 @@ files:
504
505
  - spec/punchblock/event/complete_spec.rb
505
506
  - spec/punchblock/event/dtmf_spec.rb
506
507
  - spec/punchblock/event/end_spec.rb
508
+ - spec/punchblock/event/input_timers_started_spec.rb
507
509
  - spec/punchblock/event/joined_spec.rb
508
510
  - spec/punchblock/event/offer_spec.rb
509
511
  - spec/punchblock/event/ringing_spec.rb
@@ -592,6 +594,7 @@ test_files:
592
594
  - spec/punchblock/event/complete_spec.rb
593
595
  - spec/punchblock/event/dtmf_spec.rb
594
596
  - spec/punchblock/event/end_spec.rb
597
+ - spec/punchblock/event/input_timers_started_spec.rb
595
598
  - spec/punchblock/event/joined_spec.rb
596
599
  - spec/punchblock/event/offer_spec.rb
597
600
  - spec/punchblock/event/ringing_spec.rb