Skip to content

Commit eca2b78

Browse files
committed
Make Controller#get_serializer(resource, options) the main interface
See https://groups.google.com/d/topic/rubyonrails-core/K8t4-DZ_DkQ/discussion RFC: Rails-API: Proposed better interface for registering serializers with the controller Summary: I propose there be a first-class serializer interface in Rails much like there is for renderers. Proposed interfaces are: `serializer_for` and `ActionController::Serializers.register`
1 parent f15afbb commit eca2b78

File tree

3 files changed

+17
-30
lines changed

3 files changed

+17
-30
lines changed

lib/action_controller/serialization.rb

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,31 @@ def serialization_scope
1919
respond_to?(_serialization_scope, true)
2020
end
2121

22-
# Deprecated
23-
def get_serializer(resource)
24-
fail ActiveModel::Serializer::Error, "ActionController::Serialization##{__method__} has been removed. "\
25-
"Please use ActiveSupport::Serializer.build instead"
22+
def get_serializer(resource, options = {})
23+
if ! use_adapter?
24+
warn "ActionController::Serialization##{__method__} has been removed. "\
25+
"Please pass 'adapter: false' or see ActiveSupport::Serializer.build"
26+
options[:adapter] = false
27+
end
28+
serializable_resource = ActiveModel::Serializer::build(resource, options) do |builder|
29+
if builder.serializer?
30+
builder.serialization_scope ||= serialization_scope
31+
builder.serialization_scope_name = _serialization_scope
32+
builder.adapter
33+
else
34+
resource
35+
end
36+
end
2637
end
2738

2839
# Deprecated
2940
def use_adapter?
30-
fail ActiveModel::Serializer::Error, "ActionController::Serialization##{__method__} has been removed. "\
31-
"Please use ActiveSupport::Serializer.build instead"
41+
true
3242
end
3343

3444
[:_render_option_json, :_render_with_renderer_json].each do |renderer_method|
3545
define_method renderer_method do |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
44-
end
46+
serializable_resource = get_serializer(resource, options)
4547
super(serializable_resource, options)
4648
end
4749
end

lib/active_model/serializer.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
module ActiveModel
44
class Serializer
5-
Error = Class.new(StandardError)
65
extend ActiveSupport::Autoload
76
autoload :Configuration
87
autoload :ArraySerializer

test/action_controller/serialization_test.rb

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -327,20 +327,6 @@ def test_cache_expiration_on_update
327327
assert_equal 'application/json', @response.content_type
328328
assert_equal expected.to_json, @response.body
329329
end
330-
331-
def test_fail_calling_use_adapter_on_controller_instance
332-
controller = ImplicitSerializationTestController.new
333-
assert_raises(ActiveModel::Serializer::Error) {
334-
controller.use_adapter?
335-
}
336-
end
337-
338-
def test_fail_calling_get_serializer__on_controller_instance
339-
controller = ImplicitSerializationTestController.new
340-
assert_raises(ActiveModel::Serializer::Error) {
341-
controller.get_serializer(Class.new)
342-
}
343-
end
344330
end
345331
end
346332
end

0 commit comments

Comments
 (0)