bigbluebutton-api-ruby 0.0.4

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