diff --git a/app/models/block.rb b/app/models/block.rb index a9d4fc0..a1c91f1 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -130,7 +130,7 @@ class Block < ActiveRecord::Base end alias :active_record_cache_key :cache_key - def cache_key(language='en') + def cache_key(language='en', user=nil) active_record_cache_key+'-'+language end diff --git a/app/models/members_block.rb b/app/models/members_block.rb index d37c85b..57a0b9e 100644 --- a/app/models/members_block.rb +++ b/app/models/members_block.rb @@ -36,4 +36,15 @@ class MembersBlock < ProfileListBlock } end + def cache_key(language='en', user=nil) + logged = '' + if user + logged += '-logged-in' + if user.is_member_of? self.owner + logged += '-member' + end + end + super + logged + end + end diff --git a/app/views/shared/block.rhtml b/app/views/shared/block.rhtml index 1964b48..011c6e7 100644 --- a/app/views/shared/block.rhtml +++ b/app/views/shared/block.rhtml @@ -1,5 +1,5 @@ <% if block.cacheable? && use_cache %> - <% cache_timeout(block.cache_key(language), block.timeout) do %> + <% cache_timeout(block.cache_key(language, user), block.timeout) do %> <%= display_block_content(block, user, main_content) %> <% end %> <% else %> diff --git a/test/unit/block_test.rb b/test/unit/block_test.rb index 12f029d..c4921e2 100644 --- a/test/unit/block_test.rb +++ b/test/unit/block_test.rb @@ -165,4 +165,11 @@ class BlockTest < ActiveSupport::TestCase conditions = Block.expire_on assert conditions[:environment].kind_of?(Array) end + + should 'accept user as parameter on cache_key without change its value' do + person = fast_create(Person) + block = Block.new + assert_equal block.cache_key('en'), block.cache_key('en', person) + end + end diff --git a/test/unit/members_block_test.rb b/test/unit/members_block_test.rb index d6005db..8254a98 100644 --- a/test/unit/members_block_test.rb +++ b/test/unit/members_block_test.rb @@ -35,4 +35,28 @@ class MembersBlockTest < ActiveSupport::TestCase assert_same list, block.profiles end + should 'use logged-in to compose cache key' do + person = fast_create(Person) + community = fast_create(Community) + block = MembersBlock.create + block.expects(:owner).returns(community) + + assert_match(/-logged-in/,block.cache_key('en', person)) + end + + should 'use logged-in and member to compose cache key for members' do + person = fast_create(Person) + community = fast_create(Community) + community.add_member person + block = MembersBlock.create + block.expects(:owner).returns(community) + + assert_match(/-logged-in-member/,block.cache_key('en', person)) + end + + should 'not change block cache key if user is nil' do + block = MembersBlock.new + assert_equal block.cache_key('en'), block.cache_key('en', nil) + end + end -- libgit2 0.21.2