Skip to content

Commit eda8ff1

Browse files
committed
Move serializer caching from adapter
1 parent 093d198 commit eda8ff1

19 files changed

+247
-297
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Fixes:
3434
- [#1488](https://github.com/rails-api/active_model_serializers/pull/1488) Require ActiveSupport's string inflections (@nate00)
3535

3636
Misc:
37+
- [#1471](https://github.com/rails-api/active_model_serializers/pull/1471) [Cleanup] Serializer caching is its own concern. (@bf4)
3738
- [#1482](https://github.com/rails-api/active_model_serializers/pull/1482) Document JSON API implementation defs and progress in class. (@bf4)
3839
- [#1551](https://github.com/rails-api/active_model_serializers/pull/1551) Added codebeat badge (@korzonek)
3940
- [#1527](https://github.com/rails-api/active_model_serializers/pull/1527) Refactor fragment cache class. (@groyoh)

lib/active_model/serializer.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,12 @@ def self.serializer_for(resource, options = {})
4848
# @see ActiveModelSerializers::Adapter.lookup
4949
# Deprecated
5050
def self.adapter
51-
warn 'Calling adapter method in Serializer, please use the ActiveModelSerializers::Adapter.configured_adapter'
5251
ActiveModelSerializers::Adapter.lookup(config.adapter)
5352
end
53+
class << self
54+
extend ActiveModelSerializers::Deprecate
55+
deprecate :adapter, 'ActiveModelSerializers::Adapter.configured_adapter'
56+
end
5457

5558
# @api private
5659
def self.serializer_lookup_chain_for(klass)

lib/active_model/serializer/attributes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def _attributes
6868
# @api private
6969
# maps attribute value to explict key name
7070
# @see Serializer::attribute
71-
# @see Adapter::FragmentCache#fragment_serializer
71+
# @see FragmentCache#fragment_serializer
7272
def _attributes_keys
7373
_attributes_data
7474
.each_with_object({}) do |(key, attr), hash|

lib/active_model_serializers.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
module ActiveModelSerializers
66
extend ActiveSupport::Autoload
77
autoload :Model
8+
autoload :CachedSerializer
9+
autoload :FragmentCache
810
autoload :Callbacks
911
autoload :Deserialization
1012
autoload :Logging

lib/active_model_serializers/adapter.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ module Adapter
33
UnknownAdapterError = Class.new(ArgumentError)
44
ADAPTER_MAP = {} # rubocop:disable Style/MutableConstant
55
private_constant :ADAPTER_MAP if defined?(private_constant)
6-
require 'active_model_serializers/adapter/fragment_cache'
7-
require 'active_model_serializers/adapter/cached_serializer'
86

97
class << self # All methods are class functions
108
def new(*args)

lib/active_model_serializers/adapter/attributes.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,6 @@ def serializable_hash(options = nil)
1717
end
1818
end
1919

20-
def fragment_cache(cached_hash, non_cached_hash)
21-
Json::FragmentCache.new.fragment_cache(cached_hash, non_cached_hash)
22-
end
23-
2420
private
2521

2622
def serializable_hash_for_collection(options)

lib/active_model_serializers/adapter/base.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ def as_json(options = nil)
2323
hash
2424
end
2525

26-
def fragment_cache(*_args)
27-
fail NotImplementedError, 'This is an abstract method. Should be implemented at the concrete adapter.'
26+
def fragment_cache(cached_hash, non_cached_hash)
27+
non_cached_hash.merge cached_hash
2828
end
2929

3030
def cache_check(serializer)

lib/active_model_serializers/adapter/cached_serializer.rb

Lines changed: 0 additions & 77 deletions
This file was deleted.

lib/active_model_serializers/adapter/fragment_cache.rb

Lines changed: 0 additions & 118 deletions
This file was deleted.
Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
11
module ActiveModelSerializers
22
module Adapter
33
class Json < Base
4-
extend ActiveSupport::Autoload
5-
autoload :FragmentCache
6-
74
def serializable_hash(options = nil)
85
options ||= {}
96
{ root => Attributes.new(serializer, instance_options).serializable_hash(options) }
107
end
11-
12-
private
13-
14-
def fragment_cache(cached_hash, non_cached_hash)
15-
ActiveModelSerializers::Adapter::Json::FragmentCache.new.fragment_cache(cached_hash, non_cached_hash)
16-
end
178
end
189
end
1910
end

lib/active_model_serializers/adapter/json/fragment_cache.rb

Lines changed: 0 additions & 11 deletions
This file was deleted.

lib/active_model_serializers/adapter/json_api.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ module ActiveModelSerializers
2222
module Adapter
2323
class JsonApi < Base
2424
extend ActiveSupport::Autoload
25-
autoload :FragmentCache
2625
autoload :Jsonapi
2726
autoload :ResourceIdentifier
2827
autoload :Relationship
@@ -169,7 +168,14 @@ def failure_document
169168

170169
def fragment_cache(cached_hash, non_cached_hash)
171170
root = false if instance_options.include?(:include)
172-
FragmentCache.new.fragment_cache(root, cached_hash, non_cached_hash)
171+
core_cached = cached_hash.first
172+
core_non_cached = non_cached_hash.first
173+
no_root_cache = cached_hash.delete_if { |key, _value| key == core_cached[0] }
174+
no_root_non_cache = non_cached_hash.delete_if { |key, _value| key == core_non_cached[0] }
175+
cached_resource = (core_cached[1]) ? core_cached[1].deep_merge(core_non_cached[1]) : core_non_cached[1]
176+
hash = root ? { root => cached_resource } : cached_resource
177+
178+
hash.deep_merge no_root_non_cache.deep_merge no_root_cache
173179
end
174180

175181
protected

lib/active_model_serializers/adapter/json_api/fragment_cache.rb

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)