bigbluebutton_rails 1.4.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +10 -1
  4. data/CHANGELOG.md +259 -0
  5. data/Gemfile +14 -19
  6. data/Gemfile.lock +194 -188
  7. data/README.md +416 -0
  8. data/Rakefile +12 -12
  9. data/TODO.md +13 -0
  10. data/app/controllers/bigbluebutton/playback_types_controller.rb +44 -0
  11. data/app/controllers/bigbluebutton/recordings_controller.rb +17 -10
  12. data/app/controllers/bigbluebutton/rooms_controller.rb +65 -36
  13. data/app/controllers/bigbluebutton/servers_controller.rb +12 -8
  14. data/app/models/bigbluebutton_metadata.rb +1 -1
  15. data/app/models/bigbluebutton_playback_format.rb +22 -1
  16. data/app/models/bigbluebutton_playback_type.rb +29 -0
  17. data/app/models/bigbluebutton_recording.rb +38 -19
  18. data/app/models/bigbluebutton_room.rb +150 -73
  19. data/app/models/bigbluebutton_room_options.rb +10 -7
  20. data/app/models/bigbluebutton_server.rb +69 -13
  21. data/app/models/bigbluebutton_server_config.rb +49 -0
  22. data/app/views/bigbluebutton/recordings/_form.html.erb +4 -0
  23. data/app/views/bigbluebutton/recordings/_recordings.html.erb +10 -3
  24. data/app/views/bigbluebutton/rooms/_form.html.erb +18 -6
  25. data/app/views/bigbluebutton/rooms/_rooms.html.erb +6 -3
  26. data/app/views/bigbluebutton/rooms/invite.html.erb +5 -5
  27. data/app/views/bigbluebutton/rooms/show.html.erb +18 -6
  28. data/app/views/bigbluebutton/servers/_form.html.erb +1 -1
  29. data/app/views/bigbluebutton/servers/show.html.erb +5 -0
  30. data/app/workers/bigbluebutton_finish_meetings.rb +11 -0
  31. data/app/workers/bigbluebutton_update_recordings.rb +11 -0
  32. data/app/workers/bigbluebutton_update_server_configs.rb +18 -0
  33. data/bigbluebutton_rails.gemspec +8 -7
  34. data/config/locales/en.yml +52 -7
  35. data/config/locales/pt-br.yml +162 -0
  36. data/config/resque/resque.rake +27 -0
  37. data/config/resque/workers_schedule.yml +17 -0
  38. data/lib/bigbluebutton_rails.rb +30 -2
  39. data/lib/bigbluebutton_rails/background_tasks.rb +31 -0
  40. data/lib/bigbluebutton_rails/controller_methods.rb +12 -8
  41. data/lib/bigbluebutton_rails/dial_number.rb +48 -0
  42. data/lib/bigbluebutton_rails/rails/routes.rb +9 -2
  43. data/lib/bigbluebutton_rails/utils.rb +9 -2
  44. data/lib/bigbluebutton_rails/version.rb +1 -1
  45. data/lib/generators/bigbluebutton_rails/install_generator.rb +0 -8
  46. data/lib/generators/bigbluebutton_rails/templates/migration.rb +28 -6
  47. data/lib/generators/bigbluebutton_rails/templates/migration_2_0_0.rb +56 -0
  48. data/lib/tasks/bigbluebutton_rails/meetings.rake +1 -13
  49. data/lib/tasks/bigbluebutton_rails/recordings.rake +1 -12
  50. data/lib/tasks/bigbluebutton_rails/server_configs.rake +10 -0
  51. data/spec/bigbluebutton_rails_spec.rb +0 -13
  52. data/spec/controllers/bigbluebutton/playback_types_controller_spec.rb +76 -0
  53. data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +109 -37
  54. data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +1 -0
  55. data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +27 -3
  56. data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +338 -77
  57. data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +8 -0
  58. data/spec/controllers/bigbluebutton/servers_controller_spec.rb +182 -47
  59. data/spec/factories/bigbluebutton_meeting.rb +2 -2
  60. data/spec/factories/bigbluebutton_playback_format.rb +2 -2
  61. data/spec/factories/bigbluebutton_playback_type.rb +7 -0
  62. data/spec/factories/bigbluebutton_recording.rb +8 -0
  63. data/spec/factories/bigbluebutton_room.rb +10 -3
  64. data/spec/factories/bigbluebutton_server.rb +6 -1
  65. data/spec/factories/bigbluebutton_server_config.rb +6 -0
  66. data/spec/generators/install_generator_spec.rb +0 -16
  67. data/spec/lib/bigbluebutton_rails/background_tasks_spec.rb +61 -0
  68. data/spec/lib/bigbluebutton_rails/dial_number_spec.rb +78 -0
  69. data/spec/lib/bigbluebutton_rails/utils_spec.rb +56 -0
  70. data/spec/lib/tasks/meetings_rake_spec.rb +14 -1
  71. data/spec/lib/tasks/recordings_rake_spec.rb +14 -1
  72. data/spec/models/bigbluebutton_meeting_db_spec.rb +3 -3
  73. data/spec/models/bigbluebutton_meeting_spec.rb +4 -4
  74. data/spec/models/bigbluebutton_playback_format_db_spec.rb +0 -1
  75. data/spec/models/bigbluebutton_playback_format_spec.rb +75 -4
  76. data/spec/models/bigbluebutton_playback_type_db_spec.rb +14 -0
  77. data/spec/models/bigbluebutton_playback_type_spec.rb +76 -0
  78. data/spec/models/bigbluebutton_recording_db_spec.rb +3 -1
  79. data/spec/models/bigbluebutton_recording_spec.rb +234 -58
  80. data/spec/models/bigbluebutton_room_db_spec.rb +8 -6
  81. data/spec/models/bigbluebutton_room_options_db_spec.rb +1 -0
  82. data/spec/models/bigbluebutton_room_options_spec.rb +137 -38
  83. data/spec/models/bigbluebutton_room_spec.rb +540 -153
  84. data/spec/models/bigbluebutton_server_config_spec.rb +115 -0
  85. data/spec/models/bigbluebutton_server_spec.rb +180 -23
  86. data/spec/rails_app/app/controllers/my_playback_types_controller.rb +7 -0
  87. data/spec/rails_app/app/views/frontpage/show.html.erb +1 -0
  88. data/spec/rails_app/app/views/my_playback_types/index.html.erb +33 -0
  89. data/spec/rails_app/config/application.rb +0 -3
  90. data/spec/rails_app/config/database.yml.travis +10 -0
  91. data/spec/rails_app/config/environments/development.rb +1 -6
  92. data/spec/rails_app/config/environments/production.rb +2 -0
  93. data/spec/rails_app/config/environments/test.rb +2 -0
  94. data/spec/rails_app/config/routes.rb +5 -2
  95. data/spec/rails_app/db/seeds.rb +1 -1
  96. data/spec/rails_app/features/config.yml.example +3 -4
  97. data/spec/rails_app/features/join_rooms.feature +14 -14
  98. data/spec/rails_app/features/step_definitions/activity_monitor_servers_step.rb +2 -2
  99. data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +4 -4
  100. data/spec/rails_app/features/step_definitions/destroy_rooms_steps.rb +2 -2
  101. data/spec/rails_app/features/step_definitions/join_rooms_steps.rb +10 -10
  102. data/spec/rails_app/features/step_definitions/web_steps.rb +2 -2
  103. data/spec/rails_app/features/support/configurations.rb +1 -1
  104. data/spec/rails_app/features/support/templates.rb +12 -12
  105. data/spec/rails_app/lib/tasks/db/populate.rake +19 -6
  106. data/spec/routing/bigbluebutton/custom_controllers_routing_spec.rb +1 -1
  107. data/spec/routing/bigbluebutton/recordings_only_routing_spec.rb +2 -2
  108. data/spec/routing/bigbluebutton/recordings_routing_spec.rb +2 -2
  109. data/spec/routing/bigbluebutton/rooms_only_routing_spec.rb +1 -1
  110. data/spec/routing/bigbluebutton/rooms_routing_spec.rb +15 -1
  111. data/spec/routing/bigbluebutton/servers_only_routing_spec.rb +1 -1
  112. data/spec/routing/bigbluebutton/servers_routing_spec.rb +1 -1
  113. data/spec/spec_helper.rb +23 -31
  114. data/spec/support/matchers/delegate_matcher.rb +8 -1
  115. data/spec/support/matchers/shoulda/respond_with_json_matcher.rb +2 -2
  116. data/spec/support/mocked_server.rb +2 -0
  117. data/spec/support/shared_contexts/rake.rb +23 -0
  118. data/spec/workers/bigbluebutton_finish_meetings_spec.rb +14 -0
  119. data/spec/workers/bigbluebutton_update_recordings_spec.rb +14 -0
  120. data/spec/workers/bigbluebutton_update_server_configs_spec.rb +47 -0
  121. metadata +70 -59
  122. data/CHANGELOG.rdoc +0 -111
  123. data/README.rdoc +0 -319
  124. data/TODO.rdoc +0 -16
  125. data/config/schedule.rb +0 -7
