Skip to content

Commit bc8fd0a

Browse files
committed
Merge pull request #958 from joaomdmoura/spliting-json-adapter
Splitting json adapter into two
2 parents 7fa123b + e321cb3 commit bc8fd0a

23 files changed

+81
-109
lines changed

lib/action_controller/serialization.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ module Serialization
66

77
include ActionController::Renderers
88

9-
ADAPTER_OPTION_KEYS = [:include, :fields, :root, :adapter]
9+
ADAPTER_OPTION_KEYS = [:include, :fields, :adapter]
1010

1111
included do
1212
class_attribute :_serialization_scope

lib/active_model/serializer.rb

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,6 @@ def self.adapter
145145
adapter_class
146146
end
147147

148-
def self._root
149-
@@root ||= false
150-
end
151-
152-
def self._root=(root)
153-
@@root = root
154-
end
155-
156148
def self.root_name
157149
name.demodulize.underscore.sub(/_serializer$/, '') if name
158150
end
@@ -162,7 +154,7 @@ def self.root_name
162154
def initialize(object, options = {})
163155
@object = object
164156
@options = options
165-
@root = options[:root] || (self.class._root ? self.class.root_name : false)
157+
@root = options[:root]
166158
@meta = options[:meta]
167159
@meta_key = options[:meta_key]
168160
@scope = options[:scope]
@@ -176,11 +168,7 @@ def initialize(object, options = {})
176168
end
177169

178170
def json_key
179-
if root == true || root.nil?
180-
self.class.root_name
181-
else
182-
root
183-
end
171+
self.class.root_name
184172
end
185173

186174
def id

lib/active_model/serializer/adapter.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class Serializer
55
class Adapter
66
extend ActiveSupport::Autoload
77
autoload :Json
8+
autoload :FlattenJson
89
autoload :Null
910
autoload :JsonApi
1011

@@ -21,7 +22,8 @@ def serializable_hash(options = {})
2122

2223
def as_json(options = {})
2324
hash = serializable_hash(options)
24-
include_meta(hash)
25+
include_meta(hash) unless self.class == FlattenJson
26+
hash
2527
end
2628

2729
def self.create(resource, options = {})
@@ -48,7 +50,7 @@ def cache_check(serializer)
4850
yield
4951
end
5052
elsif is_fragment_cached?
51-
FragmentCache.new(self, @cached_serializer, @options, @root).fetch
53+
FragmentCache.new(self, @cached_serializer, @options).fetch
5254
else
5355
yield
5456
end
@@ -82,11 +84,11 @@ def meta_key
8284
end
8385

8486
def root
85-
@options.fetch(:root) { serializer.json_key }
87+
serializer.json_key.to_sym if serializer.json_key
8688
end
8789

8890
def include_meta(json)
89-
json[meta_key] = meta if meta && root
91+
json[meta_key] = meta if meta
9092
json
9193
end
9294
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module ActiveModel
2+
class Serializer
3+
class Adapter
4+
class FlattenJson < Json
5+
def serializable_hash(options = {})
6+
super
7+
@result
8+
end
9+
end
10+
end
11+
end
12+
end

lib/active_model/serializer/adapter/fragment_cache.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ class FragmentCache
55

66
attr_reader :serializer
77

8-
def initialize(adapter, serializer, options, root)
9-
@root = root
8+
def initialize(adapter, serializer, options)
109
@options = options
1110
@adapter = adapter
1211
@serializer = serializer

lib/active_model/serializer/adapter/json.rb

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class Adapter
66
class Json < Adapter
77
def serializable_hash(options = {})
88
if serializer.respond_to?(:each)
9-
@result = serializer.map{|s| self.class.new(s).serializable_hash }
9+
@result = serializer.map{|s| FlattenJson.new(s).serializable_hash }
1010
else
1111
@hash = {}
1212

@@ -37,16 +37,13 @@ def serializable_hash(options = {})
3737
@result = @core.merge @hash
3838
end
3939

40-
if root
41-
@result = { root => @result }
42-
else
43-
@result
44-
end
40+
{ root => @result }
41+
end
42+
43+
def fragment_cache(cached_hash, non_cached_hash)
44+
Json::FragmentCache.new().fragment_cache(cached_hash, non_cached_hash)
4545
end
46-
end
4746

48-
def fragment_cache(cached_hash, non_cached_hash)
49-
Json::FragmentCache.new().fragment_cache(cached_hash, non_cached_hash)
5047
end
5148
end
5249
end

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ class Adapter
66
class JsonApi < Adapter
77
def initialize(serializer, options = {})
88
super
9-
serializer.root = true
109
@hash = { data: [] }
1110

1211
if fields = options.delete(:fields)

lib/active_model/serializer/array_serializer.rb

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ class ArraySerializer
77
attr_reader :meta, :meta_key
88

99
def initialize(objects, options = {})
10-
options.merge!(root: nil)
11-
12-
@objects = objects.map do |object|
10+
@resource = objects
11+
@objects = objects.map do |object|
1312
serializer_class = options.fetch(
1413
:serializer,
1514
ActiveModel::Serializer.serializer_for(object)
@@ -21,7 +20,11 @@ def initialize(objects, options = {})
2120
end
2221

2322
def json_key
24-
@objects.first.json_key if @objects.first
23+
if @objects.first
24+
@objects.first.json_key.pluralize
25+
else
26+
@resource.name.downcase.pluralize if @resource.try(:name)
27+
end
2528
end
2629

2730
def root=(root)

lib/active_model/serializer/configuration.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ module Configuration
66

77
included do |base|
88
base.config.array_serializer = ActiveModel::Serializer::ArraySerializer
9-
base.config.adapter = :json
9+
base.config.adapter = :flatten_json
1010
end
1111
end
1212
end

lib/active_model/serializer/fieldset.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ def fields
1212
end
1313

1414
def fields_for(serializer)
15-
key = serializer.json_key || serializer.class.root_name
16-
fields[key.to_sym]
15+
key = serializer.json_key
16+
fields[key.to_sym] || fields[key.pluralize.to_sym]
1717
end
1818

1919
private

0 commit comments

Comments
 (0)