Skip to content

Commit e7d3323

Browse files
committed
Merge pull request #1060 from developertown/fragment-cache-namespaces
Update fragment cache to support namespaced objects
2 parents 6aba260 + 35c8f0d commit e7d3323

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

lib/active_model/serializer/adapter/fragment_cache.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ def cached_attributes(klass, serializers)
5454
end
5555

5656
def fragment_serializer(name, klass)
57-
cached = "#{name.capitalize}CachedSerializer"
58-
non_cached = "#{name.capitalize}NonCachedSerializer"
57+
cached = "#{to_valid_const_name(name)}CachedSerializer"
58+
non_cached = "#{to_valid_const_name(name)}NonCachedSerializer"
5959

6060
Object.const_set cached, Class.new(ActiveModel::Serializer) unless Object.const_defined?(cached)
6161
Object.const_set non_cached, Class.new(ActiveModel::Serializer) unless Object.const_defined?(non_cached)
@@ -72,6 +72,10 @@ def fragment_serializer(name, klass)
7272
cached_attributes(klass, serializers)
7373
serializers
7474
end
75+
76+
def to_valid_const_name(name)
77+
name.gsub('::', '_')
78+
end
7579
end
7680
end
7781
end

test/adapter/fragment_cache_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ class Serializer
44
class Adapter
55
class FragmentCacheTest < Minitest::Test
66
def setup
7+
@spam = Spam::UnrelatedLink.new(id: "spam-id-1")
78
@author = Author.new(name: 'Joao M. D. Moura')
89
@role = Role.new(name: 'Great Author', description:nil)
910
@role.author = [@author]
1011
@role_serializer = RoleSerializer.new(@role)
12+
@spam_serializer = Spam::UnrelatedLinkSerializer.new(@spam)
1113
@role_hash = FragmentCache.new(RoleSerializer.adapter.new(@role_serializer), @role_serializer, {})
14+
@spam_hash = FragmentCache.new(Spam::UnrelatedLinkSerializer.adapter.new(@spam_serializer), @spam_serializer, {})
1215
end
1316

1417
def test_fragment_fetch_with_virtual_attributes
@@ -20,6 +23,13 @@ def test_fragment_fetch_with_virtual_attributes
2023
}
2124
assert_equal(@role_hash.fetch, expected_result)
2225
end
26+
27+
def test_fragment_fetch_with_namespaced_object
28+
expected_result = {
29+
id: @spam.id
30+
}
31+
assert_equal(@spam_hash.fetch, expected_result)
32+
end
2333
end
2434
end
2535
end

test/fixtures/poro.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ def maker
250250
end
251251

252252
Spam::UnrelatedLinkSerializer = Class.new(ActiveModel::Serializer) do
253+
cache only: [:id]
253254
attributes :id
254255
end
255256

0 commit comments

Comments
 (0)