diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index e752c8124..b2bc15319 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -39,6 +39,10 @@ def initialize(object, options={}) @options = options end + def url_options + @options[:url_options] || {} + end + def serialize_object serializable_array end diff --git a/lib/active_model_serializers.rb b/lib/active_model_serializers.rb index 4ae2d743a..505df475f 100644 --- a/lib/active_model_serializers.rb +++ b/lib/active_model_serializers.rb @@ -22,6 +22,12 @@ class Railtie < Rails::Railtie extend ::AbstractController::Railties::RoutesHelpers.with(app.routes) include app.routes.mounted_helpers end + + ActiveSupport.on_load(:active_model_array_serializers) do + include AbstractController::UrlFor + extend ::AbstractController::Railties::RoutesHelpers.with(app.routes) + include app.routes.mounted_helpers + end end initializer "caching.active_model_serializer" do |app| @@ -93,3 +99,4 @@ def active_model_serializer end ActiveSupport.run_load_hooks(:active_model_serializers, ActiveModel::Serializer) +ActiveSupport.run_load_hooks(:active_model_array_serializers, ActiveModel::ArraySerializer) diff --git a/test/array_serializer_test.rb b/test/array_serializer_test.rb index d48e80272..fc253b48a 100644 --- a/test/array_serializer_test.rb +++ b/test/array_serializer_test.rb @@ -82,4 +82,27 @@ def active_model_serializer { "value" => "something" } ], serializer.as_json) end + + def test_active_support_on_load_hooks_fired + loaded = nil + ActiveSupport.on_load(:active_model_array_serializers) do + loaded = self + end + assert_equal ActiveModel::ArraySerializer, loaded + end + + def test_serializer_receives_url_options + array = [] + options = {url_options: { host: "test.local" }} + serializer = array.active_model_serializer.new(array, options) + + assert_equal({ host: "test.local" }, serializer.url_options) + end + + def test_serializer_returns_empty_hash_without_url_options + array = [] + serializer = array.active_model_serializer.new array + + assert_equal({}, serializer.url_options) + end end