bigbluebutton_rails 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/Gemfile.lock +5 -5
- data/app/controllers/bigbluebutton/rooms_controller.rb +0 -5
- data/app/controllers/bigbluebutton/servers_controller.rb +1 -1
- data/app/models/bigbluebutton_meeting.rb +2 -2
- data/app/models/bigbluebutton_recording.rb +16 -12
- data/app/models/bigbluebutton_room.rb +109 -42
- data/app/models/bigbluebutton_server.rb +10 -9
- data/app/views/bigbluebutton/servers/_form.html.erb +2 -2
- data/app/views/bigbluebutton/servers/index.html.erb +1 -1
- data/app/views/bigbluebutton/servers/show.html.erb +2 -2
- data/app/workers/bigbluebutton_meeting_updater.rb +7 -14
- data/bigbluebutton_rails.gemspec +1 -1
- data/config/locales/en.yml +1 -1
- data/config/locales/pt-br.yml +1 -1
- data/lib/bigbluebutton_rails.rb +17 -10
- data/lib/bigbluebutton_rails/background_tasks.rb +9 -5
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +6 -2
- data/lib/generators/bigbluebutton_rails/templates/migration_2_1_0.rb +21 -0
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +1 -13
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +2 -2
- data/spec/factories/bigbluebutton_meeting.rb +2 -0
- data/spec/factories/bigbluebutton_metadata.rb +1 -1
- data/spec/factories/bigbluebutton_room.rb +1 -0
- data/spec/factories/bigbluebutton_server.rb +1 -1
- data/spec/lib/bigbluebutton_rails/background_tasks_spec.rb +106 -15
- data/spec/models/bigbluebutton_meeting_db_spec.rb +9 -4
- data/spec/models/bigbluebutton_meeting_spec.rb +2 -2
- data/spec/models/bigbluebutton_recording_spec.rb +19 -4
- data/spec/models/bigbluebutton_room_options_spec.rb +1 -1
- data/spec/models/bigbluebutton_room_spec.rb +396 -97
- data/spec/models/bigbluebutton_server_db_spec.rb +1 -1
- data/spec/models/bigbluebutton_server_spec.rb +38 -16
- data/spec/rails_app/db/seeds.rb +0 -1
- data/spec/rails_app/features/config.yml.example +2 -4
- data/spec/rails_app/features/step_definitions/activity_monitor_servers_step.rb +2 -4
- data/spec/rails_app/features/step_definitions/common_steps.rb +1 -2
- data/spec/rails_app/features/step_definitions/create_servers_steps.rb +2 -2
- data/spec/rails_app/features/step_definitions/destroy_servers_steps.rb +1 -2
- data/spec/rails_app/features/support/factories/bigbluebutton_server_integration.rb +1 -1
- data/spec/rails_app/features/support/templates.rb +5 -5
- data/spec/rails_app/lib/tasks/db/populate.rake +1 -1
- data/spec/workers/bigbluebutton_meeting_updater_spec.rb +86 -5
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7aa314ce4ce2cd5647e00de7c1507a570cd2943
|
4
|
+
data.tar.gz: e79e43b6313f3f001d77c2e86fdaf1af2e196e26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cc93453645452f995ce330a496cf00c3e60841709cf0345e62d0a365caf8c692f057f4226dc579ff493330d46cc4e2f8585b3b6a2867b88c2762c82cc34e29c
|
7
|
+
data.tar.gz: 923713967e60d3f4120590061fc266a4d296a605ecbdb94d4188a4856b83b83b8a1277407fda41f00396532bb51792264186ba8caef697dcfd45765b9acb2893
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
|
4
|
+
## [2.1.0] - 2016-07-22
|
5
|
+
|
6
|
+
* [#98] Improved how meeting records are created and ended. Now they are more reliable and
|
7
|
+
will work even if the resque workers are not running.
|
8
|
+
* [#132] Fixed recordings being set as unavailable when making requests to a subset of the
|
9
|
+
recordings (when using filters in `getRecordings`).
|
10
|
+
* [#133] Added option for applications to pass custom metadata when a meeting is being
|
11
|
+
created without having to create these metadata in the database.
|
12
|
+
* Renamed the attributes `BigbluebuttonServer#salt` to `BigbluebuttonServer#secret`.
|
13
|
+
|
14
|
+
|
15
|
+
------------------------------------
|
16
|
+
|
17
|
+
All tickets below use references to IDs in our old issue tracking system.
|
18
|
+
To find them, search for their description or ID in the new issue tracker.
|
19
|
+
|
20
|
+
------------------------------------
|
21
|
+
|
22
|
+
|
3
23
|
## [2.0.0] - 2016-04-07
|
4
24
|
|
5
25
|
To learn how to migrate to 2.0.0 see:
|
@@ -246,6 +266,7 @@ https://github.com/mconf/bigbluebutton_rails/wiki/Migrate-to-1.3.0
|
|
246
266
|
* Controller to access servers and rooms
|
247
267
|
* rooms_controller interacts with a BBB server using bigbluebutton-api-ruby
|
248
268
|
|
269
|
+
[2.1.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.0.0...v2.1.0
|
249
270
|
[2.0.0]: https://github.com/mconf/bigbluebutton_rails/compare/v1.4.0...v2.0.0
|
250
271
|
[1.4.0]: https://github.com/mconf/bigbluebutton_rails/compare/v1.3.0...v1.4.0
|
251
272
|
[1.3.0]: https://github.com/mconf/bigbluebutton_rails/compare/v1.2.0...v1.3.0
|
data/Gemfile.lock
CHANGED
@@ -7,8 +7,8 @@ GIT
|
|
7
7
|
PATH
|
8
8
|
remote: .
|
9
9
|
specs:
|
10
|
-
bigbluebutton_rails (2.
|
11
|
-
bigbluebutton-api-ruby (~> 1.
|
10
|
+
bigbluebutton_rails (2.1.0)
|
11
|
+
bigbluebutton-api-ruby (~> 1.6)
|
12
12
|
browser (~> 0.8.0)
|
13
13
|
rails (>= 4.0.0)
|
14
14
|
resque (~> 1.25.1)
|
@@ -46,8 +46,8 @@ GEM
|
|
46
46
|
addressable (2.3.6)
|
47
47
|
arel (5.0.1.20140414130214)
|
48
48
|
awesome_print (1.2.0)
|
49
|
-
bigbluebutton-api-ruby (1.
|
50
|
-
xml-simple (
|
49
|
+
bigbluebutton-api-ruby (1.6.0)
|
50
|
+
xml-simple (~> 1.1)
|
51
51
|
browser (0.8.0)
|
52
52
|
builder (3.2.2)
|
53
53
|
capybara (2.2.1)
|
@@ -139,7 +139,7 @@ GEM
|
|
139
139
|
mono_logger (1.1.0)
|
140
140
|
multi_json (1.10.1)
|
141
141
|
multi_test (0.1.1)
|
142
|
-
mysql2 (0.3.
|
142
|
+
mysql2 (0.3.18)
|
143
143
|
net-http-digest_auth (1.4)
|
144
144
|
net-http-persistent (2.9.4)
|
145
145
|
nokogiri (1.6.2.1)
|
@@ -367,11 +367,6 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
367
367
|
url.gsub!(/^[^:]*:\/\//i, "bigbluebutton://")
|
368
368
|
end
|
369
369
|
|
370
|
-
# enqueue an update in the meetings for later on
|
371
|
-
# note: this is the only update that is not in the model, but has to be here
|
372
|
-
# because the model doesn't know when a user joined a room
|
373
|
-
Resque.enqueue(::BigbluebuttonMeetingUpdater, @room.id, 15.seconds)
|
374
|
-
|
375
370
|
redirect_to url
|
376
371
|
else
|
377
372
|
flash[:error] = t('bigbluebutton_rails.rooms.errors.join.not_running')
|
@@ -13,8 +13,8 @@ class BigbluebuttonMeeting < ActiveRecord::Base
|
|
13
13
|
|
14
14
|
validates :meetingid, :presence => true, :length => { :minimum => 1, :maximum => 100 }
|
15
15
|
|
16
|
-
validates :
|
17
|
-
validates :
|
16
|
+
validates :create_time, :presence => true
|
17
|
+
validates :create_time, :uniqueness => { :scope => :room_id }
|
18
18
|
|
19
19
|
# Whether the meeting was created by the `user` or not.
|
20
20
|
def created_by?(user)
|
@@ -41,7 +41,7 @@ class BigbluebuttonRecording < ActiveRecord::Base
|
|
41
41
|
# were fetched.
|
42
42
|
#
|
43
43
|
# TODO: catch exceptions on creating/updating recordings
|
44
|
-
def self.sync(server, recordings)
|
44
|
+
def self.sync(server, recordings, full_sync=false)
|
45
45
|
recordings.each do |rec|
|
46
46
|
rec_obj = BigbluebuttonRecording.find_by_recordid(rec[:recordID])
|
47
47
|
rec_data = adapt_recording_hash(rec)
|
@@ -58,17 +58,21 @@ class BigbluebuttonRecording < ActiveRecord::Base
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
# set as unavailable the recordings that are not in 'recordings'
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
61
|
+
# set as unavailable the recordings that are not in 'recordings', but
|
62
|
+
# only in a full synchronization process, which means that the recordings
|
63
|
+
# in `recordings` are *all* available in `server`, not a subset.
|
64
|
+
if full_sync
|
65
|
+
recordIDs = recordings.map{ |rec| rec[:recordID] }
|
66
|
+
if recordIDs.length <= 0 # empty response
|
67
|
+
BigbluebuttonRecording.
|
68
|
+
where(available: true, server: server).
|
69
|
+
update_all(available: false)
|
70
|
+
else
|
71
|
+
BigbluebuttonRecording.
|
72
|
+
where(available: true, server: server).
|
73
|
+
where.not(recordid: recordIDs).
|
74
|
+
update_all(available: false)
|
75
|
+
end
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
@@ -107,23 +107,38 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
107
107
|
def fetch_meeting_info
|
108
108
|
require_server :get_meeting_info
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
110
|
+
begin
|
111
|
+
response = self.server.api.get_meeting_info(self.meetingid, self.moderator_api_password)
|
112
|
+
|
113
|
+
@participant_count = response[:participantCount]
|
114
|
+
@moderator_count = response[:moderatorCount]
|
115
|
+
@running = response[:running]
|
116
|
+
@has_been_forcibly_ended = response[:hasBeenForciblyEnded]
|
117
|
+
@start_time = response[:startTime]
|
118
|
+
@end_time = response[:endTime]
|
119
|
+
@attendees = []
|
120
|
+
if response[:attendees].present?
|
121
|
+
response[:attendees].each do |att|
|
122
|
+
attendee = BigbluebuttonAttendee.new
|
123
|
+
attendee.from_hash(att)
|
124
|
+
@attendees << attendee
|
125
|
+
end
|
126
|
+
end
|
124
127
|
|
125
|
-
|
126
|
-
|
128
|
+
# a 'shortcut' to update meetings since we have all information we need
|
129
|
+
# if we got here, it means the meeting is still in the server, so it's not ended
|
130
|
+
self.update_attributes(create_time: response[:createTime]) unless self.new_record?
|
131
|
+
self.update_current_meeting_record(response[:metadata], true)
|
132
|
+
|
133
|
+
rescue BigBlueButton::BigBlueButtonException => e
|
134
|
+
# note: we could catch only the 'notFound' error, but there are complications, so
|
135
|
+
# it's better to end the meeting prematurely and open it again if needed than to
|
136
|
+
# not end it at all (e.g. in case the server stops responding)
|
137
|
+
Rails.logger.info "BigbluebuttonRoom: detected that a meeting ended in the room #{self.meetingid} after the error #{e.inspect}"
|
138
|
+
|
139
|
+
self.update_attributes(create_time: nil) unless self.new_record?
|
140
|
+
self.finish_meetings
|
141
|
+
end
|
127
142
|
|
128
143
|
response
|
129
144
|
end
|
@@ -143,8 +158,8 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
143
158
|
require_server :end
|
144
159
|
response = self.server.api.end_meeting(self.meetingid, self.moderator_api_password)
|
145
160
|
|
146
|
-
# enqueue an update in the
|
147
|
-
Resque.enqueue(::BigbluebuttonMeetingUpdater, self.id
|
161
|
+
# enqueue an update in the meeting to end it faster
|
162
|
+
Resque.enqueue(::BigbluebuttonMeetingUpdater, self.id)
|
148
163
|
|
149
164
|
response
|
150
165
|
end
|
@@ -178,7 +193,17 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
178
193
|
self.moderator_api_password = response[:moderatorPW]
|
179
194
|
self.create_time = response[:createTime]
|
180
195
|
self.voice_bridge = response[:voiceBridge] if response.has_key?(:voiceBridge)
|
181
|
-
|
196
|
+
|
197
|
+
unless self.new_record?
|
198
|
+
self.save
|
199
|
+
|
200
|
+
# creates the meeting object since the create was successful
|
201
|
+
create_meeting_record(response[:metadata])
|
202
|
+
|
203
|
+
# enqueue an update in the meeting with a small delay we assume to be
|
204
|
+
# enough for the user to fully join the meeting
|
205
|
+
Resque.enqueue(::BigbluebuttonMeetingUpdater, self.id, 10.seconds)
|
206
|
+
end
|
182
207
|
end
|
183
208
|
|
184
209
|
response
|
@@ -290,23 +315,24 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
290
315
|
|
291
316
|
# Returns the current meeting running on this room, if any.
|
292
317
|
def get_current_meeting
|
293
|
-
unless self.
|
294
|
-
BigbluebuttonMeeting.
|
318
|
+
unless self.create_time.nil?
|
319
|
+
BigbluebuttonMeeting.find_by(room_id: self.id, create_time: self.create_time)
|
295
320
|
else
|
296
321
|
nil
|
297
322
|
end
|
298
323
|
end
|
299
324
|
|
300
325
|
# Updates the current meeting associated with this room
|
301
|
-
def
|
302
|
-
unless self.
|
326
|
+
def update_current_meeting_record(metadata=nil, force_not_ended=false)
|
327
|
+
unless self.create_time.nil?
|
303
328
|
attrs = {
|
304
|
-
:
|
305
|
-
:
|
306
|
-
:name => self.name,
|
307
|
-
:recorded => self.record_meeting,
|
308
|
-
:running => self.running
|
329
|
+
:running => self.running,
|
330
|
+
:start_time => self.start_time.try(:utc)
|
309
331
|
}
|
332
|
+
# note: it's important to update the 'ended' attr so the meeting is
|
333
|
+
# reopened in case it was mistakenly considered as ended
|
334
|
+
attrs[:ended] = false if force_not_ended
|
335
|
+
|
310
336
|
unless metadata.nil?
|
311
337
|
begin
|
312
338
|
attrs[:creator_id] = metadata[BigbluebuttonRails.metadata_user_id].to_i
|
@@ -318,25 +344,60 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
318
344
|
end
|
319
345
|
|
320
346
|
meeting = self.get_current_meeting
|
321
|
-
if
|
322
|
-
|
347
|
+
meeting.update_attributes(attrs) if meeting.present?
|
348
|
+
end
|
349
|
+
end
|
323
350
|
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
351
|
+
def create_meeting_record(metadata=nil)
|
352
|
+
unless get_current_meeting.present?
|
353
|
+
if self.create_time.present?
|
354
|
+
|
355
|
+
# to make sure there's no other meeting related to this room that
|
356
|
+
# has not yet been set as ended
|
357
|
+
self.finish_meetings
|
358
|
+
|
359
|
+
attrs = {
|
360
|
+
room: self,
|
361
|
+
server: self.server,
|
362
|
+
server_url: self.server.url,
|
363
|
+
server_secret: self.server.secret,
|
364
|
+
meetingid: self.meetingid,
|
365
|
+
name: self.name,
|
366
|
+
recorded: self.record_meeting,
|
367
|
+
create_time: self.create_time,
|
368
|
+
running: self.running,
|
369
|
+
ended: false,
|
370
|
+
start_time: self.start_time.try(:utc)
|
371
|
+
}
|
372
|
+
unless metadata.nil?
|
373
|
+
begin
|
374
|
+
attrs[:creator_id] = metadata[BigbluebuttonRails.metadata_user_id].to_i
|
375
|
+
attrs[:creator_name] = metadata[BigbluebuttonRails.metadata_user_name]
|
376
|
+
rescue
|
377
|
+
attrs[:creator_id] = nil
|
378
|
+
attrs[:creator_name] = nil
|
379
|
+
end
|
380
|
+
end
|
381
|
+
BigbluebuttonMeeting.create(attrs)
|
328
382
|
|
383
|
+
Rails.logger.error "Did not create a current meeting because there was no create_time on room #{self.meetingid}"
|
384
|
+
else
|
385
|
+
Rails.logger.error "Did not create a current meeting because there was no create_time on room #{self.meetingid}"
|
329
386
|
end
|
330
|
-
else
|
331
|
-
# TODO: not enough information to find the meeting, do what?
|
332
387
|
end
|
333
388
|
end
|
334
389
|
|
335
390
|
# Sets all meetings related to this room as not running
|
336
391
|
def finish_meetings
|
337
|
-
BigbluebuttonMeeting.where(
|
392
|
+
BigbluebuttonMeeting.where(ended: false)
|
393
|
+
.where(room_id: self.id)
|
394
|
+
.update_all(running: false, ended: true)
|
395
|
+
|
396
|
+
# in case there are inconsistent meetings marked as running
|
397
|
+
# but that already ended
|
398
|
+
BigbluebuttonMeeting.where(running: true, ended: true)
|
338
399
|
.where(room_id: self.id)
|
339
|
-
.update_all(running: false)
|
400
|
+
.update_all(running: false, ended: true)
|
340
401
|
end
|
341
402
|
|
342
403
|
# Gets a 'configToken' to use when joining the room.
|
@@ -503,9 +564,6 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
503
564
|
self.server.api.request_headers = @request_headers # we need the client's IP
|
504
565
|
response = self.server.api.create_meeting(self.name, self.meetingid, opts)
|
505
566
|
|
506
|
-
# enqueue an update in the meetings to start now
|
507
|
-
Resque.enqueue(::BigbluebuttonMeetingUpdater, self.id)
|
508
|
-
|
509
567
|
response
|
510
568
|
end
|
511
569
|
|
@@ -540,9 +598,18 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
540
598
|
end
|
541
599
|
|
542
600
|
def get_metadata_for_create
|
543
|
-
self.metadata.inject({}) { |result, meta|
|
601
|
+
metadata = self.metadata.inject({}) { |result, meta|
|
544
602
|
result["meta_#{meta.name}"] = meta.content; result
|
545
603
|
}
|
604
|
+
|
605
|
+
dynamic_metadata = self.try(BigbluebuttonRails.dynamic_metadata_method)
|
606
|
+
unless dynamic_metadata.blank?
|
607
|
+
metadata = self.dynamic_metadata.inject(metadata) { |result, meta|
|
608
|
+
result["meta_#{meta[0]}"] = meta[1]; result
|
609
|
+
}
|
610
|
+
end
|
611
|
+
|
612
|
+
metadata
|
546
613
|
end
|
547
614
|
|
548
615
|
private
|
@@ -42,7 +42,7 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
42
42
|
:format => { :with => /\A[a-zA-Z\d_]+[a-zA-Z\d_-]*[a-zA-Z\d_]+\z/,
|
43
43
|
:message => I18n.t('bigbluebutton_rails.servers.errors.param_format') }
|
44
44
|
|
45
|
-
validates :
|
45
|
+
validates :secret,
|
46
46
|
:presence => true,
|
47
47
|
:length => { :minimum => 1, :maximum => 500 }
|
48
48
|
|
@@ -75,7 +75,7 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
75
75
|
|
76
76
|
version = self.version
|
77
77
|
version = set_api_version_from_server if version.blank?
|
78
|
-
@api = BigBlueButton::BigBlueButtonApi.new(self.url, self.
|
78
|
+
@api = BigBlueButton::BigBlueButtonApi.new(self.url, self.secret, version.to_s, false)
|
79
79
|
end
|
80
80
|
|
81
81
|
# Fetches the meetings currently created in the server (running or not).
|
@@ -101,7 +101,7 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
101
101
|
:moderator_api_password => attr[:moderatorPW])
|
102
102
|
end
|
103
103
|
room.running = attr[:running]
|
104
|
-
room.
|
104
|
+
room.update_current_meeting_record
|
105
105
|
|
106
106
|
@meetings << room
|
107
107
|
end
|
@@ -141,11 +141,12 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
141
141
|
# metadata values.
|
142
142
|
#
|
143
143
|
# Triggers API call: <tt>getRecordings</tt>.
|
144
|
-
def fetch_recordings(filter=
|
144
|
+
def fetch_recordings(filter=nil, full_sync=false)
|
145
|
+
filter ||= {}
|
145
146
|
logger.info "Fetching recordings for the server #{self.inspect} with filter: #{filter.inspect}"
|
146
147
|
recordings = self.api.get_recordings(filter)
|
147
148
|
if recordings and recordings[:recordings]
|
148
|
-
BigbluebuttonRecording.sync(self, recordings[:recordings])
|
149
|
+
BigbluebuttonRecording.sync(self, recordings[:recordings], full_sync)
|
149
150
|
end
|
150
151
|
end
|
151
152
|
|
@@ -156,7 +157,7 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
156
157
|
def set_api_version_from_server
|
157
158
|
begin
|
158
159
|
# creating the object with version=nil makes the gem fetch the version from the server
|
159
|
-
api = BigBlueButton::BigBlueButtonApi.new(self.url, self.
|
160
|
+
api = BigBlueButton::BigBlueButtonApi.new(self.url, self.secret, nil, false)
|
160
161
|
self.version = api.version
|
161
162
|
rescue BigBlueButton::BigBlueButtonException
|
162
163
|
# we just ignore errors in case the server is not responding
|
@@ -187,16 +188,16 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
187
188
|
|
188
189
|
# Checks if we have to update the server version or not and do it if needed.
|
189
190
|
# If the user only changes the version, we assume he's trying to force an API version.
|
190
|
-
# If the user changes url/
|
191
|
+
# If the user changes url/secret and the version, we also assume that he wants
|
191
192
|
# to force the API version
|
192
193
|
def check_for_version_update
|
193
|
-
if [:url, :
|
194
|
+
if [:url, :secret, :version].any? { |k| self.changes.key?(k) }
|
194
195
|
self.set_api_version_from_server
|
195
196
|
end
|
196
197
|
end
|
197
198
|
|
198
199
|
def check_for_config_update
|
199
|
-
if [:url, :
|
200
|
+
if [:url, :secret, :version].any?{ |k| self.changes.key?(k) }
|
200
201
|
self.update_config
|
201
202
|
end
|
202
203
|
end
|