punchblock 0.4.0 → 0.4.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/CHANGELOG.md +5 -0
- data/lib/punchblock.rb +6 -3
- data/lib/punchblock/component.rb +15 -11
- data/lib/punchblock/component/tropo/conference.rb +7 -5
- data/lib/punchblock/version.rb +1 -1
- data/punchblock.gemspec +1 -0
- data/spec/punchblock/component/tropo/conference_spec.rb +4 -4
- data/spec/punchblock/component_spec.rb +11 -42
- data/spec/punchblock/connection_spec.rb +1 -1
- metadata +46 -34
data/CHANGELOG.md
ADDED
data/lib/punchblock.rb
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
%w{
|
|
2
|
+
active_support/dependencies/autoload
|
|
3
|
+
active_support/core_ext/object/blank
|
|
4
|
+
future-resource
|
|
5
|
+
has_guarded_handlers
|
|
6
|
+
}.each { |l| require l }
|
|
4
7
|
|
|
5
8
|
module Punchblock
|
|
6
9
|
extend ActiveSupport::Autoload
|
data/lib/punchblock/component.rb
CHANGED
|
@@ -10,27 +10,31 @@ module Punchblock
|
|
|
10
10
|
InvalidActionError = Class.new StandardError
|
|
11
11
|
|
|
12
12
|
class ComponentNode < CommandNode
|
|
13
|
-
|
|
13
|
+
include HasGuardedHandlers
|
|
14
|
+
|
|
15
|
+
attr_accessor :complete_event
|
|
14
16
|
|
|
15
17
|
def initialize(*args)
|
|
16
18
|
super
|
|
17
|
-
@event_queue = Queue.new
|
|
18
19
|
@complete_event = FutureResource.new
|
|
19
|
-
|
|
20
|
+
register_initial_handlers
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def register_initial_handlers
|
|
24
|
+
register_event_handler Event::Complete do |event|
|
|
25
|
+
complete!
|
|
26
|
+
complete_event.resource = event
|
|
27
|
+
throw :pass
|
|
28
|
+
end
|
|
20
29
|
end
|
|
21
30
|
|
|
22
31
|
def add_event(event)
|
|
23
32
|
event.original_component = self
|
|
24
|
-
|
|
25
|
-
complete_event.resource = event if event.is_a? Event::Complete
|
|
26
|
-
if event_callback.respond_to?(:call)
|
|
27
|
-
add_event_to_queue = event_callback.call event
|
|
28
|
-
end
|
|
29
|
-
@event_queue << event unless add_event_to_queue
|
|
33
|
+
trigger_handler :event, event
|
|
30
34
|
end
|
|
31
35
|
|
|
32
|
-
def
|
|
33
|
-
|
|
36
|
+
def register_event_handler(*guards, &block)
|
|
37
|
+
register_handler :event, *guards, &block
|
|
34
38
|
end
|
|
35
39
|
|
|
36
40
|
def write_action(action)
|
|
@@ -149,13 +149,15 @@ module Punchblock
|
|
|
149
149
|
[:name, :mute, :terminator, :tone_passthrough, :moderator, :announcement, :music] + super
|
|
150
150
|
end
|
|
151
151
|
|
|
152
|
-
def
|
|
153
|
-
|
|
154
|
-
case event
|
|
155
|
-
when OnHold
|
|
152
|
+
def register_initial_handlers
|
|
153
|
+
register_event_handler OnHold do |event|
|
|
156
154
|
onhold!
|
|
157
|
-
|
|
155
|
+
throw :pass
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
register_event_handler OffHold do |event|
|
|
158
159
|
offhold!
|
|
160
|
+
throw :pass
|
|
159
161
|
end
|
|
160
162
|
end
|
|
161
163
|
|
data/lib/punchblock/version.rb
CHANGED
data/punchblock.gemspec
CHANGED
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
|
28
28
|
s.add_runtime_dependency %q<activesupport>, [">= 2.1.0"]
|
|
29
29
|
s.add_runtime_dependency %q<state_machine>, [">= 1.0.1"]
|
|
30
30
|
s.add_runtime_dependency %q<future-resource>, [">= 0.0.2"]
|
|
31
|
+
s.add_runtime_dependency %q<has-guarded-handlers>, [">= 0.0.3"]
|
|
31
32
|
|
|
32
33
|
s.add_development_dependency %q<bundler>, ["~> 1.0.0"]
|
|
33
34
|
s.add_development_dependency %q<rspec>, ["~> 2.3.0"]
|
|
@@ -40,21 +40,21 @@ module Punchblock
|
|
|
40
40
|
it { should_not == conference3 }
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
describe "#
|
|
43
|
+
describe "#add_event" do
|
|
44
44
|
describe "with an on-hold" do
|
|
45
45
|
it "should call #onhold!" do
|
|
46
46
|
subject.expects(:onhold!).once
|
|
47
|
-
subject.
|
|
47
|
+
subject.add_event Conference::OnHold.new
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
describe "with an off-hold" do
|
|
52
52
|
it "should call #offhold!" do
|
|
53
53
|
subject.expects(:offhold!).once
|
|
54
|
-
subject.
|
|
54
|
+
subject.add_event Conference::OffHold.new
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
|
-
end
|
|
57
|
+
end
|
|
58
58
|
|
|
59
59
|
describe "#requested" do
|
|
60
60
|
context "when requesting to be muted" do
|
|
@@ -9,8 +9,6 @@ require 'spec_helper'
|
|
|
9
9
|
module Punchblock
|
|
10
10
|
module Component
|
|
11
11
|
describe ComponentNode do
|
|
12
|
-
its(:event_queue) { should be_empty }
|
|
13
|
-
|
|
14
12
|
it "should not initially have a complete event set" do
|
|
15
13
|
subject.complete_event.set_yet?.should == false
|
|
16
14
|
end
|
|
@@ -25,27 +23,22 @@ module Punchblock
|
|
|
25
23
|
|
|
26
24
|
let(:add_event) { subject.add_event event }
|
|
27
25
|
|
|
28
|
-
it "should
|
|
29
|
-
add_event
|
|
30
|
-
subject.event_queue.pop(false).should == event
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should set the original event on the command" do
|
|
26
|
+
it "should set the original component on the event" do
|
|
34
27
|
add_event
|
|
35
28
|
event.original_component.should == subject
|
|
36
29
|
end
|
|
37
30
|
|
|
38
|
-
it "should trigger state transition" do
|
|
39
|
-
subject.expects(:transition_state!).once.with event
|
|
40
|
-
add_event
|
|
41
|
-
end
|
|
42
|
-
|
|
43
31
|
describe "with a complete event" do
|
|
44
32
|
it "should set the complete event resource" do
|
|
45
33
|
add_event
|
|
46
34
|
subject.complete_event.set_yet?.should == true
|
|
47
35
|
subject.complete_event.resource.should == event
|
|
48
36
|
end
|
|
37
|
+
|
|
38
|
+
it "should call #complete!" do
|
|
39
|
+
subject.expects(:complete!).once
|
|
40
|
+
add_event
|
|
41
|
+
end
|
|
49
42
|
end
|
|
50
43
|
|
|
51
44
|
describe "with another event" do
|
|
@@ -57,44 +50,20 @@ module Punchblock
|
|
|
57
50
|
end
|
|
58
51
|
end
|
|
59
52
|
|
|
60
|
-
describe "with an event
|
|
61
|
-
let(:
|
|
53
|
+
describe "with an event handler set" do
|
|
54
|
+
let(:handler) { mock 'Response' }
|
|
62
55
|
|
|
63
56
|
before do
|
|
64
|
-
|
|
65
|
-
subject.
|
|
66
|
-
add_event
|
|
57
|
+
handler.expects(:call).once.with(event)
|
|
58
|
+
subject.register_event_handler { |event| handler.call event }
|
|
67
59
|
end
|
|
68
60
|
|
|
69
61
|
it "should trigger the callback" do
|
|
70
|
-
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should not write the event to the event queue" do
|
|
74
|
-
subject.event_queue.should be_empty
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
describe "which returns a falsy value" do
|
|
78
|
-
let(:event_callback) do
|
|
79
|
-
lambda { |event| false }
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should add the event to the event queue" do
|
|
83
|
-
subject.event_queue.should_not be_empty
|
|
84
|
-
end
|
|
62
|
+
add_event
|
|
85
63
|
end
|
|
86
64
|
end
|
|
87
65
|
end # #add_event
|
|
88
66
|
|
|
89
|
-
describe "#transition_state!" do
|
|
90
|
-
describe "with a complete" do
|
|
91
|
-
it "should call #complete!" do
|
|
92
|
-
subject.expects(:complete!).once
|
|
93
|
-
subject.transition_state! Event::Complete.new
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end # #transition_state!
|
|
97
|
-
|
|
98
67
|
describe "#response=" do
|
|
99
68
|
before do
|
|
100
69
|
subject.request!
|
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.4.
|
|
4
|
+
version: 0.4.1
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -11,12 +11,12 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2011-09-
|
|
14
|
+
date: 2011-09-21 00:00:00.000000000 +01:00
|
|
15
15
|
default_executable:
|
|
16
16
|
dependencies:
|
|
17
17
|
- !ruby/object:Gem::Dependency
|
|
18
18
|
name: niceogiri
|
|
19
|
-
requirement: &
|
|
19
|
+
requirement: &2160644940 !ruby/object:Gem::Requirement
|
|
20
20
|
none: false
|
|
21
21
|
requirements:
|
|
22
22
|
- - ! '>='
|
|
@@ -24,10 +24,10 @@ dependencies:
|
|
|
24
24
|
version: 0.0.4
|
|
25
25
|
type: :runtime
|
|
26
26
|
prerelease: false
|
|
27
|
-
version_requirements: *
|
|
27
|
+
version_requirements: *2160644940
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: blather
|
|
30
|
-
requirement: &
|
|
30
|
+
requirement: &2160644340 !ruby/object:Gem::Requirement
|
|
31
31
|
none: false
|
|
32
32
|
requirements:
|
|
33
33
|
- - ! '>='
|
|
@@ -35,10 +35,10 @@ dependencies:
|
|
|
35
35
|
version: 0.5.3
|
|
36
36
|
type: :runtime
|
|
37
37
|
prerelease: false
|
|
38
|
-
version_requirements: *
|
|
38
|
+
version_requirements: *2160644340
|
|
39
39
|
- !ruby/object:Gem::Dependency
|
|
40
40
|
name: pry
|
|
41
|
-
requirement: &
|
|
41
|
+
requirement: &2160643800 !ruby/object:Gem::Requirement
|
|
42
42
|
none: false
|
|
43
43
|
requirements:
|
|
44
44
|
- - ! '>='
|
|
@@ -46,10 +46,10 @@ dependencies:
|
|
|
46
46
|
version: 0.8.3
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
|
-
version_requirements: *
|
|
49
|
+
version_requirements: *2160643800
|
|
50
50
|
- !ruby/object:Gem::Dependency
|
|
51
51
|
name: activesupport
|
|
52
|
-
requirement: &
|
|
52
|
+
requirement: &2160643280 !ruby/object:Gem::Requirement
|
|
53
53
|
none: false
|
|
54
54
|
requirements:
|
|
55
55
|
- - ! '>='
|
|
@@ -57,10 +57,10 @@ dependencies:
|
|
|
57
57
|
version: 2.1.0
|
|
58
58
|
type: :runtime
|
|
59
59
|
prerelease: false
|
|
60
|
-
version_requirements: *
|
|
60
|
+
version_requirements: *2160643280
|
|
61
61
|
- !ruby/object:Gem::Dependency
|
|
62
62
|
name: state_machine
|
|
63
|
-
requirement: &
|
|
63
|
+
requirement: &2160642700 !ruby/object:Gem::Requirement
|
|
64
64
|
none: false
|
|
65
65
|
requirements:
|
|
66
66
|
- - ! '>='
|
|
@@ -68,10 +68,10 @@ dependencies:
|
|
|
68
68
|
version: 1.0.1
|
|
69
69
|
type: :runtime
|
|
70
70
|
prerelease: false
|
|
71
|
-
version_requirements: *
|
|
71
|
+
version_requirements: *2160642700
|
|
72
72
|
- !ruby/object:Gem::Dependency
|
|
73
73
|
name: future-resource
|
|
74
|
-
requirement: &
|
|
74
|
+
requirement: &2160642220 !ruby/object:Gem::Requirement
|
|
75
75
|
none: false
|
|
76
76
|
requirements:
|
|
77
77
|
- - ! '>='
|
|
@@ -79,10 +79,21 @@ dependencies:
|
|
|
79
79
|
version: 0.0.2
|
|
80
80
|
type: :runtime
|
|
81
81
|
prerelease: false
|
|
82
|
-
version_requirements: *
|
|
82
|
+
version_requirements: *2160642220
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: has-guarded-handlers
|
|
85
|
+
requirement: &2160641740 !ruby/object:Gem::Requirement
|
|
86
|
+
none: false
|
|
87
|
+
requirements:
|
|
88
|
+
- - ! '>='
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: 0.0.3
|
|
91
|
+
type: :runtime
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: *2160641740
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
|
84
95
|
name: bundler
|
|
85
|
-
requirement: &
|
|
96
|
+
requirement: &2160641260 !ruby/object:Gem::Requirement
|
|
86
97
|
none: false
|
|
87
98
|
requirements:
|
|
88
99
|
- - ~>
|
|
@@ -90,10 +101,10 @@ dependencies:
|
|
|
90
101
|
version: 1.0.0
|
|
91
102
|
type: :development
|
|
92
103
|
prerelease: false
|
|
93
|
-
version_requirements: *
|
|
104
|
+
version_requirements: *2160641260
|
|
94
105
|
- !ruby/object:Gem::Dependency
|
|
95
106
|
name: rspec
|
|
96
|
-
requirement: &
|
|
107
|
+
requirement: &2160640780 !ruby/object:Gem::Requirement
|
|
97
108
|
none: false
|
|
98
109
|
requirements:
|
|
99
110
|
- - ~>
|
|
@@ -101,10 +112,10 @@ dependencies:
|
|
|
101
112
|
version: 2.3.0
|
|
102
113
|
type: :development
|
|
103
114
|
prerelease: false
|
|
104
|
-
version_requirements: *
|
|
115
|
+
version_requirements: *2160640780
|
|
105
116
|
- !ruby/object:Gem::Dependency
|
|
106
117
|
name: ci_reporter
|
|
107
|
-
requirement: &
|
|
118
|
+
requirement: &2160640260 !ruby/object:Gem::Requirement
|
|
108
119
|
none: false
|
|
109
120
|
requirements:
|
|
110
121
|
- - ! '>='
|
|
@@ -112,10 +123,10 @@ dependencies:
|
|
|
112
123
|
version: 1.6.3
|
|
113
124
|
type: :development
|
|
114
125
|
prerelease: false
|
|
115
|
-
version_requirements: *
|
|
126
|
+
version_requirements: *2160640260
|
|
116
127
|
- !ruby/object:Gem::Dependency
|
|
117
128
|
name: yard
|
|
118
|
-
requirement: &
|
|
129
|
+
requirement: &2160639760 !ruby/object:Gem::Requirement
|
|
119
130
|
none: false
|
|
120
131
|
requirements:
|
|
121
132
|
- - ~>
|
|
@@ -123,10 +134,10 @@ dependencies:
|
|
|
123
134
|
version: 0.6.0
|
|
124
135
|
type: :development
|
|
125
136
|
prerelease: false
|
|
126
|
-
version_requirements: *
|
|
137
|
+
version_requirements: *2160639760
|
|
127
138
|
- !ruby/object:Gem::Dependency
|
|
128
139
|
name: bluecloth
|
|
129
|
-
requirement: &
|
|
140
|
+
requirement: &2160639260 !ruby/object:Gem::Requirement
|
|
130
141
|
none: false
|
|
131
142
|
requirements:
|
|
132
143
|
- - ! '>='
|
|
@@ -134,10 +145,10 @@ dependencies:
|
|
|
134
145
|
version: '0'
|
|
135
146
|
type: :development
|
|
136
147
|
prerelease: false
|
|
137
|
-
version_requirements: *
|
|
148
|
+
version_requirements: *2160639260
|
|
138
149
|
- !ruby/object:Gem::Dependency
|
|
139
150
|
name: rcov
|
|
140
|
-
requirement: &
|
|
151
|
+
requirement: &2160638780 !ruby/object:Gem::Requirement
|
|
141
152
|
none: false
|
|
142
153
|
requirements:
|
|
143
154
|
- - ! '>='
|
|
@@ -145,10 +156,10 @@ dependencies:
|
|
|
145
156
|
version: '0'
|
|
146
157
|
type: :development
|
|
147
158
|
prerelease: false
|
|
148
|
-
version_requirements: *
|
|
159
|
+
version_requirements: *2160638780
|
|
149
160
|
- !ruby/object:Gem::Dependency
|
|
150
161
|
name: rake
|
|
151
|
-
requirement: &
|
|
162
|
+
requirement: &2160638280 !ruby/object:Gem::Requirement
|
|
152
163
|
none: false
|
|
153
164
|
requirements:
|
|
154
165
|
- - ! '>='
|
|
@@ -156,10 +167,10 @@ dependencies:
|
|
|
156
167
|
version: '0'
|
|
157
168
|
type: :development
|
|
158
169
|
prerelease: false
|
|
159
|
-
version_requirements: *
|
|
170
|
+
version_requirements: *2160638280
|
|
160
171
|
- !ruby/object:Gem::Dependency
|
|
161
172
|
name: mocha
|
|
162
|
-
requirement: &
|
|
173
|
+
requirement: &2160637800 !ruby/object:Gem::Requirement
|
|
163
174
|
none: false
|
|
164
175
|
requirements:
|
|
165
176
|
- - ! '>='
|
|
@@ -167,10 +178,10 @@ dependencies:
|
|
|
167
178
|
version: '0'
|
|
168
179
|
type: :development
|
|
169
180
|
prerelease: false
|
|
170
|
-
version_requirements: *
|
|
181
|
+
version_requirements: *2160637800
|
|
171
182
|
- !ruby/object:Gem::Dependency
|
|
172
183
|
name: i18n
|
|
173
|
-
requirement: &
|
|
184
|
+
requirement: &2160637300 !ruby/object:Gem::Requirement
|
|
174
185
|
none: false
|
|
175
186
|
requirements:
|
|
176
187
|
- - ! '>='
|
|
@@ -178,10 +189,10 @@ dependencies:
|
|
|
178
189
|
version: '0'
|
|
179
190
|
type: :development
|
|
180
191
|
prerelease: false
|
|
181
|
-
version_requirements: *
|
|
192
|
+
version_requirements: *2160637300
|
|
182
193
|
- !ruby/object:Gem::Dependency
|
|
183
194
|
name: countdownlatch
|
|
184
|
-
requirement: &
|
|
195
|
+
requirement: &2160636780 !ruby/object:Gem::Requirement
|
|
185
196
|
none: false
|
|
186
197
|
requirements:
|
|
187
198
|
- - ! '>='
|
|
@@ -189,7 +200,7 @@ dependencies:
|
|
|
189
200
|
version: '0'
|
|
190
201
|
type: :development
|
|
191
202
|
prerelease: false
|
|
192
|
-
version_requirements: *
|
|
203
|
+
version_requirements: *2160636780
|
|
193
204
|
description: Like Rack is to Rails and Sinatra, Punchblock provides a consistent API
|
|
194
205
|
on top of several underlying third-party call control protocols.
|
|
195
206
|
email: punchblock@adhearsion.com
|
|
@@ -201,6 +212,7 @@ files:
|
|
|
201
212
|
- .document
|
|
202
213
|
- .gitignore
|
|
203
214
|
- .rspec
|
|
215
|
+
- CHANGELOG.md
|
|
204
216
|
- Gemfile
|
|
205
217
|
- LICENSE.txt
|
|
206
218
|
- README.markdown
|