punchblock 0.8.4 → 0.9.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.
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
4
+ version: 0.9.0
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-19 00:00:00.000000000 Z
14
+ date: 2012-01-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: niceogiri
18
- requirement: &2152348840 !ruby/object:Gem::Requirement
18
+ requirement: &2156354020 !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: *2152348840
26
+ version_requirements: *2156354020
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: blather
29
- requirement: &2152347280 !ruby/object:Gem::Requirement
29
+ requirement: &2156353400 !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: *2152347280
37
+ version_requirements: *2156353400
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: activesupport
40
- requirement: &2152345280 !ruby/object:Gem::Requirement
40
+ requirement: &2156352860 !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: *2152345280
48
+ version_requirements: *2156352860
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: state_machine
51
- requirement: &2152344340 !ruby/object:Gem::Requirement
51
+ requirement: &2156352080 !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: *2152344340
59
+ version_requirements: *2156352080
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: future-resource
62
- requirement: &2156165100 !ruby/object:Gem::Requirement
62
+ requirement: &2156351380 !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: *2156165100
70
+ version_requirements: *2156351380
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: has-guarded-handlers
73
- requirement: &2156161800 !ruby/object:Gem::Requirement
73
+ requirement: &2156350580 !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: *2156161800
81
+ version_requirements: *2156350580
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: celluloid
84
- requirement: &2156160660 !ruby/object:Gem::Requirement
84
+ requirement: &2156349440 !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: *2156160660
92
+ version_requirements: *2156349440
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: ruby_ami
95
- requirement: &2156158320 !ruby/object:Gem::Requirement
95
+ requirement: &2156348720 !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: *2156158320
103
+ version_requirements: *2156348720
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: ruby_speech
106
- requirement: &2156144520 !ruby/object:Gem::Requirement
106
+ requirement: &2156347760 !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: *2156144520
114
+ version_requirements: *2156347760
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: bundler
117
- requirement: &2156142420 !ruby/object:Gem::Requirement
117
+ requirement: &2156344520 !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: *2156142420
125
+ version_requirements: *2156344520
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: rspec
128
- requirement: &2156139000 !ruby/object:Gem::Requirement
128
+ requirement: &2156343760 !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: *2156139000
136
+ version_requirements: *2156343760
137
137
  - !ruby/object:Gem::Dependency
138
138
  name: ci_reporter
139
- requirement: &2156137680 !ruby/object:Gem::Requirement
139
+ requirement: &2156343140 !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: *2156137680
147
+ version_requirements: *2156343140
148
148
  - !ruby/object:Gem::Dependency
149
149
  name: yard
150
- requirement: &2156134180 !ruby/object:Gem::Requirement
150
+ requirement: &2156342280 !ruby/object:Gem::Requirement
151
151
  none: false
152
152
  requirements:
153
153
  - - ~>
@@ -155,21 +155,10 @@ dependencies:
155
155
  version: 0.6.0
156
156
  type: :development
157
157
  prerelease: false
158
- version_requirements: *2156134180
159
- - !ruby/object:Gem::Dependency
160
- name: rcov
161
- requirement: &2156132420 !ruby/object:Gem::Requirement
162
- none: false
163
- requirements:
164
- - - ! '>='
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- type: :development
168
- prerelease: false
169
- version_requirements: *2156132420
158
+ version_requirements: *2156342280
170
159
  - !ruby/object:Gem::Dependency
171
160
  name: rake
172
- requirement: &2156131300 !ruby/object:Gem::Requirement
161
+ requirement: &2156341340 !ruby/object:Gem::Requirement
173
162
  none: false
174
163
  requirements:
175
164
  - - ! '>='
@@ -177,10 +166,10 @@ dependencies:
177
166
  version: '0'
178
167
  type: :development
179
168
  prerelease: false
180
- version_requirements: *2156131300
169
+ version_requirements: *2156341340
181
170
  - !ruby/object:Gem::Dependency
182
171
  name: mocha
183
- requirement: &2156129300 !ruby/object:Gem::Requirement
172
+ requirement: &2156340520 !ruby/object:Gem::Requirement
184
173
  none: false
185
174
  requirements:
186
175
  - - ! '>='
@@ -188,10 +177,10 @@ dependencies:
188
177
  version: '0'
