Skip to content

Commit 4a4bcdc

Browse files
committed
Merge pull request #666 from jastkand/include_url_helpers
Auto-include url_helpers for Rails-apps. Fixes #563
2 parents 784eccd + 1875cab commit 4a4bcdc

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

lib/active_model/serializer/railtie.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,13 @@ class Railtie < Rails::Railtie
66
require 'active_model/serializer/generators/serializer/scaffold_controller_generator'
77
require 'active_model/serializer/generators/resource_override'
88
end
9+
10+
initializer 'include_routes.active_model_serializer' do |app|
11+
ActiveSupport.on_load(:active_model_serializers) do
12+
include app.routes.url_helpers
13+
end
14+
end
915
end
1016
end
17+
18+
ActiveSupport.run_load_hooks(:active_model_serializers, ActiveModel::Serializer)

test/test_app.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ class TestApp < Rails::Application
33
config.eager_load = false
44
config.secret_key_base = 'abc123'
55
end
6+
config.after_initialize do
7+
Rails.application.routes.default_url_options = { host: 'http://example.com' }
8+
end
69

710
# Set up a logger to avoid creating a log directory on every run.
811
config.logger = Logger.new(nil)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
require 'test_helper'
2+
3+
module ActiveModel
4+
class Serializer
5+
class UrlHelpersTest < Minitest::Test
6+
include Rails.application.routes.url_helpers
7+
8+
def setup
9+
Object.const_set 'UserController', Class.new(ActionController::Base) do
10+
def show
11+
render text: 'profile'
12+
end
13+
end
14+
15+
Rails.application.routes.draw do
16+
get '/profile/:id', as: :profile, controller: :user, action: :show
17+
end
18+
end
19+
20+
def test_url_helpers_are_available
21+
serializer = Class.new(ActiveModel::Serializer) do
22+
attributes :url
23+
24+
def url
25+
profile_url(id: object.object_id)
26+
end
27+
end
28+
profile = Profile.new
29+
30+
assert_equal({ url: profile_url(id: profile.object_id) },
31+
serializer.new(profile).as_json)
32+
end
33+
end
34+
end
35+
end

0 commit comments

Comments
 (0)