bigbluebutton-api-ruby 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|