|
|
|
@ -97,13 +97,13 @@ class Setting < ActiveRecord::Base |
|
|
|
|
|
|
|
|
|
# Returns the value of the setting named name |
|
|
|
|
def self.[](name) |
|
|
|
|
Marshal.load(Rails.cache.fetch("chiliproject/setting/#{name}") {Marshal.dump(find_or_default(name).value)}) |
|
|
|
|
Marshal.load(Rails.cache.fetch(self.cache_key(name)) {Marshal.dump(find_or_default(name).value)}) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def self.[]=(name, v) |
|
|
|
|
setting = find_or_default(name) |
|
|
|
|
setting.value = (v ? v : "") |
|
|
|
|
Rails.cache.delete "chiliproject/setting/#{name}" |
|
|
|
|
Rails.cache.delete self.cache_key(name) |
|
|
|
|
setting.save |
|
|
|
|
setting.value |
|
|
|
|
end |
|
|
|
@ -137,23 +137,19 @@ class Setting < ActiveRecord::Base |
|
|
|
|
Object.const_defined?(:OpenID) && self[:openid].to_i > 0 |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
# Checks if settings have changed since the values were read |
|
|
|
|
# and clears the cache hash if it's the case |
|
|
|
|
# Called once per request |
|
|
|
|
# Deprecation Warning: This method is no longer available. There is no |
|
|
|
|
# replacement. |
|
|
|
|
def self.check_cache |
|
|
|
|
settings_updated_on = Setting.maximum(:updated_on) |
|
|
|
|
cache_cleared_on = Rails.cache.read('chiliproject/setting-cleared_on') |
|
|
|
|
cache_cleared_on = cache_cleared_on ? Marshal.load(cache_cleared_on) : Time.now |
|
|
|
|
if settings_updated_on && cache_cleared_on <= settings_updated_on |
|
|
|
|
clear_cache |
|
|
|
|
end |
|
|
|
|
ActiveSupport::Deprecation.warn "The Setting.check_cache method is " + |
|
|
|
|
"deprecated and will be removed in the future. There should be no " + |
|
|
|
|
"replacement for this functionality needed." |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
# Clears all of the Setting caches |
|
|
|
|
def self.clear_cache |
|
|
|
|
Rails.cache.delete_matched( /^chiliproject\/setting\/.+$/ ) |
|
|
|
|
Rails.cache.write('chiliproject/setting-cleared_on', Marshal.dump(Time.now)) |
|
|
|
|
logger.info 'Settings cache cleared.' if logger |
|
|
|
|
ActiveSupport::Deprecation.warn "The Setting.clear_cache method is " + |
|
|
|
|
"deprecated and will be removed in the future. There should be no " + |
|
|
|
|
"replacement for this functionality needed." |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
private |
|
|
|
@ -165,4 +161,8 @@ private |
|
|
|
|
setting = find_by_name(name) |
|
|
|
|
setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def self.cache_key(name) |
|
|
|
|
"chiliproject/setting/#{Setting.maximum(:updated_on).to_i}/#{name}" |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|