189
178
  type: :development
190
179
  prerelease: false
191
- version_requirements: *2156129300
180
+ version_requirements: *2156340520
192
181
  - !ruby/object:Gem::Dependency
193
182
  name: i18n
194
- requirement: &2156120240 !ruby/object:Gem::Requirement
183
+ requirement: &2156339920 !ruby/object:Gem::Requirement
195
184
  none: false
196
185
  requirements:
197
186
  - - ! '>='
@@ -199,10 +188,10 @@ dependencies:
199
188
  version: '0'
200
189
  type: :development
201
190
  prerelease: false
202
- version_requirements: *2156120240
191
+ version_requirements: *2156339920
203
192
  - !ruby/object:Gem::Dependency
204
193
  name: countdownlatch
205
- requirement: &2156117560 !ruby/object:Gem::Requirement
194
+ requirement: &2156339260 !ruby/object:Gem::Requirement
206
195
  none: false
207
196
  requirements:
208
197
  - - ! '>='
@@ -210,10 +199,10 @@ dependencies:
210
199
  version: '0'
211
200
  type: :development
212
201
  prerelease: false
213
- version_requirements: *2156117560
202
+ version_requirements: *2156339260
214
203
  - !ruby/object:Gem::Dependency
215
204
  name: guard-rspec
216
- requirement: &2156075180 !ruby/object:Gem::Requirement
205
+ requirement: &2156338720 !ruby/object:Gem::Requirement
217
206
  none: false
218
207
  requirements:
219
208
  - - ! '>='
@@ -221,7 +210,7 @@ dependencies:
221
210
  version: '0'
222
211
  type: :development
223
212
  prerelease: false
224
- version_requirements: *2156075180
213
+ version_requirements: *2156338720
225
214
  description: Like Rack is to Rails and Sinatra, Punchblock provides a consistent API
226
215
  on top of several underlying third-party call control protocols.
227
216
  email: punchblock@adhearsion.com
@@ -232,6 +221,7 @@ files:
232
221
  - .document
233
222
  - .gitignore
234
223
  - .rspec
224
+ - .travis.yml
235
225
  - CHANGELOG.md
236
226
  - Gemfile
237
227
  - Guardfile
@@ -264,8 +254,6 @@ files:
264
254
  - lib/punchblock/component/output.rb
265
255
  - lib/punchblock/component/record.rb
266
256
  - lib/punchblock/component/stop.rb
267
- - lib/punchblock/component/tropo.rb
268
- - lib/punchblock/component/tropo/conference.rb
269
257
  - lib/punchblock/connection.rb
270
258
  - lib/punchblock/connection/asterisk.rb
271
259
  - lib/punchblock/connection/connected.rb
@@ -302,8 +290,8 @@ files:
302
290
  - lib/punchblock/translator/asterisk/component/asterisk.rb
303
291
  - lib/punchblock/translator/asterisk/component/asterisk/agi_command.rb
304
292
  - lib/punchblock/translator/asterisk/component/asterisk/ami_action.rb
305
- - lib/punchblock/translator/asterisk/component/asterisk/input.rb
306
- - lib/punchblock/translator/asterisk/component/asterisk/output.rb
293
+ - lib/punchblock/translator/asterisk/component/input.rb
294
+ - lib/punchblock/translator/asterisk/component/output.rb
307
295
  - lib/punchblock/version.rb
308
296
  - punchblock.gemspec
309
297
  - spec/punchblock/client/component_registry_spec.rb
@@ -325,7 +313,6 @@ files:
325
313
  - spec/punchblock/component/input_spec.rb
326
314
  - spec/punchblock/component/output_spec.rb
327
315
  - spec/punchblock/component/record_spec.rb
328
- - spec/punchblock/component/tropo/conference_spec.rb
329
316
  - spec/punchblock/connection/asterisk_spec.rb
330
317
  - spec/punchblock/connection/xmpp_spec.rb
331
318
  - spec/punchblock/event/answered_spec.rb
@@ -343,8 +330,8 @@ files:
343
330
  - spec/punchblock/translator/asterisk/call_spec.rb
344
331
  - spec/punchblock/translator/asterisk/component/asterisk/agi_command_spec.rb
