Merge branch 'pulls/780/setting-cache' of https://github.com/finnlabs/chiliproject into unstable
This commit is contained in:
commit
33a8baf347
|
@ -75,8 +75,6 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
|
||||
def user_setup
|
||||
# Check the settings cache for each request
|
||||
Setting.check_cache
|
||||
# Find the current user
|
||||
User.current = find_current_user
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -21,6 +21,7 @@ class AccountControllerTest < ActionController::TestCase
|
|||
fixtures :users, :roles
|
||||
|
||||
def setup
|
||||
super
|
||||
@controller = AccountController.new
|
||||
@request = ActionController::TestRequest.new
|
||||
@response = ActionController::TestResponse.new
|
||||
|
|
|
@ -23,6 +23,7 @@ class IssueStatusesControllerTest < ActionController::TestCase
|
|||
fixtures :issue_statuses, :issues
|
||||
|
||||
def setup
|
||||
super
|
||||
@controller = IssueStatusesController.new
|
||||
@request = ActionController::TestRequest.new
|
||||
@response = ActionController::TestResponse.new
|
||||
|
|
|
@ -47,7 +47,7 @@ class ActiveSupport::TestCase
|
|||
# Add more helper methods to be used by all tests here...
|
||||
def setup
|
||||
super
|
||||
Setting.clear_cache
|
||||
Rails.cache.clear
|
||||
end
|
||||
|
||||
def log_user(login, password)
|
||||
|
|
|
@ -19,6 +19,7 @@ class ChangesetTest < ActiveSupport::TestCase
|
|||
:custom_fields, :custom_values, :users, :members, :member_roles, :trackers
|
||||
|
||||
def setup
|
||||
super
|
||||
end
|
||||
|
||||
def test_ref_keywords_any
|
||||
|
|
|
@ -15,6 +15,7 @@ require File.expand_path('../../test_helper', __FILE__)
|
|||
|
||||
class JournalObserverTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
super
|
||||
@user = User.generate!(:mail_notification => 'all')
|
||||
@project = Project.generate!
|
||||
User.add_to_project(@user, @project, Role.generate!(:permissions => [:view_issues, :edit_issues]))
|
||||
|
|
|
@ -18,6 +18,7 @@ class Redmine::I18nTest < ActiveSupport::TestCase
|
|||
include ActionView::Helpers::NumberHelper
|
||||
|
||||
def setup
|
||||
super
|
||||
@hook_module = Redmine::Hook
|
||||
end
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ class NewsTest < ActiveSupport::TestCase
|
|||
|
||||
|
||||
def setup
|
||||
super
|
||||
end
|
||||
|
||||
def test_create_should_send_email_notification
|
||||
|
|
Loading…
Reference in New Issue