@@ -0,0 +1,31 @@
1
+ module BigbluebuttonRails
2
+
3
+ # Helper methods to execute tasks that run in resque and rake.
4
+ class BackgroundTasks
5
+
6
+ def self.finish_meetings
7
+ BigbluebuttonMeeting.where(running: true).find_each do |meeting|
8
+ Rails.logger.info "BackgroundTasks: Checking if the meeting has ended: #{meeting.inspect}"
9
+ if meeting.room and !meeting.room.fetch_is_running?
10
+ Rails.logger.info "BackgroundTasks: Setting meeting as ended: #{meeting.inspect}"
11
+ meeting.update_attributes(running: false)
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.update_recordings
17
+ BigbluebuttonServer.find_each do |server|
18
+ begin
19
+ server.fetch_recordings
20
+ Rails.logger.info "BackgroundTasks: List of recordings from #{server.url} updated successfully"
21
+ rescue Exception => e
22
+ Rails.logger.info "BackgroundTasks: Failure fetching recordings from #{server.inspect}"
23
+ Rails.logger.info "BackgroundTasks: #{e.inspect}"
24
+ Rails.logger.info "BackgroundTasks: #{e.backtrace.join("\n")}"
25
+ end
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -29,12 +29,12 @@ module BigbluebuttonRails
29
29
  # Returns the role that the current user has in the room 'room'. Return values:
