punchblock 0.8.4 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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