345
332
  - spec/punchblock/translator/asterisk/component/asterisk/ami_action_spec.rb
346
- - spec/punchblock/translator/asterisk/component/asterisk/input_spec.rb
347
- - spec/punchblock/translator/asterisk/component/asterisk/output_spec.rb
333
+ - spec/punchblock/translator/asterisk/component/input_spec.rb
334
+ - spec/punchblock/translator/asterisk/component/output_spec.rb
348
335
  - spec/punchblock/translator/asterisk/component_spec.rb
349
336
  - spec/punchblock/translator/asterisk_spec.rb
350
337
  - spec/spec_helper.rb
@@ -364,7 +351,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
364
351
  version: '0'
365
352
  segments:
366
353
  - 0
367
- hash: -2039809251711287548
354
+ hash: 1650436713009858818
368
355
  required_rubygems_version: !ruby/object:Gem::Requirement
369
356
  none: false
370
357
  requirements:
@@ -397,7 +384,6 @@ test_files:
397
384
  - spec/punchblock/component/input_spec.rb
398
385
  - spec/punchblock/component/output_spec.rb
399
386
  - spec/punchblock/component/record_spec.rb
400
- - spec/punchblock/component/tropo/conference_spec.rb
401
387
  - spec/punchblock/connection/asterisk_spec.rb
402
388
  - spec/punchblock/connection/xmpp_spec.rb
403
389
  - spec/punchblock/event/answered_spec.rb
@@ -415,8 +401,8 @@ test_files:
415
401
  - spec/punchblock/translator/asterisk/call_spec.rb
416
402
  - spec/punchblock/translator/asterisk/component/asterisk/agi_command_spec.rb
417
403
  - spec/punchblock/translator/asterisk/component/asterisk/ami_action_spec.rb
418
- - spec/punchblock/translator/asterisk/component/asterisk/input_spec.rb
419
- - spec/punchblock/translator/asterisk/component/asterisk/output_spec.rb
404
+ - spec/punchblock/translator/asterisk/component/input_spec.rb
405
+ - spec/punchblock/translator/asterisk/component/output_spec.rb
420
406
  - spec/punchblock/translator/asterisk/component_spec.rb
421
407
  - spec/punchblock/translator/asterisk_spec.rb
422
408
  - spec/spec_helper.rb
