Merge branch 'pulls/780/setting-cache' of https://github.com/finnlabs/chiliproject into unstable

This commit is contained in:
Holger Just 2012-01-16 14:50:34 +01:00
commit 33a8baf347
9 changed files with 21 additions and 17 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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]))

View File

@ -18,6 +18,7 @@ class Redmine::I18nTest < ActiveSupport::TestCase
include ActionView::Helpers::NumberHelper
def setup
super
@hook_module = Redmine::Hook
end

View File

@ -22,6 +22,7 @@ class NewsTest < ActiveSupport::TestCase
def setup
super
end
def test_create_should_send_email_notification