Fixed lookup cache management.
This commit is contained in:
parent
775296bfc9
commit
852339be1e
2 changed files with 83 additions and 0 deletions
|
@ -3,6 +3,9 @@ require 'cache'
|
||||||
class ApplicationModel < ActiveRecord::Base
|
class ApplicationModel < ActiveRecord::Base
|
||||||
self.abstract_class = true
|
self.abstract_class = true
|
||||||
|
|
||||||
|
before_create :cache_delete
|
||||||
|
before_update :cache_delete_before
|
||||||
|
before_destroy :cache_delete_before
|
||||||
after_create :cache_delete
|
after_create :cache_delete
|
||||||
after_update :cache_delete
|
after_update :cache_delete
|
||||||
after_destroy :cache_delete
|
after_destroy :cache_delete
|
||||||
|
@ -40,12 +43,33 @@ class ApplicationModel < ActiveRecord::Base
|
||||||
# puts 'g ' + group.class.to_s
|
# puts 'g ' + group.class.to_s
|
||||||
if o.respond_to?('cache_delete') then o.cache_delete end
|
if o.respond_to?('cache_delete') then o.cache_delete end
|
||||||
end
|
end
|
||||||
|
def cache_delete_before
|
||||||
|
old_object = self.class.where( :id => self.id ).first
|
||||||
|
if old_object
|
||||||
|
old_object.cache_delete
|
||||||
|
end
|
||||||
|
self.cache_delete
|
||||||
|
end
|
||||||
|
|
||||||
def cache_delete
|
def cache_delete
|
||||||
key = self.class.to_s + '::' + self.id.to_s
|
key = self.class.to_s + '::' + self.id.to_s
|
||||||
Cache.delete( key.to_s )
|
Cache.delete( key.to_s )
|
||||||
key = self.class.to_s + ':f:' + self.id.to_s
|
key = self.class.to_s + ':f:' + self.id.to_s
|
||||||
Cache.delete( key.to_s )
|
Cache.delete( key.to_s )
|
||||||
|
if self[:name]
|
||||||
|
key = self.class.to_s + '::' + self.name.to_s
|
||||||
|
Cache.delete( key.to_s )
|
||||||
|
key = self.class.to_s + ':f:' + self.name.to_s
|
||||||
|
Cache.delete( key.to_s )
|
||||||
|
end
|
||||||
|
if self[:login]
|
||||||
|
key = self.class.to_s + '::' + self.login.to_s
|
||||||
|
Cache.delete( key.to_s )
|
||||||
|
key = self.class.to_s + ':f:' + self.login.to_s
|
||||||
|
Cache.delete( key.to_s )
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.cache_set(data_id, data, full = false)
|
def self.cache_set(data_id, data, full = false)
|
||||||
if !full
|
if !full
|
||||||
key = self.to_s + '::' + data_id.to_s
|
key = self.to_s + '::' + data_id.to_s
|
||||||
|
|
59
test/unit/object_cache_test.rb
Normal file
59
test/unit/object_cache_test.rb
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class ObjectCacheTest < ActiveSupport::TestCase
|
||||||
|
test 'object cache' do
|
||||||
|
|
||||||
|
name = 'object cache test ' + rand(9999999).to_s
|
||||||
|
group = Group.create(
|
||||||
|
:name => name,
|
||||||
|
:updated_by_id => 1,
|
||||||
|
:created_by_id => 1,
|
||||||
|
)
|
||||||
|
group_where = Group.where( :name => name ).first
|
||||||
|
assert_equal( name, group_where[:name], 'verify by where' )
|
||||||
|
|
||||||
|
group_lookup_name = Group.lookup( :name => name )
|
||||||
|
assert_equal( name, group_lookup_name[:name], 'verify by lookup.name' )
|
||||||
|
|
||||||
|
group_lookup_id = Group.lookup( :id => group.id )
|
||||||
|
assert_equal( name, group_lookup_id[:name], 'verify by lookup.id' )
|
||||||
|
|
||||||
|
name_new = name + ' next'
|
||||||
|
group.name = name_new
|
||||||
|
group.save
|
||||||
|
|
||||||
|
group_where = Group.where( :name => name ).first
|
||||||
|
assert_equal( nil, group_where, 'verify by where name_old' )
|
||||||
|
|
||||||
|
group_where = Group.where( :name => name_new ).first
|
||||||
|
assert_equal( name_new, group_where[:name], 'verify by where name_new' )
|
||||||
|
|
||||||
|
group_lookup_name = Group.lookup( :name => name )
|
||||||
|
assert_equal( nil, group_lookup_name, 'verify by lookup.name name_old' )
|
||||||
|
|
||||||
|
group_lookup_name = Group.lookup( :name => name_new )
|
||||||
|
assert_equal( name_new, group_lookup_name[:name], 'verify by lookup.name name_new' )
|
||||||
|
|
||||||
|
group_lookup_id = Group.lookup( :id => group.id )
|
||||||
|
assert_equal( name_new, group_lookup_id[:name], 'verify by lookup.id' )
|
||||||
|
|
||||||
|
group.destroy
|
||||||
|
|
||||||
|
group_where = Group.where( :name => name ).first
|
||||||
|
assert_equal( nil, group_where, 'verify by where name_old' )
|
||||||
|
|
||||||
|
group_where = Group.where( :name => name_new ).first
|
||||||
|
assert_equal( nil, group_where, 'verify by where name_new' )
|
||||||
|
|
||||||
|
group_lookup_name = Group.lookup( :name => name )
|
||||||
|
assert_equal( nil, group_lookup_name, 'verify by lookup.name name_old' )
|
||||||
|
|
||||||
|
group_lookup_name = Group.lookup( :name => name_new )
|
||||||
|
assert_equal( nil, group_lookup_name, 'verify by lookup.name name_new' )
|
||||||
|
|
||||||
|
group_lookup_id = Group.lookup( :id => group.id )
|
||||||
|
assert_equal( nil, group_lookup_id, 'verify by lookup.id' )
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue