bigbluebutton-api-ruby 0.0.9 → 0.0.10
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.rdoc +11 -0
- data/bigbluebutton-api-ruby.gemspec +1 -1
- data/lib/bigbluebutton-api.rb +80 -37
- data/test/test.rb +1 -1
- metadata +4 -4
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 0.0.10
|
2
|
+
|
3
|
+
* Returning hash now will *always* have these 3 values: :returncode (boolean), :messageKey (string) and :message (string).
|
4
|
+
* Some values in the hash are now converted to a fixed variable type to avoid inconsistencies:
|
5
|
+
* :meetingID (string)
|
6
|
+
* :attendeePW (string)
|
7
|
+
* :moderatorPW (string)
|
8
|
+
* :running (boolean)
|
9
|
+
* :hasBeenForciblyEnded (boolean)
|
10
|
+
* :endTime and :startTime (DateTime or nil)
|
11
|
+
|
1
12
|
== 0.0.9
|
2
13
|
|
3
14
|
* Simplied "attendees" part of the hash returned in get_meeting_info. Same thing done for get_meetings.
|
@@ -2,7 +2,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'bigbluebutton-api-ruby'
|
5
|
-
s.version = '0.0.
|
5
|
+
s.version = '0.0.10'
|
6
6
|
s.extra_rdoc_files = ['README.rdoc', 'LICENSE', 'CHANGELOG.rdoc']
|
7
7
|
s.summary = 'Provides an interface to the BigBlueButton web meeting API (https://github.com/mconf/bigbluebutton-api-ruby)'
|
8
8
|
s.description = s.summary
|
data/lib/bigbluebutton-api.rb
CHANGED
@@ -44,6 +44,18 @@ module BigBlueButton
|
|
44
44
|
#
|
45
45
|
# TODO: Automatically detect API version using request to index - added in 0.7
|
46
46
|
#
|
47
|
+
# Considerations about the returning hash:
|
48
|
+
# * The XML returned by BBB is converted to a Hash. See the desired method's documentation for examples.
|
49
|
+
# * Three values will *always* exist in the hash: :returncode (boolean), :messageKey (string) and :message (string)
|
50
|
+
# * Some of the values returned by BBB are converted to better represent the data. Some of these are listed
|
51
|
+
# bellow. They will *always* have the type informed:
|
52
|
+
# * :meetingID (string)
|
53
|
+
# * :attendeePW (string)
|
54
|
+
# * :moderatorPW (string)
|
55
|
+
# * :running (boolean)
|
56
|
+
# * :hasBeenForciblyEnded (boolean)
|
57
|
+
# * :endTime and :startTime (DateTime or nil)
|
58
|
+
#
|
47
59
|
class BigBlueButtonApi
|
48
60
|
|
49
61
|
attr_accessor :url, :supported_versions, :salt, :version, :debug
|
@@ -113,22 +125,22 @@ module BigBlueButton
|
|
113
125
|
# On successful creation:
|
114
126
|
#
|
115
127
|
# {
|
116
|
-
# :returncode=>
|
117
|
-
# :attendeePW=>1234, :moderatorPW=>4321, :hasBeenForciblyEnded=>
|
118
|
-
# :messageKey=>
|
128
|
+
# :returncode=>true, :meetingID=>"bigbluebutton-api-ruby-test",
|
129
|
+
# :attendeePW=>"1234", :moderatorPW=>"4321", :hasBeenForciblyEnded=>false,
|
130
|
+
# :messageKey=>"", :message=>""
|
119
131
|
# }
|
120
132
|
#
|
121
|
-
# Meeting that was
|
133
|
+
# Meeting that was forcibly ended:
|
122
134
|
#
|
123
135
|
# {
|
124
|
-
# :returncode=>
|
125
|
-
# :attendeePW=>1234, :moderatorPW=>4321, :hasBeenForciblyEnded=>
|
136
|
+
# :returncode=>true, :meetingID=>"bigbluebutton-api-ruby-test",
|
137
|
+
# :attendeePW=>"1234", :moderatorPW=>"4321", :hasBeenForciblyEnded=>true,
|
126
138
|
# :messageKey=>"duplicateWarning",
|
127
139
|
# :message=>"This conference was already in existence and may currently be in progress."
|
128
140
|
# }
|
129
141
|
#
|
130
142
|
# TODO check if voice_bridge exists in 0.64
|
131
|
-
def create_meeting(meeting_name, meeting_id, moderator_password, attendee_password,
|
143
|
+
def create_meeting(meeting_name, meeting_id, moderator_password = nil, attendee_password = nil,
|
132
144
|
welcome_message = nil, dial_number = nil, logout_url = nil,
|
133
145
|
max_participants = nil, voice_bridge = nil)
|
134
146
|
|
@@ -137,7 +149,15 @@ module BigBlueButton
|
|
137
149
|
:welcome => welcome_message, :dialNumber => dial_number,
|
138
150
|
:logoutURL => logout_url, :maxParticpants => max_participants }
|
139
151
|
params[:voiceBridge] = voice_bridge if @version == '0.7'
|
140
|
-
|
152
|
+
|
153
|
+
response = send_api_request(:create, params)
|
154
|
+
|
155
|
+
response[:meetingID] = response[:meetingID].to_s
|
156
|
+
response[:moderatorPW] = response[:moderatorPW].to_s
|
157
|
+
response[:attendeePW] = response[:attendeePW].to_s
|
158
|
+
response[:hasBeenForciblyEnded] = response[:hasBeenForciblyEnded].downcase == "true"
|
159
|
+
|
160
|
+
response
|
141
161
|
end
|
142
162
|
|
143
163
|
# Ends an existing meeting. Throws BigBlueButtonException on failure.
|
@@ -149,7 +169,7 @@ module BigBlueButton
|
|
149
169
|
# On success:
|
150
170
|
#
|
151
171
|
# {
|
152
|
-
# :returncode=>
|
172
|
+
# :returncode=>true, :messageKey=>"sentEndMeetingRequest",
|
153
173
|
# :message=>"A request to end the meeting was sent. Please wait a few seconds, and then use the getMeetingInfo
|
154
174
|
# or isMeetingRunning API calls to verify that it was ended."
|
155
175
|
# }
|
@@ -163,7 +183,7 @@ module BigBlueButton
|
|
163
183
|
# meeting_id:: Unique identifier for the meeting
|
164
184
|
def is_meeting_running?(meeting_id)
|
165
185
|
hash = send_api_request(:isMeetingRunning, { :meetingID => meeting_id } )
|
166
|
-
hash[:running] == "true"
|
186
|
+
hash[:running].downcase == "true"
|
167
187
|
end
|
168
188
|
|
169
189
|
# Warning: As of this version of the gem, this call does not work
|
@@ -201,22 +221,22 @@ module BigBlueButton
|
|
201
221
|
# With attendees:
|
202
222
|
#
|
203
223
|
# {
|
204
|
-
# :returncode=>
|
205
|
-
# :hasBeenForciblyEnded=>
|
224
|
+
# :returncode=>true, :meetingID=>"bigbluebutton-api-ruby-test", :attendeePW=>"1234", :moderatorPW=>"4321", :running=>true,
|
225
|
+
# :hasBeenForciblyEnded=>false, :startTime=>DateTime("Wed Apr 06 17:09:57 UTC 2011"), :endTime=>nil, :participantCount=>4, :moderatorCount=>2,
|
206
226
|
# :attendees => [
|
207
|
-
# {:userID=>"ndw1fnaev0rj", :fullName=>"House M.D.", :role
|
208
|
-
# {:userID=>"gn9e22b7ynna", :fullName=>"Dexter Morgan", :role
|
209
|
-
# {:userID=>"llzihbndryc3", :fullName=>"Cameron Palmer", :role
|
210
|
-
# {:userID=>"rbepbovolsxt", :fullName=>"Trinity", :role
|
211
|
-
# ], :messageKey=>
|
227
|
+
# {:userID=>"ndw1fnaev0rj", :fullName=>"House M.D.", :role=>:moderator},
|
228
|
+
# {:userID=>"gn9e22b7ynna", :fullName=>"Dexter Morgan", :role=>:moderator},
|
229
|
+
# {:userID=>"llzihbndryc3", :fullName=>"Cameron Palmer", :role=>:viewer},
|
230
|
+
# {:userID=>"rbepbovolsxt", :fullName=>"Trinity", :role=>:viewer}
|
231
|
+
# ], :messageKey=>"", :message=>""
|
212
232
|
# }
|
213
233
|
#
|
214
234
|
# Without attendees (not started):
|
215
235
|
#
|
216
236
|
# {
|
217
|
-
# :returncode=>
|
218
|
-
# :hasBeenForciblyEnded=>
|
219
|
-
# :attendees=>[], :messageKey=>
|
237
|
+
# :returncode=>true, :meetingID=>"bigbluebutton-api-ruby-test", :attendeePW=>"1234", :moderatorPW=>"4321", :running=>false,
|
238
|
+
# :hasBeenForciblyEnded=>false, :startTime=>nil, :endTime=>nil, :participantCount=>0, :moderatorCount=>0,
|
239
|
+
# :attendees=>[], :messageKey=>"", :message=>""
|
220
240
|
# }
|
221
241
|
#
|
222
242
|
def get_meeting_info(meeting_id, password)
|
@@ -224,17 +244,28 @@ module BigBlueButton
|
|
224
244
|
|
225
245
|
# simplify the hash making a node :attendees with an array with all attendees
|
226
246
|
if response[:attendees].empty?
|
227
|
-
|
247
|
+
attendees = []
|
228
248
|
else
|
229
249
|
node = response[:attendees][:attendee]
|
230
250
|
if node.kind_of?(Array)
|
231
|
-
|
251
|
+
attendees = node
|
232
252
|
else
|
233
|
-
|
234
|
-
|
253
|
+
attendees = []
|
254
|
+
attendees << node
|
235
255
|
end
|
236
256
|
end
|
237
|
-
response[:attendees] =
|
257
|
+
response[:attendees] = attendees
|
258
|
+
response[:attendees].each { |att| att[:role] = att[:role].downcase.to_sym }
|
259
|
+
|
260
|
+
response[:meetingID] = response[:meetingID].to_s
|
261
|
+
response[:moderatorPW] = response[:moderatorPW].to_s
|
262
|
+
response[:attendeePW] = response[:attendeePW].to_s
|
263
|
+
response[:hasBeenForciblyEnded] = response[:hasBeenForciblyEnded].downcase == "true"
|
264
|
+
response[:running] = response[:running].downcase == "true"
|
265
|
+
response[:startTime] = response[:startTime].downcase == "null" ?
|
266
|
+
nil : DateTime.parse(response[:startTime])
|
267
|
+
response[:endTime] = response[:endTime].downcase == "null" ?
|
268
|
+
nil : DateTime.parse(response[:endTime])
|
238
269
|
|
239
270
|
response
|
240
271
|
end
|
@@ -246,16 +277,17 @@ module BigBlueButton
|
|
246
277
|
#
|
247
278
|
# Server with one or more meetings:
|
248
279
|
#
|
249
|
-
# { :returncode =>
|
280
|
+
# { :returncode => true,
|
250
281
|
# :meetings => [
|
251
|
-
# {:meetingID=>"Demo Meeting", :attendeePW=>"ap", :moderatorPW=>"mp", :hasBeenForciblyEnded=>
|
252
|
-
# {:meetingID=>"I was ended Meeting", :attendeePW=>"pass", :moderatorPW=>"pass", :hasBeenForciblyEnded=>
|
253
|
-
# ]
|
282
|
+
# {:meetingID=>"Demo Meeting", :attendeePW=>"ap", :moderatorPW=>"mp", :hasBeenForciblyEnded=>false, :running=>true},
|
283
|
+
# {:meetingID=>"I was ended Meeting", :attendeePW=>"pass", :moderatorPW=>"pass", :hasBeenForciblyEnded=>true, :running=>false}
|
284
|
+
# ],
|
285
|
+
# :messageKey=>"", :message=>""
|
254
286
|
# }
|
255
287
|
#
|
256
288
|
# Server with no meetings:
|
257
289
|
#
|
258
|
-
# {:returncode=>
|
290
|
+
# {:returncode=>true, :meetings=>[], :messageKey=>"noMeetings", :message=>"no meetings were found on this server"}
|
259
291
|
#
|
260
292
|
def get_meetings
|
261
293
|
response = send_api_request(:getMeetings, { :random => rand(9999999999) } )
|
@@ -274,6 +306,14 @@ module BigBlueButton
|
|
274
306
|
end
|
275
307
|
response[:meetings] = meetings
|
276
308
|
|
309
|
+
response[:meetings].each do |meeting|
|
310
|
+
meeting[:meetingID] = meeting[:meetingID].to_s
|
311
|
+
meeting[:moderatorPW] = meeting[:moderatorPW].to_s
|
312
|
+
meeting[:attendeePW] = meeting[:attendeePW].to_s
|
313
|
+
meeting[:hasBeenForciblyEnded] = meeting[:hasBeenForciblyEnded].downcase == "true"
|
314
|
+
meeting[:running] = meeting[:running].downcase == "true"
|
315
|
+
end
|
316
|
+
|
277
317
|
response
|
278
318
|
end
|
279
319
|
|
@@ -284,8 +324,8 @@ module BigBlueButton
|
|
284
324
|
# Works for BBB >= 0.7 only. For earlier versions, returns an empty string.
|
285
325
|
def get_api_version
|
286
326
|
response = send_api_request(:index)
|
287
|
-
if response[:returncode]
|
288
|
-
response[:version]
|
327
|
+
if response[:returncode]
|
328
|
+
response[:version].to_s
|
289
329
|
else
|
290
330
|
""
|
291
331
|
end
|
@@ -295,11 +335,10 @@ module BigBlueButton
|
|
295
335
|
def test_connection
|
296
336
|
if @version == '0.7'
|
297
337
|
response = send_api_request(:index)
|
298
|
-
response[:returncode] == "SUCCESS"
|
299
338
|
else
|
300
339
|
response = get_meetings
|
301
|
-
response[:returncode] == "SUCCESS"
|
302
340
|
end
|
341
|
+
response[:returncode]
|
303
342
|
end
|
304
343
|
|
305
344
|
# API's are equal if all the following attributes are equal
|
@@ -355,14 +394,18 @@ module BigBlueButton
|
|
355
394
|
|
356
395
|
# and remove the "response" node
|
357
396
|
hash = Hash[hash[:response]].inject({}){|h,(k,v)| h[k] = v; h}
|
358
|
-
puts "BigBlueButtonAPI: URL response hash = #{hash.inspect}" if @debug
|
359
397
|
|
360
|
-
|
361
|
-
|
398
|
+
# Adjust some values. There will always be a returncode, message and messageKey in the hash.
|
399
|
+
hash[:returncode] = hash[:returncode].downcase == "success" # true instead of "SUCCESS"
|
400
|
+
hash[:messageKey] = "" if !hash.has_key?(:messageKey) or hash[:messageKey].empty? # "" instead of {}
|
401
|
+
hash[:message] = "" if !hash.has_key?(:message) or hash[:message].empty? # "" instead of {}
|
402
|
+
|
403
|
+
unless hash[:returncode]
|
362
404
|
exception = BigBlueButtonException.new(hash[:message])
|
363
405
|
exception.key = hash.has_key?(:messageKey) ? hash[:messageKey] : ""
|
364
406
|
raise exception
|
365
407
|
end
|
408
|
+
|
366
409
|
hash
|
367
410
|
end
|
368
411
|
|
data/test/test.rb
CHANGED
@@ -27,7 +27,7 @@ def general_test
|
|
27
27
|
puts
|
28
28
|
puts "---------------------------------------------------"
|
29
29
|
if @api.test_connection
|
30
|
-
puts "Connection
|
30
|
+
puts "Connection successful! continuing..."
|
31
31
|
else
|
32
32
|
puts "Connection failed! The server might be unreachable. Exiting..."
|
33
33
|
Kernel.exit!
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bigbluebutton-api-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-04-
|
13
|
+
date: 2011-04-28 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
17
|
-
requirement: &
|
17
|
+
requirement: &80178430 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
version: 1.4.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *80178430
|
26
26
|
description: Provides an interface to the BigBlueButton web meeting API (https://github.com/mconf/bigbluebutton-api-ruby)
|
27
27
|
email:
|
28
28
|
- leonardodaronco@gmail.com
|