30
30
  # :moderator # the user has attendee permissions
31
31
  # :attendee # the user has moderator permissions
32
- # :password # the user must enter a password that will define his role
32
+ # :key # the user must enter a key that will define his role
33
33
  # nil # no role at all (the room is blocked to this user)
34
34
  #
35
35
  # Returning :moderator or :attendee means that the current user has access
36
36
  # to the room and has moderator or attendee privileges, respectively.
37
- # Returning :password indicates that the user must enter a password to define
37
+ # Returning :key indicates that the user must enter a key to define
38
38
  # his role in the room.
39
39
  # At last, returning nil means that the user cannot access access this room
40
40
  # at all. BigbluebuttonRails::RoomController will thrown an exception of the
@@ -51,7 +51,7 @@ module BigbluebuttonRails
51
51
  # You may want to redefine this method in your application to define
52
52
  # real roles to the users. By default, if the room is not private and the user
53
53
  # is logged, he will have moderator permissions. Otherwise, he must enter
54
- # a password. Redefine it in your ApplicationController to make it available
54
+ # a key. Redefine it in your ApplicationController to make it available
55
55
  # to all controllers. For example:
56
56
  #
57
57
  # def bigbluebutton_role(@room)
@@ -63,7 +63,7 @@ module BigbluebuttonRails
63
63
  # # only friends are allowed to enter
64
64
  # elsif @room.owner.friends.include? bigbluebutton_user
65
65
  # if @room.private
66
- # :password # with password if the room is private
66
+ # :key # with key if the room is private
67
67
  # else
68
68
  # :attendee
69
69
  # end
@@ -77,7 +77,7 @@ module BigbluebuttonRails
77
77
  #
78
78
  def bigbluebutton_role(room)
79
79
  if room.private or bigbluebutton_user.nil?
80
- :password # ask for a password
80
+ :key # ask for a key
81
81
  else
82
82
  :moderator
83
83
  end
@@ -107,18 +107,22 @@ module BigbluebuttonRails
107
107
  end
108
108
 
109
109
  # Method called right before a meeting is created to get options that should receive
