Skip to content

Commit 81eb1f0

Browse files
committed
Clean up Serializer#build interface and Controller usage
1 parent f2958c1 commit 81eb1f0

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

lib/action_controller/serialization.rb

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,16 @@ def use_adapter?
3333

3434
[:_render_option_json, :_render_with_renderer_json].each do |renderer_method|
3535
define_method renderer_method do |resource, options|
36-
builder = ActiveModel::Serializer::Builder.new(resource, options)
37-
if builder.serializer?
38-
builder.serialization_scope ||= serialization_scope
39-
builder.serialization_scope_name = _serialization_scope
40-
adapter = builder.adapter
41-
super(adapter, options)
42-
else
43-
super(resource, options)
36+
serializable_resource = ActiveModel::Serializer::build(resource, options) do |builder|
37+
if builder.serializer?
38+
builder.serialization_scope ||= serialization_scope
39+
builder.serialization_scope_name = _serialization_scope
40+
builder.adapter
41+
else
42+
resource
43+
end
4444
end
45+
super(serializable_resource, options)
4546
end
4647
end
4748

lib/active_model/serializer.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,15 @@ def self.inherited(base)
3131
end
3232

3333
# Primary interface to building a serializer (with adapter)
34+
# If no block is given, returns the adapter, ready for #as_json/#to_json
35+
# Otherwise, yields the builder and returns the contents of the block
3436
def self.build(resource, options = {})
3537
builder = Builder.new(resource, options)
36-
yield builder if block_given?
37-
builder.adapter
38+
if block_given?
39+
yield builder
40+
else
41+
builder.adapter
42+
end
3843
end
3944

4045
def self.attributes(*attrs)

test/serializers/meta_test.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,7 @@ def test_meta_is_present_on_arrays_with_root
9595

9696
def load_adapter(options)
9797
options = options.merge(adapter: :json, serializer: AlternateBlogSerializer)
98-
builder = ActiveModel::Serializer::Builder.new(@blog, options)
99-
builder.adapter
98+
ActiveModel::Serializer.build(@blog, options)
10099
end
101100
end
102101
end

0 commit comments

Comments
 (0)