bigbluebutton_rails 2.2.0 → 2.3.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/CHANGELOG.md +34 -0
- data/Dockerfile +23 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +14 -5
- data/README.md +42 -59
- data/Rakefile +6 -3
- data/app/controllers/bigbluebutton/api/rooms_controller.rb +117 -0
- data/app/controllers/bigbluebutton/playback_types_controller.rb +0 -3
- data/app/controllers/bigbluebutton/recordings_controller.rb +37 -23
- data/app/controllers/bigbluebutton/rooms_controller.rb +6 -31
- data/app/controllers/bigbluebutton/servers_controller.rb +0 -14
- data/app/helpers/bigbluebutton_rails_helper.rb +4 -0
- data/app/models/bigbluebutton_attendee.rb +21 -0
- data/app/models/bigbluebutton_meeting.rb +5 -0
- data/app/models/bigbluebutton_playback_format.rb +3 -2
- data/app/models/bigbluebutton_recording.rb +164 -68
- data/app/models/bigbluebutton_room.rb +148 -59
- data/app/models/bigbluebutton_server.rb +1 -1
- data/app/views/bigbluebutton/api/error.rabl +10 -0
- data/app/views/bigbluebutton/api/rooms/index.rabl +45 -0
- data/app/views/bigbluebutton/api/rooms/join.rabl +6 -0
- data/app/views/bigbluebutton/api/rooms/running.rabl +10 -0
- data/app/views/bigbluebutton/recordings/play.html.erb +1 -0
- data/app/views/bigbluebutton/servers/_activity_list.html.erb +5 -5
- data/app/workers/{bigbluebutton_finish_meetings.rb → bigbluebutton_finish_meetings_worker.rb} +2 -2
- data/app/workers/{bigbluebutton_meeting_updater.rb → bigbluebutton_meeting_updater_worker.rb} +3 -3
- data/app/workers/bigbluebutton_recordings_for_room_worker.rb +27 -0
- data/app/workers/{bigbluebutton_update_recordings.rb → bigbluebutton_update_recordings_worker.rb} +2 -2
- data/app/workers/{bigbluebutton_update_server_configs.rb → bigbluebutton_update_server_configs_worker.rb} +3 -3
- data/bigbluebutton_rails.gemspec +1 -0
- data/config/locales/en.yml +21 -0
- data/config/locales/pt-br.yml +1 -0
- data/config/resque/resque.rake +7 -1
- data/config/resque/workers_schedule.yml +3 -3
- data/docker-compose.yml +68 -0
- data/dumb-init_1.2.0 +0 -0
- data/lib/bigbluebutton_rails.rb +1 -2
- data/lib/bigbluebutton_rails/api_controller_methods.rb +138 -0
- data/lib/bigbluebutton_rails/configuration.rb +33 -4
- data/lib/bigbluebutton_rails/controller_methods.rb +0 -31
- data/lib/bigbluebutton_rails/exceptions.rb +17 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +14 -0
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +17 -3
- data/lib/generators/bigbluebutton_rails/templates/migration_2_2_0.rb +1 -1
- data/lib/generators/bigbluebutton_rails/templates/migration_2_2_0_b.rb +106 -0
- data/lib/generators/bigbluebutton_rails/templates/migration_2_3_0.rb +22 -0
- data/lib/tasks/bigbluebutton_rails/meetings.rake +1 -1
- data/spec/controllers/bigbluebutton/api/rooms_controller_spec.rb +498 -0
- data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +84 -0
- data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +2 -2
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +24 -22
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +9 -0
- data/spec/factories/bigbluebutton_attendee.rb +7 -0
- data/spec/factories/bigbluebutton_meeting.rb +0 -1
- data/spec/factories/bigbluebutton_playback_type.rb +1 -0
- data/spec/factories/bigbluebutton_recording.rb +2 -4
- data/spec/helpers/bigbluebutton_rails_helper_spec.rb +10 -2
- data/spec/lib/bigbluebutton_rails/background_tasks_spec.rb +1 -0
- data/spec/lib/tasks/meetings_rake_spec.rb +1 -1
- data/spec/models/bigbluebutton_attendee_spec.rb +44 -0
- data/spec/models/bigbluebutton_meeting_db_spec.rb +0 -1
- data/spec/models/bigbluebutton_meeting_spec.rb +1 -0
- data/spec/models/bigbluebutton_playback_format_spec.rb +2 -0
- data/spec/models/bigbluebutton_playback_type_db_spec.rb +1 -0
- data/spec/models/bigbluebutton_recording_db_spec.rb +2 -2
- data/spec/models/bigbluebutton_recording_spec.rb +404 -72
- data/spec/models/bigbluebutton_room_spec.rb +435 -148
- data/spec/rails_app/config/database.yml.example +10 -11
- data/spec/rails_app/config/initializers/resque.rb +33 -0
- data/spec/rails_app/config/routes.rb +2 -0
- data/spec/rails_app/lib/tasks/db/populate.rake +73 -55
- data/spec/support/mocked_server.rb +1 -1
- data/spec/workers/{bigbluebutton_finish_meetings_spec.rb → bigbluebutton_finish_meetings_worker_spec.rb} +3 -3
- data/spec/workers/{bigbluebutton_meeting_updater_spec.rb → bigbluebutton_meeting_updater_worker_spec.rb} +8 -7
- data/spec/workers/bigbluebutton_recordings_for_room_worker_spec.rb +49 -0
- data/spec/workers/{bigbluebutton_update_recordings_spec.rb → bigbluebutton_update_recordings_worker_spec.rb} +3 -3
- data/spec/workers/{bigbluebutton_update_server_configs_spec.rb → bigbluebutton_update_server_configs_worker_spec.rb} +4 -4
- metadata +42 -14
- data/lib/classes/bigbluebutton_attendee.rb +0 -21
- data/spec/classes/bigbluebutton_attendee_spec.rb +0 -76
- data/spec/controllers/bigbluebutton/recordings_controller_json_responses_spec.rb +0 -111
- data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +0 -203
- data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +0 -162
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<iframe src="<%= @playback_url %>" style="width:100%;height:100%;border:0;margin:0;padding:0;"></iframe>
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
<span class="not_running">Not running</span>
|
|
21
21
|
<% end %>
|
|
22
22
|
</div>
|
|
23
|
-
<% unless room.
|
|
24
|
-
Started at: <%= room.
|
|
23
|
+
<% unless room.create_time.nil? %>
|
|
24
|
+
Started at: <%= Time.at(room.create_time).strftime("%F, %R UTC%z") %><br/>
|
|
25
25
|
<% end %>
|
|
26
26
|
<% unless room.end_time.nil? %>
|
|
27
27
|
Ended at: <%= room.end_time.strftime("%F, %R UTC%z") %> (forcibly ended: <%= room.has_been_forcibly_ended %>)
|
|
28
28
|
<% end %>
|
|
29
|
-
<% unless room.
|
|
29
|
+
<% unless room.current_attendees.count == 0 %>
|
|
30
30
|
Participants (<%= room.participant_count %> total, <%= room.moderator_count %> moderators):
|
|
31
31
|
<div class="bbbrails_meeting_attendees">
|
|
32
32
|
<div class="header">
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
<div class="field">ID</div>
|
|
35
35
|
<div class="field">Name</div>
|
|
36
36
|
</div>
|
|
37
|
-
<% room.
|
|
37
|
+
<% room.current_attendees.each do |attendee| %>
|
|
38
38
|
<div class="row">
|
|
39
39
|
<div class="field"><%= attendee.role %></div>
|
|
40
40
|
<div class="field"><%= attendee.user_id %></div>
|
|
41
|
-
<div class="field"><%= attendee.
|
|
41
|
+
<div class="field"><%= attendee.user_name %></div>
|
|
42
42
|
</div>
|
|
43
43
|
<% end %>
|
|
44
44
|
</div>
|
data/app/workers/{bigbluebutton_finish_meetings.rb → bigbluebutton_finish_meetings_worker.rb}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# A resque worker to check for meetings that already finished and mark
|
|
2
2
|
# them as finished.
|
|
3
3
|
# Same as "rake bigbluebutton_rails:meetings:finish".
|
|
4
|
-
class
|
|
4
|
+
class BigbluebuttonFinishMeetingsWorker
|
|
5
5
|
@queue = :bigbluebutton_rails
|
|
6
6
|
|
|
7
7
|
def self.perform
|
|
8
|
-
Rails.logger.info "
|
|
8
|
+
Rails.logger.info "BigbluebuttonFinishMeetingsWorker worker running"
|
|
9
9
|
BigbluebuttonRails::BackgroundTasks.finish_meetings
|
|
10
10
|
end
|
|
11
11
|
end
|
data/app/workers/{bigbluebutton_meeting_updater.rb → bigbluebutton_meeting_updater_worker.rb}
RENAMED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# A resque worker to get information about a meeting with `getMeetingInfo` and update
|
|
2
2
|
# the associated `BigbluebuttonMeeting` object. This should be called to speed up the
|
|
3
3
|
# update of a meeting object (usually on creates and ends).
|
|
4
|
-
class
|
|
4
|
+
class BigbluebuttonMeetingUpdaterWorker
|
|
5
5
|
@queue = :bigbluebutton_rails
|
|
6
6
|
|
|
7
7
|
def self.perform(room_id, wait=nil)
|
|
8
|
-
Rails.logger.info "
|
|
8
|
+
Rails.logger.info "BigbluebuttonMeetingUpdaterWorker worker: waiting #{wait} for room #{room_id}"
|
|
9
9
|
sleep(wait) unless wait.nil?
|
|
10
10
|
|
|
11
11
|
room = BigbluebuttonRoom.find(room_id)
|
|
12
12
|
if room.nil?
|
|
13
|
-
Rails.logger.info "
|
|
13
|
+
Rails.logger.info "BigbluebuttonMeetingUpdaterWorker worker: room #{room_id} not found!"
|
|
14
14
|
else
|
|
15
15
|
# `fetch_meeting_info` will automatically update the meeting by
|
|
16
16
|
# calling `room.update_current_meeting_record`
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# TODO: This worker exists only because we don't have yet a way to figure out
|
|
2
|
+
# precisely when a recording is done processing. Ideally the web conference
|
|
3
|
+
# server would send us a request notifying that the recording is ready.
|
|
4
|
+
# For now, this worker is used to get all recordings of a room after a meeting
|
|
5
|
+
# is ended in the room. It keeps trying a few times even if a recording was
|
|
6
|
+
# already found, which is important in case there are multiple playback formats
|
|
7
|
+
# that are processed individually (e.g. the first time the recording is found it
|
|
8
|
+
# might have only one of the formats done).
|
|
9
|
+
|
|
10
|
+
# A resque worker to get the recordings of a room.
|
|
11
|
+
class BigbluebuttonRecordingsForRoomWorker
|
|
12
|
+
@queue = :bigbluebutton_rails
|
|
13
|
+
|
|
14
|
+
def self.perform(room_id, tries_left=0)
|
|
15
|
+
Rails.logger.info "BigbluebuttonRecordingsForRoomWorker worker running"
|
|
16
|
+
|
|
17
|
+
room = BigbluebuttonRoom.find(room_id)
|
|
18
|
+
if room.present?
|
|
19
|
+
Rails.logger.info "BigbluebuttonRecordingsForRoomWorker getting recordings for #{room.inspect}"
|
|
20
|
+
room.fetch_recordings
|
|
21
|
+
|
|
22
|
+
if tries_left > 0
|
|
23
|
+
Resque.enqueue_in(5.minutes, ::BigbluebuttonRecordingsForRoomWorker, room_id, tries_left - 1)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/app/workers/{bigbluebutton_update_recordings.rb → bigbluebutton_update_recordings_worker.rb}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# A resque worker to get the list of recordings from the server and update
|
|
2
2
|
# the database.
|
|
3
3
|
# Same as "rake bigbluebutton_rails:recordings:update".
|
|
4
|
-
class
|
|
4
|
+
class BigbluebuttonUpdateRecordingsWorker
|
|
5
5
|
@queue = :bigbluebutton_rails
|
|
6
6
|
|
|
7
7
|
def self.perform(server_id=nil)
|
|
8
|
-
Rails.logger.info "
|
|
8
|
+
Rails.logger.info "BigbluebuttonUpdateRecordingsWorker worker running"
|
|
9
9
|
BigbluebuttonRails::BackgroundTasks.update_recordings(server_id)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# A resque worker to get the server configs from time to time (information such
|
|
2
2
|
# as available layouts are updated).
|
|
3
|
-
class
|
|
3
|
+
class BigbluebuttonUpdateServerConfigsWorker
|
|
4
4
|
@queue = :bigbluebutton_rails
|
|
5
5
|
|
|
6
6
|
def self.perform
|
|
7
|
-
Rails.logger.info "
|
|
7
|
+
Rails.logger.info "BigbluebuttonUpdateServerConfigsWorker worker running"
|
|
8
8
|
BigbluebuttonServer.find_each do |server|
|
|
9
|
-
Rails.logger.info "
|
|
9
|
+
Rails.logger.info "BigbluebuttonUpdateServerConfigsWorker updating configs for #{server.inspect}"
|
|
10
10
|
|
|
11
11
|
# update configs
|
|
12
12
|
server.update_config
|
data/bigbluebutton_rails.gemspec
CHANGED
data/config/locales/en.yml
CHANGED
|
@@ -68,6 +68,26 @@ en:
|
|
|
68
68
|
bigbluebutton_server: "Web Conference Server"
|
|
69
69
|
bigbluebutton_server_config: "Web Conference Server Configurations"
|
|
70
70
|
bigbluebutton_rails:
|
|
71
|
+
api:
|
|
72
|
+
errors:
|
|
73
|
+
forbidden:
|
|
74
|
+
msg: "You are not authorized to make this API call"
|
|
75
|
+
title: "Forbidden"
|
|
76
|
+
invalid_pagination:
|
|
77
|
+
msg: "One or more pagination parameters are wrong"
|
|
78
|
+
title: "Invalid pagination parameters"
|
|
79
|
+
invalid_key:
|
|
80
|
+
msg: "The key informed is not valid for this room"
|
|
81
|
+
title: "Invalid key"
|
|
82
|
+
missing_params:
|
|
83
|
+
msg: "You did not inform one or more required parameters"
|
|
84
|
+
title: "Missing parameters"
|
|
85
|
+
room_not_found:
|
|
86
|
+
msg: "Could not find the target room"
|
|
87
|
+
title: "Resource not found"
|
|
88
|
+
room_not_running:
|
|
89
|
+
msg: "There's no meeting currently running in this room"
|
|
90
|
+
title: "Meeting not running"
|
|
71
91
|
bigbluebutton: BigBlueButton
|
|
72
92
|
metadata:
|
|
73
93
|
errors:
|
|
@@ -89,6 +109,7 @@ en:
|
|
|
89
109
|
default:
|
|
90
110
|
description: "Meeting held on %{time} (UTC)"
|
|
91
111
|
errors:
|
|
112
|
+
destroyed: "This recording no longer exist."
|
|
92
113
|
check_for_server:
|
|
93
114
|
no_server: "There's no server associated with this recording."
|
|
94
115
|
play:
|
data/config/locales/pt-br.yml
CHANGED
data/config/resque/resque.rake
CHANGED
|
@@ -10,7 +10,13 @@ namespace :resque do
|
|
|
10
10
|
require 'resque-scheduler'
|
|
11
11
|
|
|
12
12
|
# you probably already have this somewhere
|
|
13
|
-
|
|
13
|
+
attrs = {
|
|
14
|
+
host: ENV['REDIS_HOST'] || 'localhost'
|
|
15
|
+
port: ENV['REDIS_PORT'] || 6379
|
|
16
|
+
db: ENV['REDIS_DB'] || 0
|
|
17
|
+
password: ENV['REDIS_PASSWORD'] || nil
|
|
18
|
+
}
|
|
19
|
+
Resque.redis = Redis.new(attrs)
|
|
14
20
|
|
|
15
21
|
# If you want to be able to dynamically change the schedule,
|
|
16
22
|
# uncomment this line. A dynamic schedule can be updated via the
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
finish_meetings:
|
|
2
2
|
every:
|
|
3
3
|
- "5m"
|
|
4
|
-
class:
|
|
4
|
+
class: BigbluebuttonFinishMeetingsWorker
|
|
5
5
|
description: "Checks for meetings that finished and mark as finished. Same as 'rake bigbluebutton_rails:meetings:finish'."
|
|
6
6
|
|
|
7
7
|
update_recordings:
|
|
8
8
|
every:
|
|
9
9
|
- "30m"
|
|
10
|
-
class:
|
|
10
|
+
class: BigbluebuttonUpdateRecordingsWorker
|
|
11
11
|
description: "Gets the recordings in the server to populate the db. Same as 'rake bigbluebutton_rails:recordings:update'."
|
|
12
12
|
|
|
13
13
|
update_server_configs:
|
|
14
14
|
every:
|
|
15
15
|
- "1h"
|
|
16
|
-
class:
|
|
16
|
+
class: BigbluebuttonUpdateServerConfigsWorker
|
|
17
17
|
description: "Updates the server configs that are stored locally. Same as 'rake bigbluebutton_rails:server_configs:update'."
|
data/docker-compose.yml
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
version: '2'
|
|
2
|
+
services:
|
|
3
|
+
|
|
4
|
+
# development
|
|
5
|
+
dev:
|
|
6
|
+
build: .
|
|
7
|
+
tty: true
|
|
8
|
+
ports:
|
|
9
|
+
- "3000:3000"
|
|
10
|
+
depends_on:
|
|
11
|
+
- dev_db
|
|
12
|
+
- dev_redis
|
|
13
|
+
environment:
|
|
14
|
+
- REDIS_HOST=dev_redis
|
|
15
|
+
- REDIS_PASSWORD=BCsy8zMwZay66cim
|
|
16
|
+
- DATABASE_HOST=dev_db
|
|
17
|
+
- RAILS_ENV=development
|
|
18
|
+
volumes:
|
|
19
|
+
- $PWD:/usr/src/app
|
|
20
|
+
command: bash -c "cd spec/rails_app && rake db:create db:migrate && rails s -p3000"
|
|
21
|
+
dev_db:
|
|
22
|
+
image: mysql:5.6
|
|
23
|
+
expose:
|
|
24
|
+
- "3306"
|
|
25
|
+
volumes:
|
|
26
|
+
- ~/.docker-volumes/bigbluebutton_rails/dev/mysql/:/var/lib/mysql
|
|
27
|
+
environment:
|
|
28
|
+
- MYSQL_ROOT_PASSWORD=bbbrails
|
|
29
|
+
- MYSQL_DATABASE=bigbluebutton_rails_dev
|
|
30
|
+
- MYSQL_USER=bbbrails
|
|
31
|
+
- MYSQL_PASSWORD=bbbrails
|
|
32
|
+
dev_redis:
|
|
33
|
+
image: redis:3.2
|
|
34
|
+
expose:
|
|
35
|
+
- "6379"
|
|
36
|
+
command: redis-server --requirepass "BCsy8zMwZay66cim"
|
|
37
|
+
|
|
38
|
+
# test
|
|
39
|
+
test:
|
|
40
|
+
build: .
|
|
41
|
+
tty: true
|
|
42
|
+
depends_on:
|
|
43
|
+
- test_db
|
|
44
|
+
- test_redis
|
|
45
|
+
environment:
|
|
46
|
+
- REDIS_HOST=test_redis
|
|
47
|
+
- REDIS_PASSWORD=db62b65a8d19a213
|
|
48
|
+
- DATABASE_HOST=test_db
|
|
49
|
+
- RAILS_ENV=test
|
|
50
|
+
volumes:
|
|
51
|
+
- $PWD:/usr/src/app
|
|
52
|
+
command: rake rails_app:install rails_app:db spec
|
|
53
|
+
test_db:
|
|
54
|
+
image: mysql:5.6
|
|
55
|
+
expose:
|
|
56
|
+
- "3306"
|
|
57
|
+
volumes:
|
|
58
|
+
- ~/.docker-volumes/bigbluebutton_rails/test/mysql/:/var/lib/mysql
|
|
59
|
+
environment:
|
|
60
|
+
- MYSQL_ROOT_PASSWORD=bbbrails
|
|
61
|
+
- MYSQL_DATABASE=bigbluebutton_rails_test
|
|
62
|
+
- MYSQL_USER=bbbrails
|
|
63
|
+
- MYSQL_PASSWORD=bbbrails
|
|
64
|
+
test_redis:
|
|
65
|
+
image: redis:3.2
|
|
66
|
+
expose:
|
|
67
|
+
- "6379"
|
|
68
|
+
command: redis-server --requirepass "db62b65a8d19a213"
|
data/dumb-init_1.2.0
ADDED
|
Binary file
|
data/lib/bigbluebutton_rails.rb
CHANGED
|
@@ -3,13 +3,12 @@ require 'browser'
|
|
|
3
3
|
require 'resque'
|
|
4
4
|
require 'resque-scheduler'
|
|
5
5
|
|
|
6
|
-
require 'classes/bigbluebutton_attendee'
|
|
7
|
-
|
|
8
6
|
require 'bigbluebutton_rails/rails'
|
|
9
7
|
require 'bigbluebutton_rails/configuration'
|
|
10
8
|
require 'bigbluebutton_rails/utils'
|
|
11
9
|
require 'bigbluebutton_rails/controller_methods'
|
|
12
10
|
require 'bigbluebutton_rails/internal_controller_methods'
|
|
11
|
+
require 'bigbluebutton_rails/api_controller_methods'
|
|
13
12
|
require 'bigbluebutton_rails/background_tasks'
|
|
14
13
|
require 'bigbluebutton_rails/rails/routes'
|
|
15
14
|
require 'bigbluebutton_rails/exceptions'
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
module BigbluebuttonRails
|
|
2
|
+
module APIControllerMethods
|
|
3
|
+
|
|
4
|
+
def self.included(base)
|
|
5
|
+
base.class_eval do
|
|
6
|
+
|
|
7
|
+
def map_sort(param, default, allowed=[])
|
|
8
|
+
return default if param.blank? || param.empty?
|
|
9
|
+
|
|
10
|
+
param.split(',').inject('') do |memo, obj|
|
|
11
|
+
if obj[0] == '-'
|
|
12
|
+
attr = obj.gsub(/^-/, '')
|
|
13
|
+
order = 'DESC'
|
|
14
|
+
else
|
|
15
|
+
attr = obj
|
|
16
|
+
order = 'ASC'
|
|
17
|
+
end
|
|
18
|
+
if allowed.blank? || allowed.include?(attr)
|
|
19
|
+
memo = "#{memo}," unless memo.blank?
|
|
20
|
+
memo = "#{memo} #{attr} #{order}"
|
|
21
|
+
else
|
|
22
|
+
memo
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def validate_pagination
|
|
28
|
+
param = params[:page]
|
|
29
|
+
if param
|
|
30
|
+
if param[:size]
|
|
31
|
+
size = Integer(param[:size]) rescue nil
|
|
32
|
+
return error_invalid_pagination if size.nil? || size < 1
|
|
33
|
+
end
|
|
34
|
+
if param[:number]
|
|
35
|
+
page = Integer(param[:number]) rescue nil
|
|
36
|
+
return error_invalid_pagination if page.nil? || page < 1
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def map_pagination(param, default)
|
|
42
|
+
limit = default
|
|
43
|
+
if param && param[:size]
|
|
44
|
+
limit = Integer(param[:size]) rescue nil
|
|
45
|
+
end
|
|
46
|
+
limit = default if !limit || limit < 1
|
|
47
|
+
|
|
48
|
+
offset = 0
|
|
49
|
+
page = 1
|
|
50
|
+
if param && param[:number]
|
|
51
|
+
page = Integer(param[:number]) rescue nil
|
|
52
|
+
page ||= 1
|
|
53
|
+
offset = (page-1)*limit
|
|
54
|
+
offset = 0 if offset < 0
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
[limit, offset, page]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def map_pagination_links(current)
|
|
61
|
+
original = request.original_url
|
|
62
|
+
|
|
63
|
+
uri = URI.parse(original)
|
|
64
|
+
query = Rack::Utils.parse_query(uri.query)
|
|
65
|
+
uri.query = Rack::Utils.build_query(query) # just to encode the params
|
|
66
|
+
|
|
67
|
+
links = { self: uri.to_s }
|
|
68
|
+
|
|
69
|
+
if current - 1 > 0
|
|
70
|
+
query["page[number]"] = current - 1
|
|
71
|
+
uri.query = Rack::Utils.build_query(query)
|
|
72
|
+
links.merge!({ prev: uri.to_s })
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
query["page[number]"] = current + 1
|
|
76
|
+
uri.query = Rack::Utils.build_query(query)
|
|
77
|
+
links.merge!({ next: uri.to_s })
|
|
78
|
+
|
|
79
|
+
query["page[number]"] = 1
|
|
80
|
+
uri.query = Rack::Utils.build_query(query)
|
|
81
|
+
links.merge!({ first: uri.to_s })
|
|
82
|
+
|
|
83
|
+
links
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def map_search(param)
|
|
87
|
+
if param && param[:terms]
|
|
88
|
+
param[:terms].split(',').map(&:strip)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def error_room_not_found
|
|
93
|
+
msg = t('bigbluebutton_rails.api.errors.room_not_found.msg')
|
|
94
|
+
title = t('bigbluebutton_rails.api.errors.room_not_found.title')
|
|
95
|
+
@errors = [BigbluebuttonRails::APIError.new(msg, 404, title)]
|
|
96
|
+
render 'bigbluebutton/api/error'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def error_room_not_running
|
|
100
|
+
msg = t('bigbluebutton_rails.api.errors.room_not_running.msg')
|
|
101
|
+
title = t('bigbluebutton_rails.api.errors.room_not_running.title')
|
|
102
|
+
@errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
|
|
103
|
+
render 'bigbluebutton/api/error'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def error_missing_params
|
|
107
|
+
msg = t('bigbluebutton_rails.api.errors.missing_params.msg')
|
|
108
|
+
title = t('bigbluebutton_rails.api.errors.missing_params.title')
|
|
109
|
+
@errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
|
|
110
|
+
render 'bigbluebutton/api/error'
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def error_forbidden
|
|
114
|
+
msg = t('bigbluebutton_rails.api.errors.forbidden.msg')
|
|
115
|
+
title = t('bigbluebutton_rails.api.errors.forbidden.title')
|
|
116
|
+
@errors = [BigbluebuttonRails::APIError.new(msg, 403, title)]
|
|
117
|
+
render 'bigbluebutton/api/error'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def error_invalid_key
|
|
121
|
+
msg = t('bigbluebutton_rails.api.errors.invalid_key.msg')
|
|
122
|
+
title = t('bigbluebutton_rails.api.errors.invalid_key.title')
|
|
123
|
+
@errors = [BigbluebuttonRails::APIError.new(msg, 403, title)]
|
|
124
|
+
render 'bigbluebutton/api/error'
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def error_invalid_pagination
|
|
128
|
+
msg = t('bigbluebutton_rails.api.errors.invalid_pagination.msg')
|
|
129
|
+
title = t('bigbluebutton_rails.api.errors.invalid_pagination.title')
|
|
130
|
+
@errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
|
|
131
|
+
render 'bigbluebutton/api/error'
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
end
|