110
- # priority over the options saved in the database when sending the <tt>create</tt>API
111
- # call.
110
+ # priority over the options saved in the database when sending the <tt>create</tt>
111
+ # API call.
112
112
  # The parameter 'room' is the BigbluebuttonRoom where the meeting is about
113
113
  # to be created.
114
114
  #
115
- # By default, all options send in a 'create' API call are taken from the
115
+ # By default, all options sent in a 'create' API call are taken from the
116
116
  # options saved in the database for the target room. This includes, for example,
117
117
  # the meeting's name, dial number, welcome message, if it should be recorded or not.
118
118
  # This method can return a hash of options to force some of these options to be
119
119
  # different from what is stored in the database. For example, if a room should *not* be
120
120
  # recorded in case unprivileged users create it, this method can return <tt>{ record: false }</tt>
121
121
  # to force the <tt>record</tt> flag to be false.
122
+ # The keys used in this hash should correspond to the attributes sent in the <tt>CREATE</tt>
123
+ # API call, not the the attributes stored in the database! See the method
124
+ # <tt>create_meeting</tt> in the gem <tt>bigbluebutton-api-ruby</tt> for examples.
125
+ # (https://github.com/mconf/bigbluebutton-api-ruby/blob/master/lib/bigbluebutton_api.rb#L156)
122
126
  #
123
127
  # You may want to override this in your ApplicationController to implement your own
124
128
  # own logic, if needed. For example:
@@ -0,0 +1,48 @@
1
+ module BigbluebuttonRails
2
+ class DialNumber
3
+
4
+ # Generates a random dial number based on the `pattern` (e.g. '123x-xxxx')
5
+ def self.randomize(pattern=nil, opt={})
6
+ return nil if pattern.nil?
7
+ sym = get_symbol(opt)
8
+ size = pattern.count(sym)
9
+
10
+ # e.g. random from 0 to 999 if the pattern has 3 x's
11
+ num = SecureRandom.random_number((10 ** size) - 1)
12
+
13
+ get_dial_number_from_ordinal(num, pattern, opt)
14
+ end
15
+
16
+ def self.get_dial_number_from_ordinal(ordinal, pattern=nil, opt={})
17
+ return nil if pattern.nil?
18
+ sym = get_symbol(opt)
19
+
20
+ number_size = pattern.count(sym)
21
+ ordinal_str = ordinal.to_s.rjust(number_size,'0').reverse
22
+ dial_number = pattern.reverse
23
+
24
+ ordinal_str.each_char do |n|
25
+ dial_number.sub!(sym, n)
26
+ end
27
+
28
+ dial_number.reverse
29
+ end
30
+
31
+ def self.get_ordinal_from_dial_number(number, pattern=nil, opt={})
32
+ return nil if pattern.nil?
33
+ sym = get_symbol(opt)
34
+
35
+ regexp = Regexp.new(pattern.gsub(sym, '([0-9])')) # make a pattern to capture only the numbers
36
+ match = regexp.match(number) # extract only the numbers
37
+
38
+ # join the numbers and turn then into an ordinal integer
39
+ ordinal = match[1, match.size].join.to_i if match.present?
40
+
41
+ ordinal
42
+ end
43
+
44
+ def self.get_symbol opt
45
+ opt[:symbol] || 'x'
46
+ end
47
+ end
48
+ end
@@ -43,7 +43,8 @@ module ActionDispatch::Routing
43
43
  # bigbluebutton_routes :default,
44
44
  # :controllers => { :servers => "custom_servers",
45
45
  # :rooms => "custom_rooms",
46
- # :recordings => "custom_recordings" }
46
+ # :recordings => "custom_recordings",
47
+ # :playback_types => "custom_playback_types }
47
48
  #
48
49
  # ==== Room matchers
49
50
  #
@@ -84,13 +85,14 @@ module ActionDispatch::Routing
84
85
  options = params.extract_options!
85
86
  options_scope = options.has_key?(:scope) ? options[:scope] : BigbluebuttonRails.routing_scope
86
87
  options_as = options.has_key?(:as) ? options[:as] : options_scope
87
- options_only = options.has_key?(:only) ? options[:only] : ["servers", "rooms", "recordings"]
88
+ options_only = options.has_key?(:only) ? options[:only] : ["servers", "rooms", "recordings", "playback_types"]
88
89
  BigbluebuttonRails.set_controllers(options[:controllers])
