Skip to content

Commit a063cbe

Browse files
committed
Merge pull request #1289 from tchak/serialization_context
rename context to serialization_context and add url helpers
2 parents 65b8493 + d08ee59 commit a063cbe

File tree

7 files changed

+35
-7
lines changed

7 files changed

+35
-7
lines changed

lib/action_controller/serialization.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require 'active_support/core_ext/class/attribute'
2+
require 'action_controller/serialization/context'
23

34
module ActionController
45
module Serialization
@@ -46,7 +47,7 @@ def use_adapter?
4647

4748
[:_render_option_json, :_render_with_renderer_json].each do |renderer_method|
4849
define_method renderer_method do |resource, options|
49-
options.fetch(:context) { options[:context] = request }
50+
options.fetch(:serialization_context) { options[:serialization_context] = Context.new(request) }
5051
serializable_resource = get_serializer(resource, options)
5152
super(serializable_resource, options)
5253
end
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module ActionController
2+
module Serialization
3+
class Context
4+
attr_reader :request_url, :query_parameters, :url_helpers
5+
6+
def initialize(request)
7+
@request_url = request.original_url[/\A[^?]+/]
8+
@query_parameters = request.query_parameters
9+
@url_helpers = ActiveModelSerializers.url_helpers
10+
end
11+
end
12+
end
13+
end

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ def add_included_resources_for(serializer, include_tree, primary_data, included)
206206
end
207207

208208
def links_for(serializer, options)
209-
JsonApi::PaginationLinks.new(serializer.object, options[:context]).serializable_hash(options)
209+
JsonApi::PaginationLinks.new(serializer.object, options[:serialization_context]).serializable_hash(options)
210210
end
211211
end
212212
end

lib/active_model/serializer/adapter/json_api/pagination_links.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ def pages_from
4141
end
4242

4343
def url(options)
44-
@url ||= options.fetch(:links, {}).fetch(:self, nil) || original_url
44+
@url ||= options.fetch(:links, {}).fetch(:self, nil) || request_url
4545
end
4646

47-
def original_url
48-
@original_url ||= context.original_url[/\A[^?]+/]
47+
def request_url
48+
@request_url ||= context.request_url
4949
end
5050

5151
def query_parameters

lib/active_model/serializer/railtie.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ class Railtie < Rails::Railtie
77
end
88
end
99

10+
initializer 'active_model_serializers.url_helpers' do
11+
ActiveSupport.on_load(:action_controller) do
12+
ActiveModelSerializers.url_helpers = Module.new do
13+
include Rails.application.routes.url_helpers
14+
15+
def self.default_url_options
16+
ActionController::Base.default_url_options
17+
end
18+
end
19+
end
20+
end
21+
1022
initializer 'generators' do |app|
1123
app.load_generators
1224
require 'generators/serializer/resource_override'

lib/active_model_serializers.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ module ActiveModelSerializers
77
mattr_accessor :logger
88
self.logger = Rails.logger || Logger.new(IO::NULL)
99

10+
mattr_accessor :url_helpers
11+
1012
extend ActiveSupport::Autoload
1113
autoload :Model
1214

test/adapter/json_api/pagination_links_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ def setup
2222

2323
def mock_request(query_parameters = {}, original_url = URI)
2424
context = Minitest::Mock.new
25-
context.expect(:original_url, original_url)
25+
context.expect(:request_url, original_url)
2626
context.expect(:query_parameters, query_parameters)
2727
@options = {}
28-
@options[:context] = context
28+
@options[:serialization_context] = context
2929
end
3030

3131
def load_adapter(paginated_collection, options = {})

0 commit comments

Comments
 (0)