@@ -1,9 +0,0 @@
1
- module Punchblock
2
- module Component
3
- module Tropo
4
- extend ActiveSupport::Autoload
5
-
6
- autoload :Conference
7
- end
8
- end # Command
9
- end # Punchblock
@@ -1,331 +0,0 @@
1
- module Punchblock
2
- module Component
3
- module Tropo
4
- class Conference < ComponentNode
5
- register :conference, :conference
6
-
7
- ##
8
- # Creates an Rayo conference command
9
- #
10
- # @param [Hash] options
11
- # @option options [String] :name room id to with which to create or join the conference
12
- # @option options [Announcement, Hash, Optional] :announcement to play on entry
13
- # @option options [Music, Hash, Optional] :music to play to the participant when no moderator is present
14
- # @option options [Boolean, Optional] :mute If set to true, the user will be muted in the conference
15
- # @option options [Boolean, Optional] :moderator Whether or not the conference should be moderated
16
- # @option options [Boolean, Optional] :tone_passthrough Identifies whether or not conference members can hear the tone generated when a a key on the phone is pressed.
17
- # @option options [String, Optional] :terminator This is the touch-tone key (also known as "DTMF digit") used to exit the conference.
18
- #
19
- # @return [Command::Conference] a formatted Rayo conference command
20
- #
21
- # @example
22
- # conference :name => 'the_one_true_conference', :terminator => '#'
23
- #
24
- # returns:
25
- # <conference xmlns="urn:xmpp:tropo:conference:1" name="the_one_true_conference" terminator="#"/>
26
- def self.new(options = {})
27
- super().tap do |new_node|
28
- options.each_pair do |k,v|
29
- new_node.send :"#{k}=", v
30
- end
31
- new_node.register_hold_status_handlers
32
- end
33
- end
34
-
35
- ##
36
- # @return [String] the name of the conference
37
- #
38
- def name
39
- read_attr :name
40
- end
41
-
42
- ##
43
- # @param [String] name of the conference
44
- #
45
- def name=(name)
46
- write_attr :name, name
47
- end
48
-
49
- ##
50
- # @return [Boolean] If set to true, the user will be muted in the conference.
51
- #
52
- def mute
53
- read_attr(:mute) == 'true'
54
- end
55
-
56
- ##
57
- # @param [Boolean] mute If set to true, the user will be muted in the conference
58
- #
59
- def mute=(mute)
60
- write_attr :mute, mute.to_s
61
- end
62
-
63
- ##
64
- # @return [String] This is the touch-tone key (also known as "DTMF digit") used to exit the conference.
65
- #
66
- def terminator
67
- read_attr :terminator
68
- end
69
-
70
- ##
71
- # @param [String] terminator This is the touch-tone key (also known as "DTMF digit") used to exit the conference.
72
- #
73
- def terminator=(terminator)
74
- write_attr :terminator, terminator
75
- end
76
-
77
- ##
78
- # @return [Boolean] Identifies whether or not conference members can hear the tone generated when a a key on the phone is pressed.
79
- #
80
- def tone_passthrough
81
- read_attr('tone-passthrough') == 'true'
82
- end
83
-
84
- ##
85
- # @param [Boolean] tone_passthrough Identifies whether or not conference members can hear the tone generated when a a key on the phone is pressed.
86
- #
87
- def tone_passthrough=(tone_passthrough)
88
- write_attr 'tone-passthrough', tone_passthrough.to_s
89
- end
90
-
91
- ##
92
- # @return [Boolean] Whether or not the conference should be moderated
93
- #
94
- def moderator
95
- read_attr(:moderator) == 'true'
96
- end
97
-
98
- ##
99
- # @param [Boolean] moderator Whether or not the conference should be moderated
100
- #
101
- def moderator=(moderator)
102
- write_attr :moderator, moderator.to_s
103
- end
104
-
105
- ##
106
- # @return [Announcement] the announcement to play to the participant on entry
107
- #
108
- def announcement
109
- node = find_first '//ns:announcement', :ns => self.registered_ns
110
- Announcement.new node if node
111
- end
112
-
113
- ##
114
- # @param [Announcement, Hash] ann
115
- # @option ann [String] :text Text to speak to the caller as an announcement
116
- # @option ann [String] :url URL to play to the caller as an announcement
117
- #
118
- def announcement=(ann)
119
- ann = Announcement.new(ann) unless ann.is_a? Announcement
120
- self << ann
121
- end
122
-
123
- ##
124
- # @return [Music] the music to play to the participant on entry if there's no moderator present
125
- #
126
- def music
127
- node = find_first '//ns:music', :ns => self.registered_ns
128
- Music.new node if node
129
- end
130
-
131
- ##
132
- # @param [Music, Hash] m
133
- # @option m [String] :text Text to speak to the caller
134
- # @option m [String] :url URL to play to the caller
135
- #
136
- def music=(m)
137
- m = Music.new(m) unless m.is_a? Announcement
138
- self << m
139
- end
140
-
141
- class Announcement < MediaNode
142
- register :announcement, :conference
143
- end
144
-
145
- class Music < MediaNode
146
- register :music, :conference
147
- end
148
-
149
- def inspect_attributes # :nodoc:
150
- [:name, :mute, :terminator, :tone_passthrough, :moderator, :announcement, :music] + super
151
- end
152
-
153
- def register_hold_status_handlers
154
- register_handler :internal, OnHold do |event|
155
- onhold!
156
- throw :pass
157
- end
158
-
159
- register_handler :internal, OffHold do |event|
160
- offhold!
161
- throw :pass
162
- end
163
- end
164
-
165
- state_machine :state do
166
- after_transition :new => :requested do |command, transition|
167
- command.mute ? command.muted! : command.unmuted!
168
- end
169
- end
170
-
171
- state_machine :mute_status, :initial => :unknown_mute do
172
- event :muted do
173
- transition [:unmuted, :unknown_mute] => :muted
174
- end
175
-
176
- event :unmuted do
177
- transition [:muted, :unknown_mute] => :unmuted
178
- end
179
- end
180
-
181
- state_machine :hold_status, :initial => :unknown_hold do
182
- event :onhold do
183
- transition [:offhold, :unknown_hold] => :onhold
184
- end
185
-
186
- event :offhold do
187
- transition [:onhold, :unknown_hold] => :offhold
188
- end
189
- end
190
-
191
- class OnHold < Event
192
- register :'on-hold', :conference
193
- end
194
-
195
- class OffHold < Event
196
- register :'off-hold', :conference
197
- end
198
-
199
- module ActiveSpeaker
200
- def speaking_call_id
201
- read_attr :'call-id'
202
- end
203
- end
204
-
205
- class Speaking < Event
206
- register :speaking, :conference
207
- include ActiveSpeaker
208
- end
209
-
210
- class FinishedSpeaking < Event
211
- register :'finished-speaking', :conference
212
- include ActiveSpeaker
213
- end
214
-
215
- class Complete
216
- class Kick < Event::Complete::Reason
217
- register :kick, :conference_complete
218
-
219
- alias :details :text
220
-
221
- def inspect_attributes # :nodoc:
222
- [:details] + super
223
- end
224
- end
225
-
226
- class Terminator < Event::Complete::Reason
227
- register :terminator, :conference_complete
228
- end
229
- end
230
-
231
- ##
232
- # Create an Rayo mute message for the current conference
233
- #
234
- # @return [Command::Conference::Mute] an Rayo mute message
235
- #
236
- # @example
237
- # conf_obj.mute_action.to_xml
238
- #
239
- # returns:
240
- # <mute xmlns="urn:xmpp:tropo:conference:1"/>
241
- #
242
- def mute_action
243
- Command::Mute.new :component_id => component_id, :call_id => call_id
244
- end
245
-
246
- ##
247
- # Sends an Rayo mute message for the current Conference
248
- #
249
- def mute!
250
- raise InvalidActionError, "Cannot mute a Conference that is already muted" if muted?
251
- mute_action.tap do |action|
252
- result = write_action action
253
- muted! if result
254
- end
255
- end
256
-
257
- ##
258
- # Create an Rayo unmute message for the current conference
259
- #
260
- # @return [Command::Conference::Unmute] an Rayo unmute message
261
- #
262
- # @example
263
- # conf_obj.unmute_action.to_xml
264
- #
265
- # returns:
266
- # <unmute xmlns="urn:xmpp:tropo:conference:1"/>
267
- #
268
- def unmute_action
269
- Command::Unmute.new :component_id => component_id, :call_id => call_id
270
- end
271
-
272
- ##
273
- # Sends an Rayo unmute message for the current Conference
274
- #
275
- def unmute!
276
- raise InvalidActionError, "Cannot unmute a Conference that is not muted" unless muted?
277
- unmute_action.tap do |action|
278
- result = write_action action
279
- unmuted! if result
280
- end
281
- end
282
-
283
- ##
284
- # Create an Rayo conference kick message
285
- #
286
- # @param [Hash] options
287
- # @option options [String] :message to explain the reason for kicking
288
- #
289
- # @return [Command::Conference::Kick] an Rayo conference kick message
290
- #
291
- # @example
292
- # conf_obj.kick_action(:message => 'bye!').to_xml
293
- #
294
- # returns:
295
- # <kick xmlns="urn:xmpp:tropo:conference:1">bye!</kick>
296
- #
297
- def kick_action(options = {})
298
- Kick.new options.merge(:component_id => component_id, :call_id => call_id)
299
- end
300
-
301
- ##
302
- # Sends an Rayo kick message for the current Conference
303
- #
304
- # @param [Hash] options
305
- # @option options [String] :message to explain the reason for kicking
306
- #
307
- def kick!(options = {})
308
- raise InvalidActionError, "Cannot kick a Conference that is not executing" unless executing?
309
- kick_action.tap do |action|
310
- write_action action
311
- end
312
- end
313
-
314
- class Kick < CommandNode # :nodoc:
315
- register :kick, :conference
316
-
317
- def self.new(options = {})
318
- super.tap do |new_node|
319
- new_node.message = options[:message]
320
- end
321
- end
322
-
323
- def message=(m)
324
- self << m if m
325
- end
326
- end
327
-
328
- end # Conference
329
- end # Tropo
330
- end # Command
331
- end # Punchblock