FIX: bypass all site setting work for shadowed method

This commit is contained in:
Sam
2017-10-27 11:12:44 +11:00
parent 530624d438
commit 70aed105a6
2 changed files with 36 additions and 1 deletions

View File

@@ -65,6 +65,9 @@ module SiteSettingExtension
def setting(name_arg, default = nil, opts = {})
name = name_arg.to_sym
shadowed_val = nil
mutex.synchronize do
defaults.load_setting(
name,
@@ -82,6 +85,7 @@ module SiteSettingExtension
val = GlobalSetting.send(name)
unless val.nil? || (val == ''.freeze)
shadowed_val = val
hidden_settings << name
shadowed_settings << name
end
@@ -104,7 +108,11 @@ module SiteSettingExtension
opts.extract!(*SiteSettings::TypeSupervisor::CONSUMED_OPTS)
)
setup_methods(name)
if !shadowed_val.nil?
setup_shadowed_methods(name, shadowed_val)
else
setup_methods(name)
end
end
end
@@ -291,6 +299,24 @@ module SiteSettingExtension
[changes, deletions]
end
def setup_shadowed_methods(name, value)
clean_name = name.to_s.sub("?", "").to_sym
define_singleton_method clean_name do
value
end
define_singleton_method "#{clean_name}?" do
value
end
define_singleton_method "#{clean_name}=" do |val|
Rails.logger.warn("An attempt was to change #{clean_name} SiteSetting to #{val} however it is shadowed so this will be ignored!")
nil
end
end
def setup_methods(name)
clean_name = name.to_s.sub("?", "").to_sym