89
90
 
90
91
  scope options_scope, :as => options_as do
91
92
  add_routes_for_servers if options_only.include?("servers")
92
93
  add_routes_for_rooms if options_only.include?("rooms")
93
94
  add_routes_for_recordings if options_only.include?("recordings")
95
+ add_routes_for_playback_types if options_only.include?("playback_types")
94
96
  end
95
97
  end
96
98
 
@@ -109,6 +111,7 @@ module ActionDispatch::Routing
109
111
  post :join
110
112
  post :fetch_recordings
111
113
  get :recordings
114
+ post :generate_dial_number
112
115
  end
113
116
  end
114
117
  end
@@ -137,5 +140,9 @@ module ActionDispatch::Routing
137
140
  end
138
141
  end
139
142
 
143
+ def add_routes_for_playback_types #:nodoc:
144
+ resources :playback_types, :only => [:update],
145
+ :controller => BigbluebuttonRails.controllers[:playback_types]
146
+ end
140
147
  end
141
148
  end
@@ -1,8 +1,15 @@
1
+ require 'browser'
2
+
1
3
  module BigbluebuttonRails
2
4
 
3
- # just a wrapper around the Rails method to convert values to boolean
5
+ # Returns whether the current client should use the mobile client
6
+ # or the desktop client.
7
+ def self.use_mobile_client?(browser)
8
+ browser.mobile? || browser.tablet?
9
+ end
10
+
11
+ # Just a wrapper around the Rails method to convert values to boolean
4
12
  def self.value_to_boolean(value)
5
13
  ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
6
14
  end
7
-
8
15
  end
@@ -1,3 +1,3 @@
1
1
  module BigbluebuttonRails
2
- VERSION = "1.4.0".freeze
2
+ VERSION = "2.0.0".freeze
3
3
  end
@@ -26,14 +26,6 @@ module BigbluebuttonRails
26
26
  end
27
27
  end
28
28
 
29
- def create_schedule
30
- unless options.migration_only?
31
- create_file 'config/schedule.rb'
32
- content = File.read(File.expand_path("../../../../config/schedule.rb", __FILE__))
33
- append_file 'config/schedule.rb', "\n#{content}" unless behavior == :revoke
34
- end
35
- end
36
-
37
29
  protected
38
30
 
39
31
  def migration_path
@@ -16,8 +16,8 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
16
16
  t.string :owner_type
17
17
  t.string :meetingid
18
18
  t.string :name
19
- t.string :attendee_password
20
- t.string :moderator_password
19
+ t.string :attendee_key
20
+ t.string :moderator_key
21
21
  t.string :welcome_msg
22
22
  t.string :logout_url
23
23
  t.string :voice_bridge
@@ -26,13 +26,18 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
26
26
  t.boolean :private, :default => false
27
27
  t.boolean :external, :default => false
28
28
  t.string :param
29
- t.boolean :record, :default => false
29
+ t.boolean :record_meeting, :default => false
30
30
  t.integer :duration, :default => 0
31
+ t.string :attendee_api_password
32
+ t.string :moderator_api_password
33
+ t.decimal :create_time, precision: 14, scale: 0
34
+ t.string :moderator_only_message
35
+ t.boolean :auto_start_recording, default: false
36
+ t.boolean :allow_start_stop_recording, default: true
31
37
  t.timestamps
32
38
  end
33
39
  add_index :bigbluebutton_rooms, :server_id
34
40
  add_index :bigbluebutton_rooms, :meetingid, :unique => true
35
- add_index :bigbluebutton_rooms, :voice_bridge, :unique => true
36
41
 
37
42
  create_table :bigbluebutton_room_options do |t|
38
43
  t.integer :room_id
@@ -40,6 +45,7 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
40
45
  t.boolean :presenter_share_only
41
46
  t.boolean :auto_start_video
42
47
  t.boolean :auto_start_audio
48
+ t.string :background
43
49
  t.timestamps
44
50
  end
45
51
  add_index :bigbluebutton_room_options, :room_id
@@ -56,6 +62,7 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
56
62
  t.datetime :end_time
57
63
  t.boolean :available, :default => true
58
64
  t.string :description
65
+ t.integer :size, limit: 8, default: 0
59
66
  t.timestamps
