Skip to content

Commit

Permalink
Merge pull request #1060 from developertown/fragment-cache-namespaces
Browse files Browse the repository at this point in the history
Update fragment cache to support namespaced objects
  • Loading branch information
joaomdmoura committed Aug 18, 2015
2 parents 6aba260 + 35c8f0d commit e7d3323
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/active_model/serializer/adapter/fragment_cache.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ def cached_attributes(klass, serializers)
end

def fragment_serializer(name, klass)
cached = "#{name.capitalize}CachedSerializer"
non_cached = "#{name.capitalize}NonCachedSerializer"
cached = "#{to_valid_const_name(name)}CachedSerializer"
non_cached = "#{to_valid_const_name(name)}NonCachedSerializer"

Object.const_set cached, Class.new(ActiveModel::Serializer) unless Object.const_defined?(cached)
Object.const_set non_cached, Class.new(ActiveModel::Serializer) unless Object.const_defined?(non_cached)
Expand All @@ -72,6 +72,10 @@ def fragment_serializer(name, klass)
cached_attributes(klass, serializers)
serializers
end

def to_valid_const_name(name)
name.gsub('::', '_')
end
end
end
end
Expand Down
10 changes: 10 additions & 0 deletions test/adapter/fragment_cache_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@ class Serializer
class Adapter
class FragmentCacheTest < Minitest::Test
def setup
@spam = Spam::UnrelatedLink.new(id: "spam-id-1")
@author = Author.new(name: 'Joao M. D. Moura')
@role = Role.new(name: 'Great Author', description:nil)
@role.author = [@author]
@role_serializer = RoleSerializer.new(@role)
@spam_serializer = Spam::UnrelatedLinkSerializer.new(@spam)
@role_hash = FragmentCache.new(RoleSerializer.adapter.new(@role_serializer), @role_serializer, {})
@spam_hash = FragmentCache.new(Spam::UnrelatedLinkSerializer.adapter.new(@spam_serializer), @spam_serializer, {})
end

def test_fragment_fetch_with_virtual_attributes
Expand All @@ -20,6 +23,13 @@ def test_fragment_fetch_with_virtual_attributes
}
assert_equal(@role_hash.fetch, expected_result)
end

def test_fragment_fetch_with_namespaced_object
expected_result = {
id: @spam.id
}
assert_equal(@spam_hash.fetch, expected_result)
end
end
end
end
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/poro.rb
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ def maker
end

Spam::UnrelatedLinkSerializer = Class.new(ActiveModel::Serializer) do
cache only: [:id]
attributes :id
end

Expand Down

0 comments on commit e7d3323

Please sign in to comment.