punchblock 0.8.3 → 0.8.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/lib/punchblock/command/dial.rb +12 -0
- data/lib/punchblock/event.rb +10 -0
- data/lib/punchblock/event/answered.rb +2 -0
- data/lib/punchblock/event/dtmf.rb +0 -19
- data/lib/punchblock/event/end.rb +1 -18
- data/lib/punchblock/event/joined.rb +0 -15
- data/lib/punchblock/event/offer.rb +0 -23
- data/lib/punchblock/event/ringing.rb +2 -0
- data/lib/punchblock/event/unjoined.rb +0 -15
- data/lib/punchblock/version.rb +1 -1
- data/spec/punchblock/command/dial_spec.rb +10 -14
- data/spec/punchblock/event/answered_spec.rb +18 -1
- data/spec/punchblock/event/end_spec.rb +7 -1
- data/spec/punchblock/event/ringing_spec.rb +18 -1
- metadata +41 -41
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# develop
|
2
2
|
|
3
|
+
# v0.8.4 - 2012-01-19
|
4
|
+
* Bugfix: End, Ringing & Answered events are allowed to have headers
|
5
|
+
* Feature: Dial commands may have an optional timeout
|
6
|
+
|
3
7
|
# v0.8.3 - 2012-01-17
|
4
8
|
* Feature: Return an error when trying to execute a command for unknown calls/components or when not understood
|
5
9
|
* Feature: Log calls/translator shutting down
|
@@ -55,6 +55,18 @@ module Punchblock
|
|
55
55
|
write_attr :from, dial_from
|
56
56
|
end
|
57
57
|
|
58
|
+
##
|
59
|
+
# @return [Integer] timeout in milliseconds
|
60
|
+
def timeout
|
61
|
+
read_attr :timeout, :to_i
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# @param [Integer] other timeout in milliseconds
|
66
|
+
def timeout=(other)
|
67
|
+
write_attr :timeout, other
|
68
|
+
end
|
69
|
+
|
58
70
|
##
|
59
71
|
# @return [Join] the nested join
|
60
72
|
#
|
data/lib/punchblock/event.rb
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
module Punchblock
|
2
2
|
class Event < RayoNode
|
3
|
+
def self.new(options = {})
|
4
|
+
super().tap do |new_node|
|
5
|
+
case options
|
6
|
+
when Nokogiri::XML::Node
|
7
|
+
new_node.inherit options
|
8
|
+
when Hash
|
9
|
+
options.each_pair { |k,v| new_node.send :"#{k}=", v }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
3
13
|
end
|
4
14
|
end
|
5
15
|
|
@@ -3,25 +3,6 @@ module Punchblock
|
|
3
3
|
class DTMF < Event
|
4
4
|
register :dtmf, :core
|
5
5
|
|
6
|
-
##
|
7
|
-
# Create a DTMF event
|
8
|
-
#
|
9
|
-
# @param [Hash] options
|
10
|
-
# @option options [String, Optional] :signal the DTMF signal received
|
11
|
-
#
|
12
|
-
# @return [Event::DTMF] a formatted Rayo DTMF event
|
13
|
-
#
|
14
|
-
def self.new(options = {})
|
15
|
-
super().tap do |new_node|
|
16
|
-
case options
|
17
|
-
when Nokogiri::XML::Node
|
18
|
-
new_node.inherit options
|
19
|
-
when Hash
|
20
|
-
options.each_pair { |k,v| new_node.send :"#{k}=", v }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
6
|
def signal
|
26
7
|
read_attr :signal
|
27
8
|
end
|
data/lib/punchblock/event/end.rb
CHANGED
@@ -3,24 +3,7 @@ module Punchblock
|
|
3
3
|
class End < Event
|
4
4
|
register :end, :core
|
5
5
|
|
6
|
-
|
7
|
-
# Create an End event
|
8
|
-
#
|
9
|
-
# @param [Hash] options
|
10
|
-
# @option options [String, Optional] :reason the end reason
|
11
|
-
#
|
12
|
-
# @return [Event::End] a formatted Rayo end event
|
13
|
-
#
|
14
|
-
def self.new(options = {})
|
15
|
-
super().tap do |new_node|
|
16
|
-
case options
|
17
|
-
when Nokogiri::XML::Node
|
18
|
-
new_node.inherit options
|
19
|
-
when Hash
|
20
|
-
options.each_pair { |k,v| new_node.send :"#{k}=", v }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
6
|
+
include HasHeaders
|
24
7
|
|
25
8
|
def reason
|
26
9
|
children.select { |c| c.is_a? Nokogiri::XML::Element }.first.name.to_sym
|
@@ -3,21 +3,6 @@ module Punchblock
|
|
3
3
|
class Joined < Event
|
4
4
|
register :joined, :core
|
5
5
|
|
6
|
-
##
|
7
|
-
# Create a joined event
|
8
|
-
#
|
9
|
-
# @param [Hash] options
|
10
|
-
# @option options [String, Optional] :other_call_id the call ID that was joined
|
11
|
-
# @option options [String, Optional] :mixer_name the mixer name that was joined
|
12
|
-
#
|
13
|
-
# @return [Event::Joined] a formatted Rayo joined event
|
14
|
-
#
|
15
|
-
def self.new(options = {})
|
16
|
-
super().tap do |new_node|
|
17
|
-
options.each_pair { |k,v| new_node.send :"#{k}=", v }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
6
|
##
|
22
7
|
# @return [String] the call ID that was joined
|
23
8
|
def other_call_id
|
@@ -5,29 +5,6 @@ module Punchblock
|
|
5
5
|
|
6
6
|
include HasHeaders
|
7
7
|
|
8
|
-
##
|
9
|
-
# Create an Offer event
|
10
|
-
#
|
11
|
-
# @param [Hash] options
|
12
|
-
# @option options [String, Optional] :to the call targed
|
13
|
-
# @option options [String, Optional] :from the caller ID
|
14
|
-
# @option options [Array[Header], Hash, Optional] :headers SIP headers to attach to
|
15
|
-
# the call. Can be either a hash of key-value pairs, or an array of
|
16
|
-
# Header objects.
|
17
|
-
#
|
18
|
-
# @return [Event::Offer] a formatted Rayo offer event
|
19
|
-
#
|
20
|
-
def self.new(options = {})
|
21
|
-
super().tap do |new_node|
|
22
|
-
case options
|
23
|
-
when Nokogiri::XML::Node
|
24
|
-
new_node.inherit options
|
25
|
-
when Hash
|
26
|
-
options.each_pair { |k,v| new_node.send :"#{k}=", v }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
8
|
def to
|
32
9
|
read_attr :to
|
33
10
|
end
|
@@ -3,21 +3,6 @@ module Punchblock
|
|
3
3
|
class Unjoined < Event
|
4
4
|
register :unjoined, :core
|
5
5
|
|
6
|
-
##
|
7
|
-
# Create an unjoined event
|
8
|
-
#
|
9
|
-
# @param [Hash] options
|
10
|
-
# @option options [String, Optional] :other_call_id the call ID that was unjoined
|
11
|
-
# @option options [String, Optional] :mixer_name the mixer name that was unjoined
|
12
|
-
#
|
13
|
-
# @return [Event::Unjoined] a formatted Rayo unjoined event
|
14
|
-
#
|
15
|
-
def self.new(options = {})
|
16
|
-
super().tap do |new_node|
|
17
|
-
options.each_pair { |k,v| new_node.send :"#{k}=", v }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
6
|
##
|
22
7
|
# @return [String] the call ID that was unjoined
|
23
8
|
def other_call_id
|
data/lib/punchblock/version.rb
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
%w{
|
4
|
-
blather/client/dsl
|
5
|
-
punchblock/core_ext/blather/stanza
|
6
|
-
punchblock/core_ext/blather/stanza/presence
|
7
|
-
}.each { |f| require f }
|
8
|
-
|
9
3
|
module Punchblock
|
10
4
|
module Command
|
11
5
|
describe Dial do
|
@@ -17,19 +11,20 @@ module Punchblock
|
|
17
11
|
let(:join_params) { {:other_call_id => 'abc123'} }
|
18
12
|
|
19
13
|
describe "when setting options in initializer" do
|
20
|
-
subject { Dial.new :to => 'tel:+14155551212', :from => 'tel:+13035551212', :headers => { :x_skill => 'agent', :x_customer_id => 8877 }, :join => join_params }
|
14
|
+
subject { Dial.new :to => 'tel:+14155551212', :from => 'tel:+13035551212', :timeout => 30000, :headers => { :x_skill => 'agent', :x_customer_id => 8877 }, :join => join_params }
|
21
15
|
|
22
16
|
it_should_behave_like 'command_headers'
|
23
17
|
|
24
|
-
its(:to)
|
25
|
-
its(:from)
|
26
|
-
its(:
|
18
|
+
its(:to) { should == 'tel:+14155551212' }
|
19
|
+
its(:from) { should == 'tel:+13035551212' }
|
20
|
+
its(:timeout) { should == 30000 }
|
21
|
+
its(:join) { should == Join.new(join_params) }
|
27
22
|
end
|
28
23
|
|
29
24
|
describe "from a stanza" do
|
30
25
|
let :stanza do
|
31
26
|
<<-MESSAGE
|
32
|
-
<dial to='tel:+14155551212' from='tel:+13035551212' xmlns='urn:xmpp:rayo:1'>
|
27
|
+
<dial to='tel:+14155551212' from='tel:+13035551212' timeout='30000' xmlns='urn:xmpp:rayo:1'>
|
33
28
|
<join call-id="abc123" />
|
34
29
|
<header name="x-skill" value="agent" />
|
35
30
|
<header name="x-customer-id" value="8877" />
|
@@ -41,9 +36,10 @@ module Punchblock
|
|
41
36
|
|
42
37
|
it { should be_instance_of Dial }
|
43
38
|
|
44
|
-
its(:to)
|
45
|
-
its(:from)
|
46
|
-
its(:
|
39
|
+
its(:to) { should == 'tel:+14155551212' }
|
40
|
+
its(:from) { should == 'tel:+13035551212' }
|
41
|
+
its(:timeout) { should == 30000 }
|
42
|
+
its(:join) { should == Join.new(join_params) }
|
47
43
|
end
|
48
44
|
|
49
45
|
describe "#response=" do
|
@@ -8,16 +8,33 @@ module Punchblock
|
|
8
8
|
end
|
9
9
|
|
10
10
|
describe "from a stanza" do
|
11
|
-
let
|
11
|
+
let :stanza do
|
12
|
+
<<-MESSAGE
|
13
|
+
<answered xmlns='urn:xmpp:rayo:1'>
|
14
|
+
<!-- Signaling (e.g. SIP) Headers -->
|
15
|
+
<header name="x-skill" value="agent" />
|
16
|
+
<header name="x-customer-id" value="8877" />
|
17
|
+
</answered>
|
18
|
+
MESSAGE
|
19
|
+
end
|
12
20
|
|
13
21
|
subject { RayoNode.import parse_stanza(stanza).root, '9f00061', '1' }
|
14
22
|
|
15
23
|
it { should be_instance_of Answered }
|
16
24
|
|
17
25
|
it_should_behave_like 'event'
|
26
|
+
it_should_behave_like 'event_headers'
|
18
27
|
|
19
28
|
its(:xmlns) { should == 'urn:xmpp:rayo:1' }
|
20
29
|
end
|
30
|
+
|
31
|
+
describe "when setting options in initializer" do
|
32
|
+
subject do
|
33
|
+
Answered.new :headers => { :x_skill => "agent", :x_customer_id => "8877" }
|
34
|
+
end
|
35
|
+
|
36
|
+
it_should_behave_like 'event_headers'
|
37
|
+
end
|
21
38
|
end
|
22
39
|
end
|
23
40
|
end # Punchblock
|
@@ -12,6 +12,9 @@ module Punchblock
|
|
12
12
|
<<-MESSAGE
|
13
13
|
<end xmlns="urn:xmpp:rayo:1">
|
14
14
|
<timeout />
|
15
|
+
<!-- Signaling (e.g. SIP) Headers -->
|
16
|
+
<header name="x-skill" value="agent" />
|
17
|
+
<header name="x-customer-id" value="8877" />
|
15
18
|
</end>
|
16
19
|
MESSAGE
|
17
20
|
end
|
@@ -21,6 +24,7 @@ module Punchblock
|
|
21
24
|
it { should be_instance_of End }
|
22
25
|
|
23
26
|
it_should_behave_like 'event'
|
27
|
+
it_should_behave_like 'event_headers'
|
24
28
|
|
25
29
|
its(:reason) { should == :timeout }
|
26
30
|
its(:xmlns) { should == 'urn:xmpp:rayo:1' }
|
@@ -28,10 +32,12 @@ module Punchblock
|
|
28
32
|
|
29
33
|
describe "when setting options in initializer" do
|
30
34
|
subject do
|
31
|
-
End.new :reason => :hangup
|
35
|
+
End.new :reason => :hangup,
|
36
|
+
:headers => { :x_skill => "agent", :x_customer_id => "8877" }
|
32
37
|
end
|
33
38
|
|
34
39
|
its(:reason) { should == :hangup }
|
40
|
+
it_should_behave_like 'event_headers'
|
35
41
|
end
|
36
42
|
end
|
37
43
|
end
|
@@ -8,16 +8,33 @@ module Punchblock
|
|
8
8
|
end
|
9
9
|
|
10
10
|
describe "from a stanza" do
|
11
|
-
let
|
11
|
+
let :stanza do
|
12
|
+
<<-MESSAGE
|
13
|
+
<ringing xmlns='urn:xmpp:rayo:1'>
|
14
|
+
<!-- Signaling (e.g. SIP) Headers -->
|
15
|
+
<header name="x-skill" value="agent" />
|
16
|
+
<header name="x-customer-id" value="8877" />
|
17
|
+
</ringing>
|
18
|
+
MESSAGE
|
19
|
+
end
|
12
20
|
|
13
21
|
subject { RayoNode.import parse_stanza(stanza).root, '9f00061', '1' }
|
14
22
|
|
15
23
|
it { should be_instance_of Ringing }
|
16
24
|
|
17
25
|
it_should_behave_like 'event'
|
26
|
+
it_should_behave_like 'event_headers'
|
18
27
|
|
19
28
|
its(:xmlns) { should == 'urn:xmpp:rayo:1' }
|
20
29
|
end
|
30
|
+
|
31
|
+
describe "when setting options in initializer" do
|
32
|
+
subject do
|
33
|
+
Ringing.new :headers => { :x_skill => "agent", :x_customer_id => "8877" }
|
34
|
+
end
|
35
|
+
|
36
|
+
it_should_behave_like 'event_headers'
|
37
|
+
end
|
21
38
|
end
|
22
39
|
end
|
23
40
|
end # Punchblock
|
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: 0.8.
|
4
|
+
version: 0.8.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-01-
|
14
|
+
date: 2012-01-19 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: niceogiri
|
18
|
-
requirement: &
|
18
|
+
requirement: &2152348840 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: 0.0.4
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *2152348840
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: blather
|
29
|
-
requirement: &
|
29
|
+
requirement: &2152347280 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: 0.5.12
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *2152347280
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: activesupport
|
40
|
-
requirement: &
|
40
|
+
requirement: &2152345280 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: 2.1.0
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *2152345280
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: state_machine
|
51
|
-
requirement: &
|
51
|
+
requirement: &2152344340 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ! '>='
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: 1.0.1
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *2152344340
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: future-resource
|
62
|
-
requirement: &
|
62
|
+
requirement: &2156165100 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ! '>='
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: 0.0.2
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *2156165100
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: has-guarded-handlers
|
73
|
-
requirement: &
|
73
|
+
requirement: &2156161800 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: 0.1.0
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *2156161800
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: celluloid
|
84
|
-
requirement: &
|
84
|
+
requirement: &2156160660 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ! '>='
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: 0.6.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *2156160660
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: ruby_ami
|
95
|
-
requirement: &
|
95
|
+
requirement: &2156158320 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ! '>='
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: 0.1.3
|
101
101
|
type: :runtime
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *2156158320
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: ruby_speech
|
106
|
-
requirement: &
|
106
|
+
requirement: &2156144520 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ! '>='
|
@@ -111,10 +111,10 @@ dependencies:
|
|
111
111
|
version: 0.5.1
|
112
112
|
type: :runtime
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *2156144520
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: bundler
|
117
|
-
requirement: &
|
117
|
+
requirement: &2156142420 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ~>
|
@@ -122,10 +122,10 @@ dependencies:
|
|
122
122
|
version: 1.0.0
|
123
123
|
type: :development
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *2156142420
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rspec
|
128
|
-
requirement: &
|
128
|
+
requirement: &2156139000 !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
131
131
|
- - ~>
|
@@ -133,10 +133,10 @@ dependencies:
|
|
133
133
|
version: 2.7.0
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
|
-
version_requirements: *
|
136
|
+
version_requirements: *2156139000
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
138
|
name: ci_reporter
|
139
|
-
requirement: &
|
139
|
+
requirement: &2156137680 !ruby/object:Gem::Requirement
|
140
140
|
none: false
|
141
141
|
requirements:
|
142
142
|
- - ! '>='
|
@@ -144,10 +144,10 @@ dependencies:
|
|
144
144
|
version: 1.6.3
|
145
145
|
type: :development
|
146
146
|
prerelease: false
|
147
|
-
version_requirements: *
|
147
|
+
version_requirements: *2156137680
|
148
148
|
- !ruby/object:Gem::Dependency
|
149
149
|
name: yard
|
150
|
-
requirement: &
|
150
|
+
requirement: &2156134180 !ruby/object:Gem::Requirement
|
151
151
|
none: false
|
152
152
|
requirements:
|
153
153
|
- - ~>
|
@@ -155,10 +155,10 @@ dependencies:
|
|
155
155
|
version: 0.6.0
|
156
156
|
type: :development
|
157
157
|
prerelease: false
|
158
|
-
version_requirements: *
|
158
|
+
version_requirements: *2156134180
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: rcov
|
161
|
-
requirement: &
|
161
|
+
requirement: &2156132420 !ruby/object:Gem::Requirement
|
162
162
|
none: false
|
163
163
|
requirements:
|
164
164
|
- - ! '>='
|
@@ -166,10 +166,10 @@ dependencies:
|
|
166
166
|
version: '0'
|
167
167
|
type: :development
|
168
168
|
prerelease: false
|
169
|
-
version_requirements: *
|
169
|
+
version_requirements: *2156132420
|
170
170
|
- !ruby/object:Gem::Dependency
|
171
171
|
name: rake
|
172
|
-
requirement: &
|
172
|
+
requirement: &2156131300 !ruby/object:Gem::Requirement
|
173
173
|
none: false
|
174
174
|
requirements:
|
175
175
|
- - ! '>='
|
@@ -177,10 +177,10 @@ dependencies:
|
|
177
177
|
version: '0'
|
178
178
|
type: :development
|
179
179
|
prerelease: false
|
180
|
-
version_requirements: *
|
180
|
+
version_requirements: *2156131300
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: mocha
|
183
|
-
requirement: &
|
183
|
+
requirement: &2156129300 !ruby/object:Gem::Requirement
|
184
184
|
none: false
|
185
185
|
requirements:
|
186
186
|
- - ! '>='
|
@@ -188,10 +188,10 @@ dependencies:
|
|
188
188
|
version: '0'
|
189
189
|
type: :development
|
190
190
|
prerelease: false
|
191
|
-
version_requirements: *
|
191
|
+
version_requirements: *2156129300
|
192
192
|
- !ruby/object:Gem::Dependency
|
193
193
|
name: i18n
|
194
|
-
requirement: &
|
194
|
+
requirement: &2156120240 !ruby/object:Gem::Requirement
|
195
195
|
none: false
|
196
196
|
requirements:
|
197
197
|
- - ! '>='
|
@@ -199,10 +199,10 @@ dependencies:
|
|
199
199
|
version: '0'
|
200
200
|
type: :development
|
201
201
|
prerelease: false
|
202
|
-
version_requirements: *
|
202
|
+
version_requirements: *2156120240
|
203
203
|
- !ruby/object:Gem::Dependency
|
204
204
|
name: countdownlatch
|
205
|
-
requirement: &
|
205
|
+
requirement: &2156117560 !ruby/object:Gem::Requirement
|
206
206
|
none: false
|
207
207
|
requirements:
|
208
208
|
- - ! '>='
|
@@ -210,10 +210,10 @@ dependencies:
|
|
210
210
|
version: '0'
|
211
211
|
type: :development
|
212
212
|
prerelease: false
|
213
|
-
version_requirements: *
|
213
|
+
version_requirements: *2156117560
|
214
214
|
- !ruby/object:Gem::Dependency
|
215
215
|
name: guard-rspec
|
216
|
-
requirement: &
|
216
|
+
requirement: &2156075180 !ruby/object:Gem::Requirement
|
217
217
|
none: false
|
218
218
|
requirements:
|
219
219
|
- - ! '>='
|
@@ -221,7 +221,7 @@ dependencies:
|
|
221
221
|
version: '0'
|
222
222
|
type: :development
|
223
223
|
prerelease: false
|
224
|
-
version_requirements: *
|
224
|
+
version_requirements: *2156075180
|
225
225
|
description: Like Rack is to Rails and Sinatra, Punchblock provides a consistent API
|
226
226
|
on top of several underlying third-party call control protocols.
|
227
227
|
email: punchblock@adhearsion.com
|
@@ -364,7 +364,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
364
364
|
version: '0'
|
365
365
|
segments:
|
366
366
|
- 0
|
367
|
-
hash:
|
367
|
+
hash: -2039809251711287548
|
368
368
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
369
369
|
none: false
|
370
370
|
requirements:
|