60
67
  end
61
68
  add_index :bigbluebutton_recordings, :room_id
@@ -71,12 +78,19 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
71
78
 
72
79
  create_table :bigbluebutton_playback_formats do |t|
73
80
  t.integer :recording_id
74
- t.string :format_type
81
+ t.integer :playback_type_id
75
82
  t.string :url
76
83
  t.integer :length
77
84
  t.timestamps
78
85
  end
79
86
 
87
+ create_table :bigbluebutton_playback_types do |t|
88
+ t.string :identifier
89
+ t.boolean :visible, :default => false
90
+ t.boolean :default, :default => false
91
+ t.timestamps
92
+ end
93
+
80
94
  create_table :bigbluebutton_meetings do |t|
81
95
  t.integer :server_id
82
96
  t.integer :room_id
@@ -84,22 +98,30 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
84
98
  t.string :name
85
99
  t.datetime :start_time
86
100
  t.boolean :running, :default => false
87
- t.boolean :record, :default => false
101
+ t.boolean :recorded, :default => false
88
102
  t.integer :creator_id
89
103
  t.string :creator_name
90
104
  t.timestamps
91
105
  end
92
106
  add_index :bigbluebutton_meetings, [:meetingid, :start_time], :unique => true
107
+
108
+ create_table :bigbluebutton_server_configs do |t|
109
+ t.integer :server_id
110
+ t.text :available_layouts
111
+ t.timestamps
112
+ end
93
113
  end
94
114
 
95
115
  def self.down
96
116
  drop_table :bigbluebutton_meetings
97
117
  drop_table :bigbluebutton_playback_formats
118
+ drop_table :bigbluebutton_playback_types
98
119
  drop_table :bigbluebutton_metadata
99
120
  drop_table :bigbluebutton_recordings
100
121
  drop_table :bigbluebutton_rooms
101
122
  drop_table :bigbluebutton_rooms_options
102
123
  drop_table :bigbluebutton_servers
124
+ drop_table :bigbluebutton_server_configs
103
125
  end
104
126
 
105
127
  end
@@ -0,0 +1,56 @@
1
+ class BigbluebuttonRailsTo200 < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table :bigbluebutton_playback_types do |t|
5
+ t.string :identifier
6
+ t.boolean :visible, default: false
7
+ t.boolean :default, default: false
8
+ t.timestamps
9
+ end
10
+
11
+ rename_column :bigbluebutton_rooms, :record, :record_meeting
12
+ rename_column :bigbluebutton_meetings, :record, :recorded
13
+ rename_column :bigbluebutton_rooms, :attendee_password, :attendee_key
14
+ rename_column :bigbluebutton_rooms, :moderator_password, :moderator_key
15
+ add_column :bigbluebutton_rooms, :moderator_api_password, :string
16
+ add_column :bigbluebutton_rooms, :attendee_api_password, :string
17
+ add_column :bigbluebutton_rooms, :create_time, :decimal, precision: 14, scale: 0
18
+ remove_column :bigbluebutton_playback_formats, :format_type
19
+ add_column :bigbluebutton_playback_formats, :playback_type_id, :integer
20
+ remove_index :bigbluebutton_rooms, :voice_bridge
21
+
22
+ create_table :bigbluebutton_server_configs do |t|
23
+ t.integer :server_id
24
+ t.text :available_layouts
25
+ t.timestamps
26
+ end
27
+
28
+ add_column :bigbluebutton_rooms, :moderator_only_message, :string
29
+ add_column :bigbluebutton_rooms, :auto_start_recording, :boolean, default: false
30
+ add_column :bigbluebutton_rooms, :allow_start_stop_recording, :boolean, default: true
31
+
32
+ add_column :bigbluebutton_room_options, :background, :string
33
+
34
+ add_column :bigbluebutton_recordings, :size, :integer, limit: 8, default: 0
35
+ end
36
+
37
+ def self.down
38
+ drop_table :bigbluebutton_playback_types
39
+ rename_column :bigbluebutton_rooms, :record_meeting, :record
40
+ rename_column :bigbluebutton_meetings, :recorded, :record
41
+ rename_column :bigbluebutton_rooms, :attendee_key, :attendee_password
42
+ rename_column :bigbluebutton_rooms, :moderator_key, :moderator_password
43
+ remove_column :bigbluebutton_rooms, :moderator_api_password
44
+ remove_column :bigbluebutton_rooms, :attendee_api_password
45
+ remove_column :bigbluebutton_rooms, :create_time
46
+ add_column :bigbluebutton_playback_formats, :format_type, :string
47
+ remove_column :bigbluebutton_playback_formats, :playback_type_id
48
+ add_index :bigbluebutton_rooms, :voice_bridge, :unique => true
49
+ drop_table :bigbluebutton_server_configs
50
+ remove_column :bigbluebutton_rooms, :moderator_only_message
51
+ remove_column :bigbluebutton_rooms, :auto_start_recording
52
+ remove_column :bigbluebutton_rooms, :allow_start_stop_recording
53
+ remove_column :bigbluebutton_room_options, :background
54
+ remove_column :bigbluebutton_recordings, :size, :integer
55
+ end
56
+ end
@@ -2,21 +2,9 @@ require 'bigbluebutton_exception'
2
2
 
