bigbluebutton_rails 1.4.0 → 2.0.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 +7 -0
- data/.ruby-version +1 -1
- data/.travis.yml +10 -1
- data/CHANGELOG.md +259 -0
- data/Gemfile +14 -19
- data/Gemfile.lock +194 -188
- data/README.md +416 -0
- data/Rakefile +12 -12
- data/TODO.md +13 -0
- data/app/controllers/bigbluebutton/playback_types_controller.rb +44 -0
- data/app/controllers/bigbluebutton/recordings_controller.rb +17 -10
- data/app/controllers/bigbluebutton/rooms_controller.rb +65 -36
- data/app/controllers/bigbluebutton/servers_controller.rb +12 -8
- data/app/models/bigbluebutton_metadata.rb +1 -1
- data/app/models/bigbluebutton_playback_format.rb +22 -1
- data/app/models/bigbluebutton_playback_type.rb +29 -0
- data/app/models/bigbluebutton_recording.rb +38 -19
- data/app/models/bigbluebutton_room.rb +150 -73
- data/app/models/bigbluebutton_room_options.rb +10 -7
- data/app/models/bigbluebutton_server.rb +69 -13
- data/app/models/bigbluebutton_server_config.rb +49 -0
- data/app/views/bigbluebutton/recordings/_form.html.erb +4 -0
- data/app/views/bigbluebutton/recordings/_recordings.html.erb +10 -3
- data/app/views/bigbluebutton/rooms/_form.html.erb +18 -6
- data/app/views/bigbluebutton/rooms/_rooms.html.erb +6 -3
- data/app/views/bigbluebutton/rooms/invite.html.erb +5 -5
- data/app/views/bigbluebutton/rooms/show.html.erb +18 -6
- data/app/views/bigbluebutton/servers/_form.html.erb +1 -1
- data/app/views/bigbluebutton/servers/show.html.erb +5 -0
- data/app/workers/bigbluebutton_finish_meetings.rb +11 -0
- data/app/workers/bigbluebutton_update_recordings.rb +11 -0
- data/app/workers/bigbluebutton_update_server_configs.rb +18 -0
- data/bigbluebutton_rails.gemspec +8 -7
- data/config/locales/en.yml +52 -7
- data/config/locales/pt-br.yml +162 -0
- data/config/resque/resque.rake +27 -0
- data/config/resque/workers_schedule.yml +17 -0
- data/lib/bigbluebutton_rails.rb +30 -2
- data/lib/bigbluebutton_rails/background_tasks.rb +31 -0
- data/lib/bigbluebutton_rails/controller_methods.rb +12 -8
- data/lib/bigbluebutton_rails/dial_number.rb +48 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +9 -2
- data/lib/bigbluebutton_rails/utils.rb +9 -2
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/generators/bigbluebutton_rails/install_generator.rb +0 -8
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +28 -6
- data/lib/generators/bigbluebutton_rails/templates/migration_2_0_0.rb +56 -0
- data/lib/tasks/bigbluebutton_rails/meetings.rake +1 -13
- data/lib/tasks/bigbluebutton_rails/recordings.rake +1 -12
- data/lib/tasks/bigbluebutton_rails/server_configs.rake +10 -0
- data/spec/bigbluebutton_rails_spec.rb +0 -13
- data/spec/controllers/bigbluebutton/playback_types_controller_spec.rb +76 -0
- data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +109 -37
- data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +1 -0
- data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +27 -3
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +338 -77
- data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +8 -0
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +182 -47
- data/spec/factories/bigbluebutton_meeting.rb +2 -2
- data/spec/factories/bigbluebutton_playback_format.rb +2 -2
- data/spec/factories/bigbluebutton_playback_type.rb +7 -0
- data/spec/factories/bigbluebutton_recording.rb +8 -0
- data/spec/factories/bigbluebutton_room.rb +10 -3
- data/spec/factories/bigbluebutton_server.rb +6 -1
- data/spec/factories/bigbluebutton_server_config.rb +6 -0
- data/spec/generators/install_generator_spec.rb +0 -16
- data/spec/lib/bigbluebutton_rails/background_tasks_spec.rb +61 -0
- data/spec/lib/bigbluebutton_rails/dial_number_spec.rb +78 -0
- data/spec/lib/bigbluebutton_rails/utils_spec.rb +56 -0
- data/spec/lib/tasks/meetings_rake_spec.rb +14 -1
- data/spec/lib/tasks/recordings_rake_spec.rb +14 -1
- data/spec/models/bigbluebutton_meeting_db_spec.rb +3 -3
- data/spec/models/bigbluebutton_meeting_spec.rb +4 -4
- data/spec/models/bigbluebutton_playback_format_db_spec.rb +0 -1
- data/spec/models/bigbluebutton_playback_format_spec.rb +75 -4
- data/spec/models/bigbluebutton_playback_type_db_spec.rb +14 -0
- data/spec/models/bigbluebutton_playback_type_spec.rb +76 -0
- data/spec/models/bigbluebutton_recording_db_spec.rb +3 -1
- data/spec/models/bigbluebutton_recording_spec.rb +234 -58
- data/spec/models/bigbluebutton_room_db_spec.rb +8 -6
- data/spec/models/bigbluebutton_room_options_db_spec.rb +1 -0
- data/spec/models/bigbluebutton_room_options_spec.rb +137 -38
- data/spec/models/bigbluebutton_room_spec.rb +540 -153
- data/spec/models/bigbluebutton_server_config_spec.rb +115 -0
- data/spec/models/bigbluebutton_server_spec.rb +180 -23
- data/spec/rails_app/app/controllers/my_playback_types_controller.rb +7 -0
- data/spec/rails_app/app/views/frontpage/show.html.erb +1 -0
- data/spec/rails_app/app/views/my_playback_types/index.html.erb +33 -0
- data/spec/rails_app/config/application.rb +0 -3
- data/spec/rails_app/config/database.yml.travis +10 -0
- data/spec/rails_app/config/environments/development.rb +1 -6
- data/spec/rails_app/config/environments/production.rb +2 -0
- data/spec/rails_app/config/environments/test.rb +2 -0
- data/spec/rails_app/config/routes.rb +5 -2
- data/spec/rails_app/db/seeds.rb +1 -1
- data/spec/rails_app/features/config.yml.example +3 -4
- data/spec/rails_app/features/join_rooms.feature +14 -14
- data/spec/rails_app/features/step_definitions/activity_monitor_servers_step.rb +2 -2
- data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +4 -4
- data/spec/rails_app/features/step_definitions/destroy_rooms_steps.rb +2 -2
- data/spec/rails_app/features/step_definitions/join_rooms_steps.rb +10 -10
- data/spec/rails_app/features/step_definitions/web_steps.rb +2 -2
- data/spec/rails_app/features/support/configurations.rb +1 -1
- data/spec/rails_app/features/support/templates.rb +12 -12
- data/spec/rails_app/lib/tasks/db/populate.rake +19 -6
- data/spec/routing/bigbluebutton/custom_controllers_routing_spec.rb +1 -1
- data/spec/routing/bigbluebutton/recordings_only_routing_spec.rb +2 -2
- data/spec/routing/bigbluebutton/recordings_routing_spec.rb +2 -2
- data/spec/routing/bigbluebutton/rooms_only_routing_spec.rb +1 -1
- data/spec/routing/bigbluebutton/rooms_routing_spec.rb +15 -1
- data/spec/routing/bigbluebutton/servers_only_routing_spec.rb +1 -1
- data/spec/routing/bigbluebutton/servers_routing_spec.rb +1 -1
- data/spec/spec_helper.rb +23 -31
- data/spec/support/matchers/delegate_matcher.rb +8 -1
- data/spec/support/matchers/shoulda/respond_with_json_matcher.rb +2 -2
- data/spec/support/mocked_server.rb +2 -0
- data/spec/support/shared_contexts/rake.rb +23 -0
- data/spec/workers/bigbluebutton_finish_meetings_spec.rb +14 -0
- data/spec/workers/bigbluebutton_update_recordings_spec.rb +14 -0
- data/spec/workers/bigbluebutton_update_server_configs_spec.rb +47 -0
- metadata +70 -59
- data/CHANGELOG.rdoc +0 -111
- data/README.rdoc +0 -319
- data/TODO.rdoc +0 -16
- data/config/schedule.rb +0 -7
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe BigbluebuttonServerConfig do
|
|
5
|
+
|
|
6
|
+
before { mock_server_and_api }
|
|
7
|
+
|
|
8
|
+
it { should belong_to(:server) }
|
|
9
|
+
it { should validate_presence_of(:server_id) }
|
|
10
|
+
it { should serialize(:available_layouts).as(Array) }
|
|
11
|
+
|
|
12
|
+
describe "serializes #available_layouts as an Array" do
|
|
13
|
+
let(:config) { FactoryGirl.create(:bigbluebutton_server_config) }
|
|
14
|
+
let(:layouts) { ["layout1", "layout2"] }
|
|
15
|
+
|
|
16
|
+
it {
|
|
17
|
+
config.update_attributes(available_layouts: layouts)
|
|
18
|
+
config.available_layouts.should eq(layouts)
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "#update_config" do
|
|
23
|
+
let(:config) { FactoryGirl.create(:bigbluebutton_server_config, server: mocked_server) }
|
|
24
|
+
let(:layouts) { ["layout1", "layout2"] }
|
|
25
|
+
let(:new_layouts) { ["layout3", "layout4"] }
|
|
26
|
+
|
|
27
|
+
before {
|
|
28
|
+
mocked_api.should_receive(:get_default_config_xml).and_return("<config></config>")
|
|
29
|
+
config.update_attributes(available_layouts: layouts)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
context "when there are new layouts in the server" do
|
|
33
|
+
before {
|
|
34
|
+
mocked_api.should_receive(:get_available_layouts).and_return(new_layouts)
|
|
35
|
+
config.update_config
|
|
36
|
+
}
|
|
37
|
+
it { config.available_layouts.should eql new_layouts }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context "when there are no new layouts" do
|
|
41
|
+
before {
|
|
42
|
+
mocked_api.should_receive(:get_available_layouts).once.and_return(nil)
|
|
43
|
+
expect(config).not_to receive(:update_attributes)
|
|
44
|
+
config.update_config
|
|
45
|
+
}
|
|
46
|
+
it { config.available_layouts.should eql layouts }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context "rescues from BigBlueButton::BigBlueButtonException" do
|
|
50
|
+
before {
|
|
51
|
+
mocked_api.stub(:get_available_layouts) { raise BigBlueButton::BigBlueButtonException.new }
|
|
52
|
+
expect(config).not_to receive(:update_attributes)
|
|
53
|
+
}
|
|
54
|
+
it {
|
|
55
|
+
expect { config.update_config }.not_to raise_error
|
|
56
|
+
}
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "#available_layouts_names" do
|
|
61
|
+
let(:layouts) { ["layout1", "bbb.test.layout2", "Wëird Chárs"] }
|
|
62
|
+
let(:expected) { ["layout1", "layout2", "Wëird Chárs"] }
|
|
63
|
+
let(:config) { FactoryGirl.create(:bigbluebutton_server_config, available_layouts: layouts) }
|
|
64
|
+
|
|
65
|
+
before {
|
|
66
|
+
I18n.stub(:t) { |value|
|
|
67
|
+
case value
|
|
68
|
+
when "bigbluebutton_rails.server_configs.layouts.layout1"
|
|
69
|
+
"Layout1 Localized"
|
|
70
|
+
when "bigbluebutton_rails.server_configs.layouts.layout2"
|
|
71
|
+
"Layout2 Localized"
|
|
72
|
+
when "bigbluebutton_rails.server_configs.layouts.weird_chars"
|
|
73
|
+
"Weird Localized"
|
|
74
|
+
else
|
|
75
|
+
nil
|
|
76
|
+
end
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
it {
|
|
81
|
+
config.available_layouts_names.should eql(['Layout1 Localized', 'Layout2 Localized', 'Weird Localized'])
|
|
82
|
+
}
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe "#available_layouts_for_select" do
|
|
86
|
+
let(:layouts) { ["layout1", "bbb.test.layout2", "Wëird Chárs"] }
|
|
87
|
+
let(:expected) { ["layout1", "layout2", "Wëird Chárs"] }
|
|
88
|
+
let(:config) { FactoryGirl.create(:bigbluebutton_server_config, available_layouts: layouts) }
|
|
89
|
+
|
|
90
|
+
before {
|
|
91
|
+
I18n.stub(:t) { |value|
|
|
92
|
+
case value
|
|
93
|
+
when "bigbluebutton_rails.server_configs.layouts.layout1"
|
|
94
|
+
"Layout1 Localized"
|
|
95
|
+
when "bigbluebutton_rails.server_configs.layouts.layout2"
|
|
96
|
+
"Layout2 Localized"
|
|
97
|
+
when "bigbluebutton_rails.server_configs.layouts.weird_chars"
|
|
98
|
+
"Weird Localized"
|
|
99
|
+
else
|
|
100
|
+
nil
|
|
101
|
+
end
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
it {
|
|
106
|
+
config.available_layouts_for_select.should eql(
|
|
107
|
+
[
|
|
108
|
+
['Layout1 Localized', 'layout1'],
|
|
109
|
+
['Layout2 Localized', 'bbb.test.layout2'],
|
|
110
|
+
['Weird Localized', 'Wëird Chárs']
|
|
111
|
+
]
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
end
|
|
115
|
+
end
|
|
@@ -10,10 +10,16 @@ describe BigbluebuttonServer do
|
|
|
10
10
|
|
|
11
11
|
it { should have_many(:recordings).dependent(:nullify) }
|
|
12
12
|
|
|
13
|
+
it { should have_one(:config).dependent(:destroy) }
|
|
14
|
+
it { should delegate(:update_config).to(:config) }
|
|
15
|
+
|
|
16
|
+
it { should delegate(:available_layouts).to(:config) }
|
|
17
|
+
it { should delegate(:available_layouts_names).to(:config) }
|
|
18
|
+
it { should delegate(:available_layouts_for_select).to(:config) }
|
|
19
|
+
|
|
13
20
|
it { should validate_presence_of(:name) }
|
|
14
21
|
it { should validate_presence_of(:url) }
|
|
15
22
|
it { should validate_presence_of(:salt) }
|
|
16
|
-
it { should validate_presence_of(:version) }
|
|
17
23
|
it { should validate_presence_of(:param) }
|
|
18
24
|
|
|
19
25
|
context "uniqueness of" do
|
|
@@ -62,11 +68,14 @@ describe BigbluebuttonServer do
|
|
|
62
68
|
end
|
|
63
69
|
|
|
64
70
|
context "supported versions" do
|
|
65
|
-
it { should allow_value('0.7').for(:version) }
|
|
66
71
|
it { should allow_value('0.8').for(:version) }
|
|
67
|
-
it {
|
|
72
|
+
it { should allow_value('0.81').for(:version) }
|
|
73
|
+
it { should allow_value('0.9').for(:version) }
|
|
74
|
+
it { should allow_value('').for(:version) }
|
|
75
|
+
it { should allow_value(nil).for(:version) }
|
|
68
76
|
it { should_not allow_value('0.64').for(:version) }
|
|
69
77
|
it { should_not allow_value('0.6').for(:version) }
|
|
78
|
+
it { should_not allow_value('0.7').for(:version) }
|
|
70
79
|
end
|
|
71
80
|
|
|
72
81
|
context "param format" do
|
|
@@ -90,7 +99,7 @@ describe BigbluebuttonServer do
|
|
|
90
99
|
|
|
91
100
|
context "sets param as the downcased parameterized name if param is" do
|
|
92
101
|
after :each do
|
|
93
|
-
@server.save.should
|
|
102
|
+
@server.save.should be(true)
|
|
94
103
|
@server.param.should == @server.name.downcase.parameterize
|
|
95
104
|
end
|
|
96
105
|
it "nil" do
|
|
@@ -103,28 +112,45 @@ describe BigbluebuttonServer do
|
|
|
103
112
|
end
|
|
104
113
|
end
|
|
105
114
|
|
|
106
|
-
context "
|
|
107
|
-
let(:server) {
|
|
115
|
+
context "#api" do
|
|
116
|
+
let(:server) { FactoryGirl.build(:bigbluebutton_server) }
|
|
108
117
|
it { should respond_to(:api) }
|
|
109
118
|
it { server.api.should_not be_nil }
|
|
110
|
-
|
|
111
|
-
server.save
|
|
112
|
-
server.api.should_not be_nil
|
|
113
|
-
}
|
|
119
|
+
|
|
114
120
|
context "with the correct attributes" do
|
|
115
|
-
let(:api) {
|
|
116
|
-
server.version, false) }
|
|
121
|
+
let(:api) { BigBlueButton::BigBlueButtonApi.new(server.url, server.salt, server.version, false) }
|
|
117
122
|
it { server.api.should == api }
|
|
118
123
|
|
|
119
124
|
# updating any of these attributes should update the api
|
|
120
125
|
{ :url => 'http://anotherurl.com/bigbluebutton/api',
|
|
121
|
-
:salt => '12345-abcde-67890-fghijk', :version => '0.
|
|
126
|
+
:salt => '12345-abcde-67890-fghijk', :version => '0.9' }.each do |k,v|
|
|
122
127
|
it {
|
|
123
128
|
server.send("#{k}=", v)
|
|
124
129
|
server.api.send(k).should == v
|
|
125
130
|
}
|
|
126
131
|
end
|
|
127
132
|
end
|
|
133
|
+
|
|
134
|
+
context "returns the cached API object, if any" do
|
|
135
|
+
it {
|
|
136
|
+
BigBlueButton::BigBlueButtonApi.should_receive(:new).once.and_return("fake api")
|
|
137
|
+
server.api
|
|
138
|
+
server.api
|
|
139
|
+
}
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
context "automatically fetches the API version if the version if not set" do
|
|
143
|
+
before(:each) {
|
|
144
|
+
server.update_attributes(version: nil)
|
|
145
|
+
BigBlueButton::BigBlueButtonApi.any_instance.stub(:get_api_version).and_return("0.9")
|
|
146
|
+
}
|
|
147
|
+
it { server.api.version.should eql("0.9") }
|
|
148
|
+
it {
|
|
149
|
+
server.api
|
|
150
|
+
server.version.should eql("0.9")
|
|
151
|
+
server.reload.version.should be_nil # doesn't save it
|
|
152
|
+
}
|
|
153
|
+
end
|
|
128
154
|
end
|
|
129
155
|
|
|
130
156
|
context "initializes" do
|
|
@@ -163,11 +189,11 @@ describe BigbluebuttonServer do
|
|
|
163
189
|
@api_mock.should_receive(:get_meetings).and_return(hash)
|
|
164
190
|
server.fetch_meetings
|
|
165
191
|
|
|
166
|
-
# the
|
|
167
|
-
room1.
|
|
168
|
-
room1.
|
|
169
|
-
room2.
|
|
170
|
-
room2.
|
|
192
|
+
# the keys are updated during fetch_meetings
|
|
193
|
+
room1.moderator_api_password = "mp"
|
|
194
|
+
room1.attendee_api_password = "ap"
|
|
195
|
+
room2.moderator_api_password = "pass"
|
|
196
|
+
room2.attendee_api_password = "pass"
|
|
171
197
|
}
|
|
172
198
|
|
|
173
199
|
it { server.meetings.count.should be(3) }
|
|
@@ -176,12 +202,12 @@ describe BigbluebuttonServer do
|
|
|
176
202
|
it { server.meetings[2].meetingid.should == "im not in the db" }
|
|
177
203
|
it { server.meetings[2].name.should == "im not in the db" }
|
|
178
204
|
it { server.meetings[2].server.should == server }
|
|
179
|
-
it { server.meetings[2].
|
|
180
|
-
it { server.meetings[2].
|
|
205
|
+
it { server.meetings[2].attendee_api_password.should == "pass" }
|
|
206
|
+
it { server.meetings[2].moderator_api_password.should == "pass" }
|
|
181
207
|
it { server.meetings[2].running.should == true }
|
|
182
|
-
it { server.meetings[2].new_record?.should
|
|
183
|
-
it { server.meetings[2].external.should
|
|
184
|
-
it { server.meetings[2].private.should
|
|
208
|
+
it { server.meetings[2].new_record?.should be_truthy }
|
|
209
|
+
it { server.meetings[2].external.should be_truthy }
|
|
210
|
+
it { server.meetings[2].private.should be_truthy }
|
|
185
211
|
|
|
186
212
|
it "updates the meeting associated with this room"
|
|
187
213
|
end
|
|
@@ -268,4 +294,135 @@ describe BigbluebuttonServer do
|
|
|
268
294
|
end
|
|
269
295
|
end
|
|
270
296
|
|
|
297
|
+
describe "#config" do
|
|
298
|
+
it "is created when the server is created" do
|
|
299
|
+
server = FactoryGirl.create(:bigbluebutton_server)
|
|
300
|
+
server.config.should_not be_nil
|
|
301
|
+
server.config.should be_an_instance_of(BigbluebuttonServerConfig)
|
|
302
|
+
server.config.server.should eql(server)
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
context "if it was not created, is built when accessed" do
|
|
306
|
+
before(:each) {
|
|
307
|
+
@server = FactoryGirl.create(:bigbluebutton_server)
|
|
308
|
+
@server.config.destroy
|
|
309
|
+
@server.reload
|
|
310
|
+
@server.config # access it so the new obj is created
|
|
311
|
+
}
|
|
312
|
+
it { @server.config.should_not be_nil }
|
|
313
|
+
it("is not promptly saved") {
|
|
314
|
+
@server.config.new_record?.should be(true)
|
|
315
|
+
}
|
|
316
|
+
it("is saved when the server is saved") {
|
|
317
|
+
@server.save!
|
|
318
|
+
@server.reload
|
|
319
|
+
@server.config.new_record?.should be(false)
|
|
320
|
+
}
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
describe "triggers #update_config" do
|
|
325
|
+
|
|
326
|
+
context "on after create" do
|
|
327
|
+
it {
|
|
328
|
+
BigbluebuttonServerConfig.any_instance.should_receive(:update_config).once
|
|
329
|
+
FactoryGirl.create(:bigbluebutton_server)
|
|
330
|
+
}
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
context "on after save" do
|
|
334
|
+
let(:server) { FactoryGirl.create(:bigbluebutton_server, version: "0.8") }
|
|
335
|
+
before { server.stub(:set_api_version_from_server) }
|
|
336
|
+
|
|
337
|
+
context "if #url changed" do
|
|
338
|
+
before { server.should_receive(:update_config).once }
|
|
339
|
+
it { server.update_attributes(url: server.url + "-2") }
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
context "if #salt changed" do
|
|
343
|
+
before { server.should_receive(:update_config).once }
|
|
344
|
+
it { server.update_attributes(salt: server.salt + "-2") }
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
context "if #version changed" do
|
|
348
|
+
before { server.should_receive(:update_config).once }
|
|
349
|
+
it { server.update_attributes(version: "0.9") }
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
context "not if any other attribute changed" do
|
|
353
|
+
before { server.should_not_receive(:update_config) }
|
|
354
|
+
it { server.update_attributes(name: server.name + "-2") }
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
describe "triggers #set_api_version_from_server" do
|
|
360
|
+
|
|
361
|
+
context "on after save" do
|
|
362
|
+
let(:server) { FactoryGirl.create(:bigbluebutton_server, version: "0.8") }
|
|
363
|
+
|
|
364
|
+
context "when the model is created" do
|
|
365
|
+
it {
|
|
366
|
+
s = FactoryGirl.build(:bigbluebutton_server, version: nil)
|
|
367
|
+
s.should_receive(:set_api_version_from_server).once
|
|
368
|
+
s.save
|
|
369
|
+
}
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
context "if #url changed" do
|
|
373
|
+
before { server.should_receive(:set_api_version_from_server).once }
|
|
374
|
+
it { server.update_attributes(url: server.url + "-2") }
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
context "if #salt changed" do
|
|
378
|
+
before { server.should_receive(:set_api_version_from_server).once }
|
|
379
|
+
it { server.update_attributes(salt: server.salt + "-2") }
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
context "if #version changed" do
|
|
383
|
+
before { server.should_receive(:set_api_version_from_server).once }
|
|
384
|
+
it { server.update_attributes(version: "0.9") }
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
context "not if #name changed" do
|
|
388
|
+
before { server.should_not_receive(:set_api_version_from_server) }
|
|
389
|
+
it { server.update_attributes(name: server.name + "-2") }
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
# Specific test for when we have a version set in the server, set it to a blank value,
|
|
393
|
+
# and it ends up getting the same old version from the server.
|
|
394
|
+
# Depending on how the hooks to update the version are set up, this won't work.
|
|
395
|
+
context "checking the real value of #version" do
|
|
396
|
+
let(:version_from_api) { "0.9" }
|
|
397
|
+
let(:old_version) { "0.9" }
|
|
398
|
+
let(:server) { FactoryGirl.create(:bigbluebutton_server, version: version_from_api) }
|
|
399
|
+
|
|
400
|
+
context "if #version was set to empty" do
|
|
401
|
+
before {
|
|
402
|
+
api_mock = double(BigBlueButton::BigBlueButtonApi)
|
|
403
|
+
api_mock.stub(:version).and_return(version_from_api)
|
|
404
|
+
api_mock.stub(:get_default_config_xml)
|
|
405
|
+
api_mock.stub(:get_available_layouts)
|
|
406
|
+
BigBlueButton::BigBlueButtonApi.stub(:new).and_return(api_mock)
|
|
407
|
+
}
|
|
408
|
+
it {
|
|
409
|
+
server.update_attributes(version: "")
|
|
410
|
+
server.reload.version.should eql(version_from_api)
|
|
411
|
+
}
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
context "doesn't raise an exception if the server is offline" do
|
|
415
|
+
before {
|
|
416
|
+
BigBlueButton::BigBlueButtonApi.stub(:new) { raise BigBlueButton::BigBlueButtonException.new('test exception') }
|
|
417
|
+
}
|
|
418
|
+
it {
|
|
419
|
+
server.update_attributes(url: "http://insert-any-invalid-url.mconf.org/bigbluebutton/api")
|
|
420
|
+
server.reload.version.should be_nil
|
|
421
|
+
}
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
end
|
|
425
|
+
end
|
|
426
|
+
end
|
|
427
|
+
|
|
271
428
|
end
|
|
@@ -3,3 +3,4 @@
|
|
|
3
3
|
<%= link_to('View server list', bigbluebutton_servers_path) %> (<%= @servers.count %> servers)<br/>
|
|
4
4
|
<%= link_to('View room list', bigbluebutton_rooms_path) %> (<%= @rooms.count %> rooms)<br/>
|
|
5
5
|
<%= link_to('View recording list', bigbluebutton_recordings_path) %> (<%= @recordings.count %> recordings)<br/>
|
|
6
|
+
<%= link_to('Show or hide playback types', my_playback_types_path) %>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<h1>Listing Playback Types:</h1>
|
|
2
|
+
|
|
3
|
+
<div id="bbbrails_servers_links">
|
|
4
|
+
<%= link_to('View server list', bigbluebutton_servers_path) %><br/>
|
|
5
|
+
<%= link_to('View room list', bigbluebutton_rooms_path) %><br/>
|
|
6
|
+
<%= link_to('View recording list', bigbluebutton_recordings_path) %>
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
</br></br>
|
|
10
|
+
The list of playback types will be automatically filled with the playback types available in your web conference server.
|
|
11
|
+
You can use this views to make them visible or invisible, a feature useful to dynamically hide playback types you don't
|
|
12
|
+
want the users to have access in your application.
|
|
13
|
+
</br></br>
|
|
14
|
+
|
|
15
|
+
<ul id="bbbrails_list">
|
|
16
|
+
<% @playback_types.each do |playback_type| %>
|
|
17
|
+
<li>
|
|
18
|
+
<%= form_for(playback_type) do |f| %>
|
|
19
|
+
<div><label><%= BigbluebuttonPlaybackType.human_attribute_name(:id) %></label> <%= playback_type.id %></div>
|
|
20
|
+
<div><label><%= BigbluebuttonPlaybackType.human_attribute_name(:identifier) %></label> <%= playback_type.identifier %></div>
|
|
21
|
+
<div><label><%= BigbluebuttonPlaybackType.human_attribute_name(:visible) %></label>
|
|
22
|
+
<%= f.check_box :visible %>
|
|
23
|
+
</div>
|
|
24
|
+
<div><label><%= BigbluebuttonPlaybackType.human_attribute_name(:default) %></label>
|
|
25
|
+
<%= f.check_box :default %>
|
|
26
|
+
</div>
|
|
27
|
+
<div><label>Access</label>
|
|
28
|
+
<%= f.submit %>
|
|
29
|
+
</div>
|
|
30
|
+
<% end %>
|
|
31
|
+
</li>
|
|
32
|
+
<% end %>
|
|
33
|
+
</ul>
|
|
@@ -54,8 +54,5 @@ module RailsApp
|
|
|
54
54
|
|
|
55
55
|
# Version of your assets, change this if you want to expire all your assets
|
|
56
56
|
config.assets.version = '1.0'
|
|
57
|
-
|
|
58
|
-
# Disabled rails 3.2 attr_accessible in favor of strong_parameters
|
|
59
|
-
config.active_record.whitelist_attributes = false
|
|
60
57
|
end
|
|
61
58
|
end
|