Skip to content

Commit b297f17

Browse files
committed
test for namespaced associations + bug fixed
1 parent dde1492 commit b297f17

File tree

4 files changed

+23
-10
lines changed

4 files changed

+23
-10
lines changed

lib/active_model/serializer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def has_many(*attrs)
116116
def build_serializer_class(resource, options)
117117
"".tap do |klass_name|
118118
klass_name << "#{options[:namespace]}::" if options[:namespace]
119-
klass_name << prefix.to_s.classify if options[:prefix]
119+
klass_name << options[:prefix].to_s.classify if options[:prefix]
120120
klass_name << "#{resource.class.name}Serializer"
121121
end
122122
end

lib/active_model/serializer/associations.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,16 @@ def embed=(embed)
3838
@embed_objects = embed == :object || embed == :objects
3939
end
4040

41-
def serializer_from_object(object)
42-
Serializer.serializer_for(object)
41+
def serializer_from_object(object, options = {})
42+
Serializer.serializer_for(object, options)
4343
end
4444

4545
def default_serializer
4646
DefaultSerializer
4747
end
4848

4949
def build_serializer(object, options = {})
50-
serializer_class(object).new(object, options.merge(self.options))
50+
serializer_class(object, options).new(object, options.merge(self.options))
5151
end
5252

5353
class HasOne < Association
@@ -57,8 +57,8 @@ def initialize(name, *args)
5757
@key ||= "#{name}_id"
5858
end
5959

60-
def serializer_class(object)
61-
serializer_from_options || serializer_from_object(object) || default_serializer
60+
def serializer_class(object, options = {})
61+
serializer_from_options || serializer_from_object(object, options) || default_serializer
6262
end
6363

6464
def build_serializer(object, options = {})
@@ -74,7 +74,7 @@ def initialize(name, *args)
7474
@key ||= "#{name.to_s.singularize}_ids"
7575
end
7676

77-
def serializer_class(object)
77+
def serializer_class(object, _ = {})
7878
if use_array_serializer?
7979
ArraySerializer
8080
else

test/fixtures/poro.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ class WebLogLowerCamelSerializer < WebLogSerializer
7474
format_keys :lower_camel
7575
end
7676

77-
class ShortUserSerializer < ActiveModel::Serializer
78-
attributes :name
79-
end
77+
class ShortProfileSerializer < ::ProfileSerializer; end
8078

8179
module TestNamespace
8280
class ProfileSerializer < ::ProfileSerializer; end

test/unit/active_model/serializer/associations/build_serializer_test.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class BuildSerializerTest < Minitest::Test
77
def setup
88
@association = Association::HasOne.new('post', serializer: PostSerializer)
99
@post = Post.new({ title: 'Title 1', body: 'Body 1', date: '1/1/2000' })
10+
@user = User.new
1011
end
1112

1213
def test_build_serializer_for_array_called_twice
@@ -15,6 +16,20 @@ def test_build_serializer_for_array_called_twice
1516
assert_instance_of(PostSerializer, serializer)
1617
end
1718
end
19+
20+
def test_build_serializer_from_in_a_namespace
21+
assoc = Association::HasOne.new('profile')
22+
serializer = TestNamespace::UserSerializer.new(@user).build_serializer(assoc)
23+
24+
assert_instance_of(TestNamespace::ProfileSerializer, serializer)
25+
end
26+
27+
def test_build_serializer_with_prefix
28+
assoc = Association::HasOne.new('profile', prefix: :short)
29+
serializer = UserSerializer.new(@user).build_serializer(assoc)
30+
31+
assert_instance_of(ShortProfileSerializer, serializer)
32+
end
1833
end
1934
end
2035
end

0 commit comments

Comments
 (0)