diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb index b5ef271ba5d..ea7eb40ad6d 100644 --- a/app/models/site_setting.rb +++ b/app/models/site_setting.rb @@ -176,45 +176,45 @@ class SiteSetting < ActiveRecord::Base }.each { |client_setting| client_settings << client_setting } def self.site_logo_url - self.logo&.url || self.logo_url + self.logo&.url || self.logo_url(warn: false) end def self.site_logo_small_url - self.logo_small&.url || self.logo_small_url + self.logo_small&.url || self.logo_small_url(warn: false) end def self.site_digest_logo_url - self.digest_logo&.url || self.digest_logo_url + self.digest_logo&.url || self.digest_logo_url(warn: false) end def self.site_mobile_logo_url - self.mobile_logo&.url || self.mobile_logo_url + self.mobile_logo&.url || self.mobile_logo_url(warn: false) end def self.site_large_icon_url - self.large_icon&.url || self.large_icon_url + self.large_icon&.url || self.large_icon_url(warn: false) end def self.site_favicon_url - self.favicon&.url || self.favicon_url + self.favicon&.url || self.favicon_url(warn: false) end def self.site_apple_touch_icon_url - self.apple_touch_icon&.url || self.apple_touch_icon_url + self.apple_touch_icon&.url || self.apple_touch_icon_url(warn: false) end def self.opengraph_image_url - self.opengraph_image&.url || self.default_opengraph_image_url + self.opengraph_image&.url || self.default_opengraph_image_url(warn: false) end def self.site_twitter_summary_large_image_url self.twitter_summary_large_image&.url || - self.twitter_summary_large_image_url + self.twitter_summary_large_image_url(warn: false) end def self.site_push_notifications_icon_url SiteSetting.push_notifications_icon&.url || - SiteSetting.push_notifications_icon_url + SiteSetting.push_notifications_icon_url(warn: false) end def self.shared_drafts_enabled? diff --git a/lib/site_settings/deprecated_settings.rb b/lib/site_settings/deprecated_settings.rb index b85e59012cb..13fd118bffa 100644 --- a/lib/site_settings/deprecated_settings.rb +++ b/lib/site_settings/deprecated_settings.rb @@ -2,22 +2,53 @@ module SiteSettings; end module SiteSettings::DeprecatedSettings DEPRECATED_SETTINGS = [ + %w{logo_url logo 2.4}, + %w{logo_small_url logo_small 2.4}, + %w{digest_logo_url digest_logo 2.4}, + %w{mobile_logo_url mobile_logo 2.4}, + %w{large_icon_url large_icon 2.4}, + %w{favicon_url favicon 2.4}, + %w{apple_touch_icon_url apple_touch_icon 2.4}, + %w{default_opengraph_image_url opengraph_image 2.4}, + %w{twitter_summary_large_image_url twitter_summary_large_image 2.4}, + %w{push_notifications_icon_url push_notifications_icon 2.4} ] def setup_deprecated_methods DEPRECATED_SETTINGS.each do |old_setting, new_setting, version| - define_singleton_method old_setting do - logger.warn("`SiteSetting.#{old_setting}` has been deprecated and will be removed in the #{version} Release. Please use `SiteSetting.#{new_setting}` instead") + define_singleton_method old_setting do |warn: true| + if warn + logger.warn( + "`SiteSetting.#{old_setting}` has been deprecated and will be " + + "removed in the #{version} Release. Please use " + + "`SiteSetting.#{new_setting}` instead" + ) + end + self.public_send new_setting end - define_singleton_method "#{old_setting}?" do - logger.warn("`SiteSetting.#{old_setting}?` has been deprecated and will be removed in the #{version} Release. Please use `SiteSetting.#{new_setting}?` instead") + define_singleton_method "#{old_setting}?" do |warn: true| + if warn + logger.warn( + "`SiteSetting.#{old_setting}?` has been deprecated and will be " + + "removed in the #{version} Release. Please use " + + "`SiteSetting.#{new_setting}?` instead" + ) + end + self.public_send "#{new_setting}?" end - define_singleton_method "#{old_setting}=" do |val| - logger.warn("`SiteSetting.#{old_setting}=` has been deprecated and will be removed in the #{version} Release. Please use `SiteSetting.#{new_setting}=` instead") + define_singleton_method "#{old_setting}=" do |val, warn: true| + if warn + logger.warn( + "`SiteSetting.#{old_setting}=` has been deprecated and will be " + + "removed in the #{version} Release. Please use " + + "`SiteSetting.#{new_setting}=` instead" + ) + end + self.public_send "#{new_setting}=", val end end diff --git a/spec/models/site_setting_spec.rb b/spec/models/site_setting_spec.rb index f209d1abed9..d8b134118ef 100644 --- a/spec/models/site_setting_spec.rb +++ b/spec/models/site_setting_spec.rb @@ -153,6 +153,12 @@ describe SiteSetting do context 'deprecated site settings' do before do SiteSetting.force_https = true + @orig_logger = Rails.logger + Rails.logger = @fake_logger = FakeLogger.new + end + + after do + Rails.logger = @orig_logger end it 'should act as a proxy to the new methods' do @@ -163,8 +169,14 @@ describe SiteSetting do SiteSetting.setup_deprecated_methods - expect(SiteSetting.use_https).to eq(true) - expect(SiteSetting.use_https?).to eq(true) + expect do + expect(SiteSetting.use_https).to eq(true) + expect(SiteSetting.use_https?).to eq(true) + end.to change { @fake_logger.warnings.count }.by(2) + + expect do + expect(SiteSetting.use_https(warn: false)) + end.to_not change { @fake_logger.warnings } SiteSetting.use_https = false