bigbluebutton-api-ruby 0.0.4

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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ == bigbluebutton-api-ruby
2
+
3
+ Copyright (c) 2011 Leonardo Crauss Daronco
4
+
5
+ Copyright (c) 2010 Joe Kinsella
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
8
+ this software and associated documentation files (the "Software"), to deal in
9
+ the Software without restriction, including without limitation the rights to
10
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
11
+ the Software, and to permit persons to whom the Software is furnished to do so,
12
+ subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all
15
+ copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
19
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
20
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,41 @@
1
+ = Project: bigbluebutton-api-ruby
2
+
3
+ == Goal
4
+
5
+ Provide access to the BigBlueButton web conferencing API.
6
+
7
+ == Releases
8
+
9
+ === Version 0.0.4
10
+ Gem renamed from 'bigbluebutton' to 'bigbluebutton-api-ruby'.
11
+
12
+ First version with support also to BBB API version 0.7.
13
+
14
+ Changes:
15
+
16
+ - API functions now return a hash and instead of the XML returned by BBB. The XML is converted to a hash that uses symbols as keys and groups keys with the same name.
17
+
18
+ === Version 0.0.3
19
+ Fixes module issue preventing proper throwing of exceptions.
20
+
21
+ === Version 0.0.1
22
+ This is the first version of this gem. It provides an implementation of the 0.64 bbb API, with the following exceptions:
23
+
24
+ - Does not implement meeting token, and instead relies on meeting id as the unique identifier for a meeting.
25
+ - Documentation suggests there is way to call join_meeting as API call (instead of browser URL). This call currently does not work as documented.
26
+
27
+ == Contact
28
+
29
+ === Version 0.0.4+
30
+
31
+ Author:: Leonardo Crauss Daronco
32
+ Email:: leonardodaronco@gmail.com
33
+ Home Page:: http://www.inf.ufrgs.br/prav/gtmconf/
34
+ License:: Distributed under same terms as Ruby
35
+
36
+ === Version 0.0.3 and below
37
+
38
+ Author:: Joe Kinsella
39
+ Email:: joe.kinsella@gmail.com
40
+ Home Page:: http://www.brownbaglunch.com/bigbluebutton
41
+ License:: Distributes under same terms as Ruby
data/Rakefile ADDED
@@ -0,0 +1,48 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+ require 'rubygems'
6
+ require 'rake'
7
+ require 'rake/clean'
8
+ require 'rake/gempackagetask'
9
+ require 'rake/rdoctask'
10
+ require 'rake/testtask'
11
+
12
+ spec = Gem::Specification.new do |s|
13
+ s.name = 'bigbluebutton-api-ruby'
14
+ s.version = '0.0.4'
15
+ s.has_rdoc = true
16
+ s.extra_rdoc_files = ['README', 'LICENSE']
17
+ s.summary = 'Provides an interface to the BigBlueButton web meeting API (https://github.com/mconf/bigbluebutton-api-ruby)'
18
+ s.description = s.summary
19
+ s.author = 'Leonardo Crauss Daronco'
20
+ s.email = 'leonardodaronco@gmail.com'
21
+ s.homepage = "https://github.com/mconf/bigbluebutton-api-ruby/"
22
+ # s.executables = ['your_executable_here']
23
+ s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,lib,doc,test,spec}/**/*")
24
+ s.require_path = "lib"
25
+ s.bindir = "bin"
26
+ end
27
+
28
+ Rake::GemPackageTask.new(spec) do |p|
29
+ p.gem_spec = spec
30
+ p.need_tar = true
31
+ p.need_zip = true
32
+ end
33
+
34
+ Rake::RDocTask.new do |rdoc|
35
+ files =['README', 'LICENSE', 'lib/**/*.rb']
36
+ rdoc.rdoc_files.add(files)
37
+ rdoc.main = "README" # page to start on
38
+ rdoc.title = "bigbluebutton-api-ruby Docs"
39
+ rdoc.rdoc_dir = 'doc/' # rdoc output folder
40
+ rdoc.options << '--line-numbers'
41
+ end
42
+
43
+ desc 'Test the gem.'
44
+ Rake::TestTask.new(:test) do |t|
45
+ t.pattern = 'test/**/*test.rb'
46
+ t.verbose = true
47
+ t.libs << 'test'
48
+ end
@@ -0,0 +1,112 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Module: BigBlueButton</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Module</strong></td>
53
+ <td class="class-name-in-header">BigBlueButton</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/bigbluebutton-api_rb.html">
59
+ lib/bigbluebutton-api.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ </table>
66
+ </div>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+
71
+
72
+
73
+ <div id="contextContent">
74
+
75
+
76
+
77
+ </div>
78
+
79
+
80
+ </div>
81
+
82
+
83
+ <!-- if includes -->
84
+
85
+ <div id="section">
86
+
87
+ <div id="class-list">
88
+ <h3 class="section-bar">Classes and Modules</h3>
89
+
90
+ Class <a href="BigBlueButton/BigBlueButtonApi.html" class="link">BigBlueButton::BigBlueButtonApi</a><br />
91
+ Class <a href="BigBlueButton/BigBlueButtonException.html" class="link">BigBlueButton::BigBlueButtonException</a><br />
92
+
93
+ </div>
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+ <!-- if method_list -->
102
+
103
+
104
+ </div>
105
+
106
+
107
+ <div id="validator-badges">
108
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
109
+ </div>
110
+
111
+ </body>
112
+ </html>
@@ -0,0 +1,657 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: BigBlueButton::BigBlueButtonApi</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">BigBlueButton::BigBlueButtonApi</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/bigbluebutton-api_rb.html">
59
+ lib/bigbluebutton-api.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ Object
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+
81
+ <div id="description">
82
+ <p>
83
+ This class provides access to the <a
84
+ href="../BigBlueButton.html">BigBlueButton</a> API. <a
85
+ href="../BigBlueButton.html">BigBlueButton</a> is an open source project
86
+ that provides web conferencing for distance education (<a
87
+ href="http://code.google.com/p/bigbluebutton/wiki/API">code.google.com/p/bigbluebutton/wiki/API</a>).
88
+ This API was developed to support the following version of bbb: 0.64, 0.7
89
+ </p>
90
+ <p>
91
+ Sample usage of the API is as follows: 1) Create a meeting with the <a
92
+ href="BigBlueButtonApi.html#M000008">create_meeting</a> call 2) Direct a
93
+ user to either <a href="BigBlueButtonApi.html#M000006">moderator_url</a> or
94
+ <a href="BigBlueButtonApi.html#M000007">attendee_url</a> 3) To force
95
+ meeting to end, call <a
96
+ href="BigBlueButtonApi.html#M000009">end_meeting</a>
97
+ </p>
98
+ <p>
99
+ 0.0.4+:
100
+ </p>
101
+ <table>
102
+ <tr><td valign="top">Author:</td><td>Leonardo Crauss Daronco (<a
103
+ href="mailto:leonardodaronco@gmail.com">leonardodaronco@gmail.com</a>)
104
+
105
+ </td></tr>
106
+ <tr><td valign="top">Copyright:</td><td>Copyright (c) 2011 Leonardo Crauss Daronco
107
+
108
+ </td></tr>
109
+ <tr><td valign="top">License:</td><td>Distributes under same terms as Ruby
110
+
111
+ </td></tr>
112
+ </table>
113
+ <p>
114
+ 0.0.3 and below:
115
+ </p>
116
+ <table>
117
+ <tr><td valign="top">Author:</td><td>Joe Kinsella (<a
118
+ href="mailto:joe.kinsella@gmail.com">joe.kinsella@gmail.com</a>)
119
+
120
+ </td></tr>
121
+ <tr><td valign="top">Copyright:</td><td>Copyright (c) 2010 Joe Kinsella
122
+
123
+ </td></tr>
124
+ <tr><td valign="top">License:</td><td>Distributes under same terms as Ruby
125
+
126
+ </td></tr>
127
+ </table>
128
+ <p>
129
+ TODO: api version returned on index - added in 0.7
130
+ </p>
131
+
132
+ </div>
133
+
134
+
135
+ </div>
136
+
137
+ <div id="method-list">
138
+ <h3 class="section-bar">Methods</h3>
139
+
140
+ <div class="name-list">
141
+ <a href="#M000007">attendee_url</a>&nbsp;&nbsp;
142
+ <a href="#M000008">create_meeting</a>&nbsp;&nbsp;
143
+ <a href="#M000009">end_meeting</a>&nbsp;&nbsp;
144
+ <a href="#M000012">get_meeting_info</a>&nbsp;&nbsp;
145
+ <a href="#M000013">get_meetings</a>&nbsp;&nbsp;
146
+ <a href="#M000014">get_url</a>&nbsp;&nbsp;
147
+ <a href="#M000010">is_meeting_running?</a>&nbsp;&nbsp;
148
+ <a href="#M000011">join_meeting</a>&nbsp;&nbsp;
149
+ <a href="#M000006">moderator_url</a>&nbsp;&nbsp;
150
+ <a href="#M000005">new</a>&nbsp;&nbsp;
151
+ <a href="#M000015">send_api_request</a>&nbsp;&nbsp;
152
+ </div>
153
+ </div>
154
+
155
+ </div>
156
+
157
+
158
+ <!-- if includes -->
159
+
160
+ <div id="section">
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+ <!-- if method_list -->
170
+ <div id="methods">
171
+ <h3 class="section-bar">Public Class methods</h3>
172
+
173
+ <div id="method-M000005" class="method-detail">
174
+ <a name="M000005"></a>
175
+
176
+ <div class="method-heading">
177
+ <a href="#M000005" class="method-signature">
178
+ <span class="method-name">new</span><span class="method-args">(base_url, salt, version='0.7', debug=false)</span>
179
+ </a>
180
+ </div>
181
+
182
+ <div class="method-description">
183
+ <p>
184
+ Initializes an instance
185
+ </p>
186
+ <table>
187
+ <tr><td valign="top">base_url:</td><td>URL to a <a href="../BigBlueButton.html">BigBlueButton</a> server (e.g. <a
188
+ href="http://demo.bigbluebutton.org/bigbluebutton/api">demo.bigbluebutton.org/bigbluebutton/api</a>)
189
+
190
+ </td></tr>
191
+ <tr><td valign="top">salt:</td><td>Secret salt for this server
192
+
193
+ </td></tr>
194
+ <tr><td valign="top">version:</td><td>API version: 0.64 or 0.7
195
+
196
+ </td></tr>
197
+ </table>
198
+ <p><a class="source-toggle" href="#"
199
+ onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
200
+ <div class="method-source-code" id="M000005-source">
201
+ <pre>
202
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 43</span>
203
+ 43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">base_url</span>, <span class="ruby-identifier">salt</span>, <span class="ruby-identifier">version</span>=<span class="ruby-value str">'0.7'</span>, <span class="ruby-identifier">debug</span>=<span class="ruby-keyword kw">false</span>)
204
+ 44: <span class="ruby-ivar">@supported_versions</span> = [<span class="ruby-value str">'0.7'</span>, <span class="ruby-value str">'0.64'</span>]
205
+ 45: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@supported_versions</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">version</span>)
206
+ 46: <span class="ruby-identifier">raise</span> <span class="ruby-constant">BigBlueButtonException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;BigBlueButton error: Invalid API version #{version}. Supported versions: #{@supported_versions.join(', ')}&quot;</span>)
207
+ 47: <span class="ruby-keyword kw">end</span>
208
+ 48: <span class="ruby-ivar">@session</span> = {}
209
+ 49: <span class="ruby-ivar">@base_url</span> = <span class="ruby-identifier">base_url</span>
210
+ 50: <span class="ruby-ivar">@salt</span> = <span class="ruby-identifier">salt</span>
211
+ 51: <span class="ruby-ivar">@debug</span> = <span class="ruby-identifier">debug</span>
212
+ 52: <span class="ruby-ivar">@version</span> = <span class="ruby-identifier">version</span>
213
+ 53: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;BigBlueButtonAPI: Using version #{@version}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@debug</span>
214
+ 54: <span class="ruby-keyword kw">end</span>
215
+ </pre>
216
+ </div>
217
+ </div>
218
+ </div>
219
+
220
+ <h3 class="section-bar">Public Instance methods</h3>
221
+
222
+ <div id="method-M000007" class="method-detail">
223
+ <a name="M000007"></a>
224
+
225
+ <div class="method-heading">
226
+ <a href="#M000007" class="method-signature">
227
+ <span class="method-name">attendee_url</span><span class="method-args">(meeting_id, user_name, attendee_password, user_id = nil, web_voice_conf = nil)</span>
228
+ </a>
229
+ </div>
230
+
231
+ <div class="method-description">
232
+ <p>
233
+ Returns url to login as attendee
234
+ </p>
235
+ <table>
236
+ <tr><td valign="top">meeting_id:</td><td>Unique identifier for the meeting
237
+
238
+ </td></tr>
239
+ <tr><td valign="top">user_name:</td><td>Name of the user
240
+
241
+ </td></tr>
242
+ <tr><td valign="top">password:</td><td>Attendee password for this meeting
243
+
244
+ </td></tr>
245
+ <tr><td valign="top">user_id:</td><td>Unique identifier for this user (&gt;=0.7)
246
+
247
+ </td></tr>
248
+ <tr><td valign="top">web_voice_conf:</td><td>Custom voice-extension for users using VoIP (&gt;=0.7)
249
+
250
+ </td></tr>
251
+ </table>
252
+ <p><a class="source-toggle" href="#"
253
+ onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
254
+ <div class="method-source-code" id="M000007-source">
255
+ <pre>
256
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 70</span>
257
+ 70: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">attendee_url</span>(<span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">user_name</span>, <span class="ruby-identifier">attendee_password</span>,
258
+ 71: <span class="ruby-identifier">user_id</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">web_voice_conf</span> = <span class="ruby-keyword kw">nil</span>)
259
+ 72:
260
+ 73: <span class="ruby-identifier">params</span> = { <span class="ruby-identifier">:meetingID</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">:password</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">attendee_password</span>, <span class="ruby-identifier">:fullName</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user_name</span> }
261
+ 74: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@version</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'0.7'</span>
262
+ 75: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:userID</span>] = <span class="ruby-identifier">user_id</span>
263
+ 76: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:webVoiceConf</span>] = <span class="ruby-identifier">web_voice_conf</span>
264
+ 77: <span class="ruby-keyword kw">end</span>
265
+ 78: <span class="ruby-identifier">get_url</span>(<span class="ruby-identifier">:join</span>, <span class="ruby-identifier">params</span>)
266
+ 79: <span class="ruby-keyword kw">end</span>
267
+ </pre>
268
+ </div>
269
+ </div>
270
+ </div>
271
+
272
+ <div id="method-M000008" class="method-detail">
273
+ <a name="M000008"></a>
274
+
275
+ <div class="method-heading">
276
+ <a href="#M000008" class="method-signature">
277
+ <span class="method-name">create_meeting</span><span class="method-args">(meeting_name, meeting_id, moderator_password, attendee_password, welcome_message = nil, dial_number = nil, logout_url = nil, max_participants = nil, voice_bridge = nil)</span>
278
+ </a>
279
+ </div>
280
+
281
+ <div class="method-description">
282
+ <p>
283
+ Creates a <a href="BigBlueButtonApi.html#M000005">new</a> meeting. Returns
284
+ the hash with the response or throws <a
285
+ href="BigBlueButtonException.html">BigBlueButtonException</a> on failure.
286
+ </p>
287
+ <table>
288
+ <tr><td valign="top">meeting_name:</td><td>Name for the meeting
289
+
290
+ </td></tr>
291
+ <tr><td valign="top">meeting_id:</td><td>Unique identifier for the meeting
292
+
293
+ </td></tr>
294
+ <tr><td valign="top">moderator_password:</td><td>Moderator password
295
+
296
+ </td></tr>
297
+ <tr><td valign="top">attendee_password:</td><td>Attendee password
298
+
299
+ </td></tr>
300
+ <tr><td valign="top">welcome_message:</td><td>Welcome message to display in chat window
301
+
302
+ </td></tr>
303
+ <tr><td valign="top">dialin_number:</td><td>Dial in number for conference using a regular phone
304
+
305
+ </td></tr>
306
+ <tr><td valign="top">logout_url:</td><td>URL to return user to after exiting meeting
307
+
308
+ </td></tr>
309
+ <tr><td valign="top">voice_bridge:</td><td>Voice conference number (&gt;=0.7)
310
+
311
+ </td></tr>
312
+ </table>
313
+ <p>
314
+ TODO check if voice_bridge exists in 0.64
315
+ </p>
316
+ <p><a class="source-toggle" href="#"
317
+ onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
318
+ <div class="method-source-code" id="M000008-source">
319
+ <pre>
320
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 92</span>
321
+ 92: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create_meeting</span>(<span class="ruby-identifier">meeting_name</span>, <span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">moderator_password</span>, <span class="ruby-identifier">attendee_password</span>,
322
+ 93: <span class="ruby-identifier">welcome_message</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">dial_number</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">logout_url</span> = <span class="ruby-keyword kw">nil</span>,
323
+ 94: <span class="ruby-identifier">max_participants</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">voice_bridge</span> = <span class="ruby-keyword kw">nil</span>)
324
+ 95:
325
+ 96: <span class="ruby-identifier">params</span> = { <span class="ruby-identifier">:name</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">meeting_name</span>, <span class="ruby-identifier">:meetingID</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">meeting_id</span>,
326
+ 97: <span class="ruby-identifier">:moderatorPW</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">moderator_password</span>, <span class="ruby-identifier">:attendeePW</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">attendee_password</span>,
327
+ 98: <span class="ruby-identifier">:welcome</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">welcome_message</span>, <span class="ruby-identifier">:dialNumber</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">dial_number</span>,
328
+ 99: <span class="ruby-identifier">:logoutURL</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">logout_url</span>, <span class="ruby-identifier">:maxParticpants</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max_participants</span> }
329
+ 100: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:voiceBridge</span>] = <span class="ruby-identifier">voice_bridge</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@version</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'0.7'</span>
330
+ 101: <span class="ruby-identifier">send_api_request</span>(<span class="ruby-identifier">:create</span>, <span class="ruby-identifier">params</span>)
331
+ 102: <span class="ruby-keyword kw">end</span>
332
+ </pre>
333
+ </div>
334
+ </div>
335
+ </div>
336
+
337
+ <div id="method-M000009" class="method-detail">
338
+ <a name="M000009"></a>
339
+
340
+ <div class="method-heading">
341
+ <a href="#M000009" class="method-signature">
342
+ <span class="method-name">end_meeting</span><span class="method-args">(meeting_id, moderator_password)</span>
343
+ </a>
344
+ </div>
345
+
346
+ <div class="method-description">
347
+ <p>
348
+ Ends an existing meeting. Throws <a
349
+ href="BigBlueButtonException.html">BigBlueButtonException</a> on failure.
350
+ </p>
351
+ <table>
352
+ <tr><td valign="top">meeting_id:</td><td>Unique identifier for the meeting
353
+
354
+ </td></tr>
355
+ <tr><td valign="top">moderator_password:</td><td>Moderator password
356
+
357
+ </td></tr>
358
+ </table>
359
+ <p><a class="source-toggle" href="#"
360
+ onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
361
+ <div class="method-source-code" id="M000009-source">
362
+ <pre>
363
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 107</span>
364
+ 107: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">end_meeting</span>(<span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">moderator_password</span>)
365
+ 108: <span class="ruby-identifier">send_api_request</span>(<span class="ruby-identifier">:end</span>, { <span class="ruby-identifier">:meetingID</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">:password</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">moderator_password</span> } )
366
+ 109: <span class="ruby-keyword kw">end</span>
367
+ </pre>
368
+ </div>
369
+ </div>
370
+ </div>
371
+
372
+ <div id="method-M000012" class="method-detail">
373
+ <a name="M000012"></a>
374
+
375
+ <div class="method-heading">
376
+ <a href="#M000012" class="method-signature">
377
+ <span class="method-name">get_meeting_info</span><span class="method-args">(meeting_id, password)</span>
378
+ </a>
379
+ </div>
380
+
381
+ <div class="method-description">
382
+ <p>
383
+ Returns a hash object containing the meeting information. See the API
384
+ documentation for details on the return XML (<a
385
+ href="http://code.google.com/p/bigbluebutton/wiki/API">code.google.com/p/bigbluebutton/wiki/API</a>).
386
+ </p>
387
+ <table>
388
+ <tr><td valign="top">meeting_id:</td><td>Unique identifier for the meeting
389
+
390
+ </td></tr>
391
+ <tr><td valign="top">password:</td><td>Moderator password for this meeting
392
+
393
+ </td></tr>
394
+ </table>
395
+ <p><a class="source-toggle" href="#"
396
+ onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
397
+ <div class="method-source-code" id="M000012-source">
398
+ <pre>
399
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 148</span>
400
+ 148: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_meeting_info</span>(<span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">password</span>)
401
+ 149: <span class="ruby-identifier">send_api_request</span>(<span class="ruby-identifier">:getMeetingInfo</span>, { <span class="ruby-identifier">:meetingID</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">:password</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">password</span> } )
402
+ 150: <span class="ruby-keyword kw">end</span>
403
+ </pre>
404
+ </div>
405
+ </div>
406
+ </div>
407
+
408
+ <div id="method-M000013" class="method-detail">
409
+ <a name="M000013"></a>
410
+
411
+ <div class="method-heading">
412
+ <a href="#M000013" class="method-signature">
413
+ <span class="method-name">get_meetings</span><span class="method-args">()</span>
414
+ </a>
415
+ </div>
416
+
417
+ <div class="method-description">
418
+ <p>
419
+ Returns a hash object containing the meeting information. See the API
420
+ documentation for details on the return XML (<a
421
+ href="http://code.google.com/p/bigbluebutton/wiki/API">code.google.com/p/bigbluebutton/wiki/API</a>).
422
+ &gt;= 0.7
423
+ </p>
424
+ <p>
425
+ TODO check if getMeetings exists in 0.64
426
+ </p>
427
+ <p><a class="source-toggle" href="#"
428
+ onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
429
+ <div class="method-source-code" id="M000013-source">
430
+ <pre>
431
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 158</span>
432
+ 158: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_meetings</span>
433
+ 159: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@version</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'0.7'</span>
434
+ 160: <span class="ruby-identifier">send_api_request</span>(<span class="ruby-identifier">:getMeetings</span>, { <span class="ruby-identifier">:random</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">rand</span>(<span class="ruby-value">9999999999</span>) } )
435
+ 161: <span class="ruby-keyword kw">else</span>
436
+ 162: {}
437
+ 163: <span class="ruby-keyword kw">end</span>
438
+ 164: <span class="ruby-keyword kw">end</span>
439
+ </pre>
440
+ </div>
441
+ </div>
442
+ </div>
443
+
444
+ <div id="method-M000010" class="method-detail">
445
+ <a name="M000010"></a>
446
+
447
+ <div class="method-heading">
448
+ <a href="#M000010" class="method-signature">
449
+ <span class="method-name">is_meeting_running?</span><span class="method-args">(meeting_id)</span>
450
+ </a>
451
+ </div>
452
+
453
+ <div class="method-description">
454
+ <p>
455
+ Returns true or false as to whether meeting is open. A meeting is only open
456
+ after at least one participant has joined.
457
+ </p>
458
+ <table>
459
+ <tr><td valign="top">meeting_id:</td><td>Unique identifier for the meeting
460
+
461
+ </td></tr>
462
+ </table>
463
+ <p><a class="source-toggle" href="#"
464
+ onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
465
+ <div class="method-source-code" id="M000010-source">
466
+ <pre>
467
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 114</span>
468
+ 114: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">is_meeting_running?</span>(<span class="ruby-identifier">meeting_id</span>)
469
+ 115: <span class="ruby-identifier">hash</span> = <span class="ruby-identifier">send_api_request</span>(<span class="ruby-identifier">:isMeetingRunning</span>, { <span class="ruby-identifier">:meetingID</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">meeting_id</span> } )
470
+ 116: <span class="ruby-identifier">hash</span>[<span class="ruby-identifier">:running</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;true&quot;</span>
471
+ 117: <span class="ruby-keyword kw">end</span>
472
+ </pre>
473
+ </div>
474
+ </div>
475
+ </div>
476
+
477
+ <div id="method-M000011" class="method-detail">
478
+ <a name="M000011"></a>
479
+
480
+ <div class="method-heading">
481
+ <a href="#M000011" class="method-signature">
482
+ <span class="method-name">join_meeting</span><span class="method-args">(meeting_id, user_name, password, user_id = nil, web_voice_conf = nil)</span>
483
+ </a>
484
+ </div>
485
+
486
+ <div class="method-description">
487
+ <p>
488
+ Warning: As of this version of the gem, this call does not work (instead of
489
+ returning XML response, it should join the meeting).
490
+ </p>
491
+ <p>
492
+ Joins a user into the meeting using an API call, instead of directing the
493
+ user&#8216;s browser to <a
494
+ href="BigBlueButtonApi.html#M000006">moderator_url</a> or <a
495
+ href="BigBlueButtonApi.html#M000007">attendee_url</a> (note: this will
496
+ still be required however to actually use bbb). Returns the URL a user can
497
+ use to enter this meeting.
498
+ </p>
499
+ <table>
500
+ <tr><td valign="top">meeting_id:</td><td>Unique identifier for the meeting
501
+
502
+ </td></tr>
503
+ <tr><td valign="top">user_name:</td><td>Name of the user
504
+
505
+ </td></tr>
506
+ <tr><td valign="top">password:</td><td>Moderator or attendee password for this meeting
507
+
508
+ </td></tr>
509
+ <tr><td valign="top">user_id:</td><td>Unique identifier for this user (&gt;=0.7)
510
+
511
+ </td></tr>
512
+ <tr><td valign="top">web_voice_conf:</td><td>Custom voice-extension for users using VoIP (&gt;=0.7)
513
+
514
+ </td></tr>
515
+ </table>
516
+ <p><a class="source-toggle" href="#"
517
+ onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
518
+ <div class="method-source-code" id="M000011-source">
519
+ <pre>
520
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 131</span>
521
+ 131: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">join_meeting</span>(<span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">user_name</span>, <span class="ruby-identifier">password</span>, <span class="ruby-identifier">user_id</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">web_voice_conf</span> = <span class="ruby-keyword kw">nil</span>)
522
+ 132: <span class="ruby-identifier">params</span> = { <span class="ruby-identifier">:meetingID</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">:password</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">password</span>, <span class="ruby-identifier">:fullName</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user_name</span> }
523
+ 133: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@version</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'0.64'</span>
524
+ 134: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:redirectImmediately</span>] = <span class="ruby-value">0</span>
525
+ 135: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@version</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'0.7'</span>
526
+ 136: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:userID</span>] = <span class="ruby-identifier">user_id</span>
527
+ 137: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:webVoiceConf</span>] = <span class="ruby-identifier">web_voice_conf</span>
528
+ 138: <span class="ruby-keyword kw">end</span>
529
+ 139: <span class="ruby-identifier">send_api_request</span>(<span class="ruby-identifier">:join</span>, <span class="ruby-identifier">params</span>)
530
+ 140: <span class="ruby-keyword kw">end</span>
531
+ </pre>
532
+ </div>
533
+ </div>
534
+ </div>
535
+
536
+ <div id="method-M000006" class="method-detail">
537
+ <a name="M000006"></a>
538
+
539
+ <div class="method-heading">
540
+ <a href="#M000006" class="method-signature">
541
+ <span class="method-name">moderator_url</span><span class="method-args">(meeting_id, user_name, password)</span>
542
+ </a>
543
+ </div>
544
+
545
+ <div class="method-description">
546
+ <p>
547
+ Returns url to login as moderator
548
+ </p>
549
+ <table>
550
+ <tr><td valign="top">meeting_id:</td><td>Unique identifier for the meeting
551
+
552
+ </td></tr>
553
+ <tr><td valign="top">user_name:</td><td>Name of the user
554
+
555
+ </td></tr>
556
+ <tr><td valign="top">password:</td><td>Moderator password for this meeting
557
+
558
+ </td></tr>
559
+ </table>
560
+ <p><a class="source-toggle" href="#"
561
+ onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
562
+ <div class="method-source-code" id="M000006-source">
563
+ <pre>
564
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 60</span>
565
+ 60: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">moderator_url</span>(<span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">user_name</span>, <span class="ruby-identifier">password</span>)
566
+ 61: <span class="ruby-identifier">attendee_url</span>(<span class="ruby-identifier">meeting_id</span>, <span class="ruby-identifier">user_name</span>, <span class="ruby-identifier">password</span>)
567
+ 62: <span class="ruby-keyword kw">end</span>
568
+ </pre>
569
+ </div>
570
+ </div>
571
+ </div>
572
+
573
+ <h3 class="section-bar">Protected Instance methods</h3>
574
+
575
+ <div id="method-M000014" class="method-detail">
576
+ <a name="M000014"></a>
577
+
578
+ <div class="method-heading">
579
+ <a href="#M000014" class="method-signature">
580
+ <span class="method-name">get_url</span><span class="method-args">(method, data)</span>
581
+ </a>
582
+ </div>
583
+
584
+ <div class="method-description">
585
+ <p><a class="source-toggle" href="#"
586
+ onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
587
+ <div class="method-source-code" id="M000014-source">
588
+ <pre>
589
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 168</span>
590
+ 168: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_url</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">data</span>)
591
+ 169: <span class="ruby-identifier">base_url</span> = <span class="ruby-node">&quot;#{@base_url}/#{method}?&quot;</span>
592
+ 170: <span class="ruby-identifier">params</span> = <span class="ruby-value str">&quot;&quot;</span>
593
+ 171: <span class="ruby-identifier">params</span> = <span class="ruby-identifier">data</span>.<span class="ruby-identifier">map</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;#{k}=&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-constant">CGI</span><span class="ruby-operator">::</span><span class="ruby-identifier">escape</span>(<span class="ruby-identifier">v</span>.<span class="ruby-identifier">to_s</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">nil?</span> }.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;&amp;&quot;</span>)
594
+ 172: <span class="ruby-identifier">checksum_param</span> = <span class="ruby-identifier">params</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@salt</span>
595
+ 173: <span class="ruby-identifier">checksum_param</span> = <span class="ruby-identifier">method</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">checksum_param</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@version</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'0.7'</span>
596
+ 174: <span class="ruby-identifier">checksum</span> = <span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">SHA1</span>.<span class="ruby-identifier">hexdigest</span>(<span class="ruby-identifier">checksum_param</span>)
597
+ 175: <span class="ruby-node">&quot;#{base_url}#{params}&amp;checksum=#{checksum}&quot;</span>
598
+ 176: <span class="ruby-keyword kw">end</span>
599
+ </pre>
600
+ </div>
601
+ </div>
602
+ </div>
603
+
604
+ <div id="method-M000015" class="method-detail">
605
+ <a name="M000015"></a>
606
+
607
+ <div class="method-heading">
608
+ <a href="#M000015" class="method-signature">
609
+ <span class="method-name">send_api_request</span><span class="method-args">(method, data = {})</span>
610
+ </a>
611
+ </div>
612
+
613
+ <div class="method-description">
614
+ <p><a class="source-toggle" href="#"
615
+ onclick="toggleCode('M000015-source');return false;">[Source]</a></p>
616
+ <div class="method-source-code" id="M000015-source">
617
+ <pre>
618
+ <span class="ruby-comment cmt"># File lib/bigbluebutton-api.rb, line 178</span>
619
+ 178: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">send_api_request</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">data</span> = {})
620
+ 179: <span class="ruby-identifier">url</span> = <span class="ruby-identifier">get_url</span>(<span class="ruby-identifier">method</span>, <span class="ruby-identifier">data</span>)
621
+ 180: <span class="ruby-identifier">res</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get_response</span>(<span class="ruby-constant">URI</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">url</span>))
622
+ 181: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;BigBlueButtonAPI: URL request = #{url}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@debug</span>
623
+ 182: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;BigBlueButtonAPI: URL response = #{res.body}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@debug</span>
624
+ 183:
625
+ 184: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>.<span class="ruby-identifier">empty?</span>
626
+ 185: <span class="ruby-identifier">raise</span> <span class="ruby-constant">BigBlueButtonException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;BigBlueButton error: No XML in the response body&quot;</span>)
627
+ 186: <span class="ruby-keyword kw">end</span>
628
+ 187:
629
+ 188: <span class="ruby-comment cmt"># 'Hashfy' the XML and remove the &quot;response&quot; node</span>
630
+ 189: <span class="ruby-identifier">hash</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">from_xml</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>
631
+ 190: <span class="ruby-identifier">hash</span> = <span class="ruby-constant">Hash</span>[<span class="ruby-identifier">hash</span>[<span class="ruby-identifier">:response</span>]].<span class="ruby-identifier">inject</span>({}){<span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,(<span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span>)<span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>; <span class="ruby-identifier">h</span>}
632
+ 191: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;BigBlueButtonAPI: URL response hash = #{hash.inspect}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@debug</span>
633
+ 192:
634
+ 193: <span class="ruby-identifier">return_code</span> = <span class="ruby-identifier">hash</span>[<span class="ruby-identifier">:returncode</span>]
635
+ 194: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">return_code</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;SUCCESS&quot;</span>
636
+ 195: <span class="ruby-identifier">raise</span> <span class="ruby-constant">BigBlueButtonException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;BigBlueButton error: #{hash[:message]}&quot;</span>)
637
+ 196: <span class="ruby-keyword kw">end</span>
638
+ 197: <span class="ruby-identifier">hash</span>
639
+ 198: <span class="ruby-keyword kw">end</span>
640
+ </pre>
641
+ </div>
642
+ </div>
643
+ </div>
644
+
645
+
646
+ </div>
647
+
648
+
649
+ </div>
650
+
651
+
652
+ <div id="validator-badges">
653
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
654
+ </div>
655
+
656
+ </body>
657
+ </html>