bigbluebutton_rails 0.0.1

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.
Files changed (97) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +2 -0
  3. data/CHANGELOG.rdoc +6 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +111 -0
  6. data/README.rdoc +147 -0
  7. data/Rakefile +37 -0
  8. data/app/controllers/bigbluebutton/rooms_controller.rb +193 -0
  9. data/app/controllers/bigbluebutton/servers_controller.rb +56 -0
  10. data/app/models/bigbluebutton_room.rb +16 -0
  11. data/app/models/bigbluebutton_server.rb +25 -0
  12. data/app/views/bigbluebutton/rooms/_form.html.erb +41 -0
  13. data/app/views/bigbluebutton/rooms/edit.html.erb +6 -0
  14. data/app/views/bigbluebutton/rooms/index.html.erb +34 -0
  15. data/app/views/bigbluebutton/rooms/join_wait.html.erb +27 -0
  16. data/app/views/bigbluebutton/rooms/new.html.erb +5 -0
  17. data/app/views/bigbluebutton/rooms/show.html.erb +35 -0
  18. data/app/views/bigbluebutton/servers/_form.html.erb +32 -0
  19. data/app/views/bigbluebutton/servers/edit.html.erb +6 -0
  20. data/app/views/bigbluebutton/servers/index.html.erb +27 -0
  21. data/app/views/bigbluebutton/servers/new.html.erb +5 -0
  22. data/app/views/bigbluebutton/servers/show.html.erb +31 -0
  23. data/bigbluebutton_rails.gemspec +27 -0
  24. data/config/locales/en.yml +18 -0
  25. data/config/routes.rb +2 -0
  26. data/lib/bigbluebutton_rails.rb +7 -0
  27. data/lib/bigbluebutton_rails/controller_methods.rb +52 -0
  28. data/lib/bigbluebutton_rails/rails.rb +11 -0
  29. data/lib/bigbluebutton_rails/rails/routes.rb +102 -0
  30. data/lib/bigbluebutton_rails/version.rb +3 -0
  31. data/lib/generators/bigbluebutton_rails/install_generator.rb +25 -0
  32. data/lib/generators/bigbluebutton_rails/public_generator.rb +17 -0
  33. data/lib/generators/bigbluebutton_rails/templates/migration.rb +31 -0
  34. data/lib/generators/bigbluebutton_rails/templates/public/images/loading.gif +0 -0
  35. data/lib/generators/bigbluebutton_rails/templates/public/javascripts/heartbeat.js +54 -0
  36. data/lib/generators/bigbluebutton_rails/templates/public/javascripts/jquery.min.js +16 -0
  37. data/lib/generators/bigbluebutton_rails/views_generator.rb +18 -0
  38. data/spec/bigbluebutton_rails_spec.rb +11 -0
  39. data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +404 -0
  40. data/spec/controllers/bigbluebutton/servers_controller_spec.rb +78 -0
  41. data/spec/factories/bigbluebutton_room.rb +8 -0
  42. data/spec/factories/bigbluebutton_server.rb +6 -0
  43. data/spec/generators/install_generator_spec.rb +23 -0
  44. data/spec/generators/public_generator_spec.rb +32 -0
  45. data/spec/generators/views_generator_spec.rb +52 -0
  46. data/spec/models/bigbluebutton_room_spec.rb +48 -0
  47. data/spec/models/bigbluebutton_server_spec.rb +83 -0
  48. data/spec/rails_app/.gitignore +3 -0
  49. data/spec/rails_app/Rakefile +7 -0
  50. data/spec/rails_app/app/controllers/application_controller.rb +16 -0
  51. data/spec/rails_app/app/controllers/space_controller.rb +8 -0
  52. data/spec/rails_app/app/controllers/user_controller.rb +8 -0
  53. data/spec/rails_app/app/helpers/application_helper.rb +2 -0
  54. data/spec/rails_app/app/views/layouts/application.html.erb +14 -0
  55. data/spec/rails_app/app/views/space/index.html.erb +2 -0
  56. data/spec/rails_app/app/views/space/show.html.erb +2 -0
  57. data/spec/rails_app/app/views/user/index.html.erb +2 -0
  58. data/spec/rails_app/app/views/user/show.html.erb +2 -0
  59. data/spec/rails_app/config.ru +4 -0
  60. data/spec/rails_app/config/application.rb +45 -0
  61. data/spec/rails_app/config/boot.rb +10 -0
  62. data/spec/rails_app/config/database.yml +22 -0
  63. data/spec/rails_app/config/environment.rb +5 -0
  64. data/spec/rails_app/config/environments/development.rb +26 -0
  65. data/spec/rails_app/config/environments/production.rb +49 -0
  66. data/spec/rails_app/config/environments/test.rb +35 -0
  67. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  68. data/spec/rails_app/config/initializers/inflections.rb +10 -0
  69. data/spec/rails_app/config/initializers/mime_types.rb +5 -0
  70. data/spec/rails_app/config/initializers/secret_token.rb +7 -0
  71. data/spec/rails_app/config/initializers/session_store.rb +8 -0
  72. data/spec/rails_app/config/locales/en.yml +5 -0
  73. data/spec/rails_app/config/routes.rb +14 -0
  74. data/spec/rails_app/db/seeds.rb +7 -0
  75. data/spec/rails_app/doc/README_FOR_APP +2 -0
  76. data/spec/rails_app/public/404.html +26 -0
  77. data/spec/rails_app/public/422.html +26 -0
  78. data/spec/rails_app/public/500.html +26 -0
  79. data/spec/rails_app/public/favicon.ico +0 -0
  80. data/spec/rails_app/public/images/rails.png +0 -0
  81. data/spec/rails_app/public/index.html +239 -0
  82. data/spec/rails_app/public/javascripts/application.js +2 -0
  83. data/spec/rails_app/public/javascripts/controls.js +965 -0
  84. data/spec/rails_app/public/javascripts/dragdrop.js +974 -0
  85. data/spec/rails_app/public/javascripts/effects.js +1123 -0
  86. data/spec/rails_app/public/javascripts/prototype.js +6001 -0
  87. data/spec/rails_app/public/javascripts/rails.js +191 -0
  88. data/spec/rails_app/public/robots.txt +5 -0
  89. data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
  90. data/spec/rails_app/public/stylesheets/scaffold.css +56 -0
  91. data/spec/rails_app/script/rails +6 -0
  92. data/spec/rails_app/vendor/plugins/.gitkeep +0 -0
  93. data/spec/routing/bigbluebutton/rooms_routing_spec.rb +89 -0
  94. data/spec/routing/bigbluebutton/servers_routing_spec.rb +38 -0
  95. data/spec/spec_helper.rb +37 -0
  96. data/spec/support/matchers/have_same_attributes_as.rb +10 -0
  97. metadata +234 -0