3
3
  namespace :bigbluebutton_rails do
4
4
  namespace :meetings do
5
-
6
5
  desc "Checks all meetings with running==true to see if they have finished"
7
6
  task :finish => :environment do
8
- BigbluebuttonMeeting.where(:running => true).all.each do |meeting|
9
- begin
10
- puts "[rake bigbluebutton_rails:meetings:finish] Getting meeting info for: #{meeting.inspect}"
11
- meeting.room.fetch_meeting_info
12
- rescue BigBlueButton::BigBlueButtonException => e
13
-
14
- # it will fail with an exception if the meeting ended because the meetingID is not found
15
- puts "[rake bigbluebutton_rails:meetings:finish] Setting meeting as not running: #{meeting.inspect}"
16
- meeting.update_attributes(:running => false)
17
- end
18
- end
7
+ BigbluebuttonRails::BackgroundTasks.finish_meetings
19
8
  end
20
-
21
9
  end
22
10
  end
@@ -1,19 +1,8 @@
1
1
  namespace :bigbluebutton_rails do
2
2
  namespace :recordings do
3
-
4
3
  desc "Fetch recordings in all servers"
5
4
  task :update => :environment do
6
- BigbluebuttonServer.all.each do |server|
7
- begin
8
- server.fetch_recordings
9
- puts "[rake bigbluebutton_rails:recordings:update] List of recordings from #{server.url} updated successfully"
10
- rescue Exception => e
11
- puts "[rake bigbluebutton_rails:recordings:update] Failure fetching recordings from #{server.inspect}"
12
- puts e.inspect
13
- puts e.backtrace.join "\n"
14
- end
15
- end
5
+ BigbluebuttonRails::BackgroundTasks.update_recordings
16
6
  end
17
-
18
7
  end
19
8
  end
@@ -0,0 +1,10 @@
1
+ namespace :bigbluebutton_rails do
2
+ namespace :server_configs do
3
+ desc "Fetch server configs for all servers"
4
+ task :update => :environment do
5
+ BigbluebuttonServer.all.each do |s|
6
+ s.update_config
7
+ end
8
+ end
9
+ end
10
+ end
@@ -8,17 +8,4 @@ describe BigbluebuttonRails do
8
8
  it "should have be an engine" do
9
9
  BigbluebuttonRails::Engine.should be < Rails::Engine
10
10
  end
11
-
12
- describe "#value_to_boolean" do
13
- it { BigbluebuttonRails::value_to_boolean("true").should be_true }
14
- it { BigbluebuttonRails::value_to_boolean("1").should be_true }
15
- it { BigbluebuttonRails::value_to_boolean(1).should be_true }
16
- it { BigbluebuttonRails::value_to_boolean(true).should be_true }
17
- it { BigbluebuttonRails::value_to_boolean("t").should be_true }
18
- it { BigbluebuttonRails::value_to_boolean("false").should be_false }
19
- it { BigbluebuttonRails::value_to_boolean("0").should be_false }
20
- it { BigbluebuttonRails::value_to_boolean(0).should be_false }
21
- it { BigbluebuttonRails::value_to_boolean(false).should be_false }
22
- it { BigbluebuttonRails::value_to_boolean("f").should be_false }
23
- end
24
11
  end