@@ -0,0 +1,56 @@
1
+ class Bigbluebutton::ServersController < ApplicationController
2
+
3
+ respond_to :html
4
+
5
+ def index
6
+ respond_with(@servers = BigbluebuttonServer.all)
7
+ end
8
+
9
+ def show
10
+ respond_with(@server = BigbluebuttonServer.find(params[:id]))
11
+ end
12
+
13
+ def new
14
+ respond_with(@server = BigbluebuttonServer.new)
15
+ end
16
+
17
+ def edit
18
+ respond_with(@server = BigbluebuttonServer.find(params[:id]))
19
+ end
20
+
21
+ def create
22
+ @server = BigbluebuttonServer.new(params[:bigbluebutton_server])
23
+
24
+ respond_with @server do |format|
25
+ if @server.save
26
+ format.html {
27
+ message = t('bigbluebutton_rails.servers.notice.create.success')
28
+ redirect_to(@server, :notice => message)
29
+ }
30
+ else
31
+ format.html { render :action => "new" }
32
+ end
33
+ end
34
+ end
35
+
36
+ def update
37
+ @server = BigbluebuttonServer.find(params[:id])
38
+
39
+ respond_with @server do |format|
40
+ if @server.update_attributes(params[:bigbluebutton_server])
41
+ format.html {
42
+ message = t('bigbluebutton_rails.servers.notice.update.success')
43
+ redirect_to(@server, :notice => message)
44
+ }
45
+ else
46
+ format.html { render :action => "edit" }
47
+ end
48
+ end
49
+ end
50
+
51
+ def destroy
52
+ @server = BigbluebuttonServer.find(params[:id])
53
+ @server.destroy
54
+ redirect_to(bigbluebutton_servers_url)
55
+ end
56
+ end
@@ -0,0 +1,16 @@
1
+ class BigbluebuttonRoom < ActiveRecord::Base
2
+ belongs_to :server, :class_name => 'BigbluebuttonServer'
3
+ belongs_to :owner, :polymorphic => true
4
+
5
+ validates :server_id, :presence => true
6
+ validates :meeting_id, :presence => true, :uniqueness => true,
7
+ :length => { :minimum => 1, :maximum => 100 }
8
+ validates :name, :presence => true, :uniqueness => true,
9
+ :length => { :minimum => 1, :maximum => 150 }
10
+ validates :attendee_password, :length => { :maximum => 50 }
11
+ validates :moderator_password, :length => { :maximum => 50 }
12
+ validates :welcome_msg, :length => { :maximum => 250 }
13
+
14
+ attr_accessible :name, :server_id, :meeting_id, :attendee_password,
15
+ :moderator_password, :welcome_msg
16
+ end
@@ -0,0 +1,25 @@
1
+ require 'bigbluebutton-api'
2
+
3
+ class BigbluebuttonServer < ActiveRecord::Base
4
+ has_many :rooms, :class_name => 'BigbluebuttonRoom', :foreign_key => 'server_id',
5
+ :dependent => :destroy
6
+
7
+ validates :name, :presence => true, :length => { :minimum => 1, :maximum => 500 }
8
+
9
+ validates :url, :presence => true, :uniqueness => true, :length => { :maximum => 500 }
10
+ validates :url, :format => { :with => /http:\/\/.*\/bigbluebutton\/api/,
11
+ :message => 'URL should have the pattern http://<server>/bigbluebutton/api' }
12
+
13
+ validates :salt, :presence => true, :length => { :minimum => 1, :maximum => 500 }
14
+
15
+ validates :version, :presence => true, :inclusion => { :in => ['0.64', '0.7'] }
16
+
17
+ def api
18
+ if @api.nil?
19
+ @api = BigBlueButton::BigBlueButtonApi.new(self.url, self.salt,
20
+ self.version.to_s, false)
21
+ end
22
+ @api
23
+ end
24
+
25
+ end
@@ -0,0 +1,41 @@
1
+ <% if @room.new_record? %>
2
+ <% url = bigbluebutton_server_rooms_path(@server) %>
3
+ <% else %>
4
+ <% url = bigbluebutton_server_room_path(@server, @room) %>
5
+ <% end %>
6
+ <%= form_for [@server, @room], :url => url do |f| %>
7
+ <% if @room.errors.any? %>
8
+ <div id="error_explanation">
9
+ <h2><%= pluralize(@room.errors.count, "error") %> prohibited this bigbluebutton_room from being saved:</h2>
10
+ <ul>
11
+ <% @room.errors.full_messages.each do |msg| %>
12
+ <li><%= msg %></li>
13
+ <% end %>
14
+ </ul>
15
+ </div>
16
+ <% end %>
17
+
18
+ <div class="field">
19
+ <%= f.label :meeting_id %><br />
20
+ <%= f.text_field :meeting_id %>
21
+ </div>
22
+ <div class="field">
23
+ <%= f.label :name %><br />
24
+ <%= f.text_field :name %>
25
+ </div>
26
+ <div class="field">
27
+ <%= f.label :attendee_password %><br />
28
+ <%= f.text_field :attendee_password %>
29
+ </div>
30
+ <div class="field">
31
+ <%= f.label :moderator_password %><br />
32
+ <%= f.text_field :moderator_password %>
33
+ </div>
34
+ <div class="field">
35
+ <%= f.label :welcome_msg %><br />
36
+ <%= f.text_field :welcome_msg %>
37
+ </div>
38
+ <div class="actions">
39
+ <%= f.submit %>
40
+ </div>
41
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Edit room:</h1>
2
+ <%= render 'form' %>
3
+
4
+ <%= link_to 'Show', bigbluebutton_server_room_path(@server, @room) %> |
5
+ <%= link_to 'Back', bigbluebutton_server_rooms_path %>
6
+
@@ -0,0 +1,34 @@
1
+ <h1>Listing rooms</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Server ID</th>
6
+ <th>Meeting ID</th>
7
+ <th>Meeting Name</th>
8
+ <th>Attendee Password</th>
9
+ <th>Moderator Password</th>
10
+ <th>Welcome Message</th>
11
+ <th></th>
12
+ <th></th>
13
+ <th></th>
14
+ </tr>
15
+
16
+ <% @rooms.each do |room| %>
17
+ <tr>
18
+ <td><%= room.server.id %></td>
19
+ <td><%= room.meeting_id %></td>
20
+ <td><%= room.name %></td>
21
+ <td><%= room.attendee_password %></td>
22
+ <td><%= room.moderator_password %></td>
23
+ <td><%= room.welcome_msg %></td>
24
+ <td><%= link_to 'Show', bigbluebutton_server_room_path(@server, room) %></td>
25
+ <td><%= link_to 'Edit', edit_bigbluebutton_server_room_path(@server, room) %></td>
26
+ <td><%= link_to 'Destroy', bigbluebutton_server_room_path(@server, room), :confirm => 'Are you sure?', :method => :delete %></td>
27
+ </tr>
28
+ <% end %>
29
+
30
+ </table>
31
+
32
+ <br />
33
+
34
+ <%= link_to 'New Room', new_bigbluebutton_server_room_path %>
@@ -0,0 +1,27 @@
1
+ <script type="text/javascript">
2
+
3
+ function heartbeat_callback() {
4
+ // TODO Should parse the json to get the response
5
+ if ($("#room_heartbeat_div").text().search("true") > 0) {
6
+ window.location.reload();
7
+ }
8
+ }
9
+
10
+ $(document).ready(function(){
11
+ $.jheartbeat.set({
12
+ url: "<%= running_bigbluebutton_server_room_url(@server, @room, :format => 'json') %>",
13
+ delay: 3000,
14
+ div_id: "room_heartbeat_div"
15
+ }, function () {
16
+ heartbeat_callback();
17
+ });
18
+ });
19
+
20
+ </script>
21
+
22
+ <h1>Meeting <%= @room.name %></h1>
23
+
24
+ <%= image_tag "loading.gif" %>
25
+ <p>The meeting has not started yet, you must wait for the moderator to join.</p>
26
+ <p>Your browser will automatically refresh and join the meeting when it starts.</p>
27
+
@@ -0,0 +1,5 @@
1
+ <h1>New room:</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Back', bigbluebutton_server_rooms_path %>
@@ -0,0 +1,35 @@
1
+ <h1>Room:</h1>
2
+
3
+ <p id="notice"><%= notice %></p>
4
+
5
+ <p>
6
+ <b>Server ID:</b>
7
+ <%= @room.server.id %>
8
+ </p>
9
+ <p>
10
+ <b>Meeting ID:</b>
11
+ <%= @room.meeting_id %>
12
+ </p>
13
+ <p>
14
+ <b>Meeting Name:</b>
15
+ <%= @room.name %>
16
+ </p>
17
+ <p>
18
+ <b>Attendee Password:</b>
19
+ <%= @room.attendee_password %>
20
+ </p>
21
+ <p>
22
+ <b>Moderator Password:</b>
23
+ <%= @room.moderator_password %>
24
+ </p>
25
+ <p>
26
+ <b>Welcome Message:</b>
27
+ <%= @room.welcome_msg %>
28
+ </p>
29
+
30
+ <%= link_to 'Edit', edit_bigbluebutton_server_room_path(@room.server, @room) %> |
31
+ <%= link_to 'Back', bigbluebutton_server_rooms_path(@room.server) %>
32
+
33
+ <br/>
34
+
35
+ <%= link_to 'Join', join_bigbluebutton_server_room_path(@room.server, @room) %>
@@ -0,0 +1,32 @@
1
+ <%= form_for(@server) do |f| %>
2
+ <% if @server.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@server.errors.count, "error") %> prohibited this bigbluebutton_server from being saved:</h2>
5
+ <ul>
6
+ <% @server.errors.full_messages.each do |msg| %>
7
+ <li><%= msg %></li>
8
+ <% end %>
9
+ </ul>
10
+ </div>
11
+ <% end %>
12
+
13
+ <div class="field">
14
+ <%= f.label :name %><br />
15
+ <%= f.text_field :name %>
16
+ </div>
17
+ <div class="field">
18
+ <%= f.label :url %><br />
19
+ <%= f.text_field :url %>
20
+ </div>
21
+ <div class="field">
22
+ <%= f.label :salt %><br />
23
+ <%= f.text_field :salt %>
24
+ </div>
25
+ <div class="field">
26
+ <%= f.label :version %><br />
27
+ <%= f.text_field :version %>
28
+ </div>
29
+ <div class="actions">
30
+ <%= f.submit %>
31
+ </div>
32
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Edit server:</h1>
2
+ <%= render 'form' %>
3
+
4
+ <%= link_to 'Show', @server %> |
5
+ <%= link_to 'Back', bigbluebutton_servers_path %>
6
+
@@ -0,0 +1,27 @@
1
+ <h1>Listing servers</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Name</th>
6
+ <th>Url</th>
7
+ <th>Salt</th>
8
+ <th></th>
9
+ <th></th>
10
+ <th></th>
11
+ </tr>
12
+
13
+ <% @servers.each do |server| %>
14
+ <tr>
15
+ <td><%= server.name %></td>
16
+ <td><%= server.url %></td>
17
+ <td><%= server.salt %></td>
18
+ <td><%= link_to 'Show', server %></td>
19
+ <td><%= link_to 'Edit', edit_bigbluebutton_server_path(server) %></td>
20
+ <td><%= link_to 'Destroy', server, :confirm => 'Are you sure?', :method => :delete %></td>
21
+ </tr>
22
+ <% end %>
23
+ </table>
24
+
25
+ <br />
26
+
27
+ <%= link_to 'New Server', new_bigbluebutton_server_path %>
@@ -0,0 +1,5 @@
1
+ <h1>New server:</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Back', bigbluebutton_servers_path %>
@@ -0,0 +1,31 @@
1
+ <h1>Server:</h1>
2
+
3
+ <p id="notice"><%= notice %></p>
4
+
5
+ <p>
6
+ <b>Name:</b>
7
+ <%= @server.name %>
8
+ </p>
9
+
10
+ <p>
11
+ <b>Url:</b>
12
+ <%= @server.url %>
13
+ </p>
14
+
15
+ <p>
16
+ <b>Salt:</b>
17
+ <%= @server.salt %>
18
+ </p>
19
+
20
+ <p>
21
+ <b>Version:</b>
22
+ <%= @server.version %>
23
+ </p>
24
+
25
+
26
+ <%= link_to 'Edit', edit_bigbluebutton_server_path(@server) %> |
27
+ <%= link_to 'Back', bigbluebutton_servers_path %>
28
+
29
+ <br/>
30
+
31
+ <%= link_to 'New room', new_bigbluebutton_server_room_path(@server) %>
@@ -0,0 +1,27 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "bigbluebutton_rails/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "bigbluebutton_rails"
6
+ s.version = BigbluebuttonRails::VERSION.dup
7
+ s.platform = Gem::Platform::RUBY
8
+ s.summary = "BigBlueButton integration for Ruby on Rails"
9
+ s.email = "mconf@googlegroups.com"
10
+ s.homepage = "http://github.com/mconf/bigbluebutton_rails"
11
+ s.description = "BigBlueButton integration for Ruby on Rails"
12
+ s.authors = ['Leonardo Crauss Daronco']
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_runtime_dependency("rails", "~> 3.0.3")
19
+ s.add_runtime_dependency("bigbluebutton-api-ruby", "~> 0.0.8")
20
+
21
+ s.add_development_dependency("rspec-rails", "~> 2.5.0")
22
+ s.add_development_dependency("factory_girl", "~> 1.3.2")
23
+ s.add_development_dependency("sqlite3-ruby", "~> 1.3.3")
24
+ s.add_development_dependency("generator_spec", "~> 0.8.2")
25
+ s.add_development_dependency("shoulda-matchers", "~> 1.0.0.beta")
26
+ s.add_development_dependency("forgery", "~> 0.3.7")
27
+ end
@@ -0,0 +1,18 @@
1
+ en:
2
+ bigbluebutton_rails:
3
+ bigbluebutton: "BigBlueButton"
4
+ servers:
5
+ notice:
6
+ create:
7
+ success: "Your server was successfully created."
8
+ update:
9
+ success: "Your server was successfully updated."
10
+ rooms:
11
+ notice:
12
+ create:
13
+ success: "Your room was successfully created."
14
+ update:
15
+ success: "Your room was successfully updated."
16
+ end:
17
+ success: "The meeting was successfully ended."
18
+ not_running: "The meeting could not be ended because it is not running."
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ Rails.application.routes.draw do
2
+ end
@@ -0,0 +1,7 @@
1
+ require 'rails'
2
+
3
+ module BigbluebuttonRails
4
+ require 'bigbluebutton_rails/rails'
5
+ require 'bigbluebutton_rails/controller_methods'
6
+ require 'bigbluebutton_rails/rails/routes.rb'
7
+ end
@@ -0,0 +1,52 @@
1
+ module BigbluebuttonRails
2
+
3
+ # Module that is automatically included into all controllers.
4
+ module ControllerMethods
5
+
6
+ def self.included(base)
7
+ base.class_eval do
8
+
9
+ # Method used to acquire the user for which the BigBlueButton actions are being
10
+ # called (e.g. the user creating or joining the room).
11
+ # Defaults to the user currently logged in, using the method current_user.
12
+ # If your application has no method current_user or if you want
13
+ # to change the behavior of this method, just redefine it in your
14
+ # controller. You may want to do it in the ApplicationController to make it
15
+ # available to all controllers. For example:
16
+ #
17
+ # def bigbluebutton_user
18
+ # User.where(:bigbluebutton_admin => true).first
19
+ # end
20
+ #
21
+ # Note that BigbluebuttonRails assumes that the returned object has
22
+ # a method called 'name' that returns the user's full name.
23
+ def bigbluebutton_user
24
+ current_user
25
+ end
26
+
27
+ # Returns the role that the current user has in the room 'room'.
28
+ # Possibilities:
29
+ # :moderator
30
+ # :attendee
31
+ # You may want to redefine this method in your controllers to define
32
+ # real roles to the users. By default, everyone has moderator permissions.
33
+ # Redefine it in your ApplicationController to make it available to all
34
+ # controllers. For example:
35
+ #
36
+ # def bigbluebutton_role(@room)
37
+ # r = Roles.where(:bigbluebutton_room_id => @room.id).
38
+ # where(:user_id => current_user.id).
39
+ # first
40
+ # r.role
41
+ # end
42
+ #
43
+ def bigbluebutton_role(room)
44
+ :moderator
45
+ end
46
+
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ end