Skip to content

Commit 8f5f67c

Browse files
committed
allow subclasses of ActiveModel::Serializer to override reflections
1 parent 728b8f9 commit 8f5f67c

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

lib/active_model/serializer/associations.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,15 @@ def associations
9797
return unless object
9898

9999
Enumerator.new do |y|
100-
self.class._reflections.each do |reflection|
100+
reflections.each do |reflection|
101101
y.yield reflection.build_association(self, options)
102102
end
103103
end
104104
end
105+
106+
def reflections
107+
self.class._reflections
108+
end
105109
end
106110
end
107111
end

test/fixtures/poro.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,13 @@ def custom_options
102102
end
103103
end
104104

105+
CustomizablePostSerializer = Class.new(PostSerializer) do
106+
def reflections
107+
excludes = @options[:excludes] || []
108+
super.select{ |r| excludes.exclude?(r.name) }
109+
end
110+
end
111+
105112
SpammyPostSerializer = Class.new(ActiveModel::Serializer) do
106113
attributes :id
107114
has_many :related

test/serializers/associations_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,14 @@ def test_associations_custom_keys
145145
assert expected_association_keys.include? :writer
146146
assert expected_association_keys.include? :site
147147
end
148+
149+
def test_overriding_associations
150+
serializer = CustomizablePostSerializer.new(@post, excludes: [:comments])
151+
152+
association_keys = serializer.associations.map(&:key)
153+
154+
assert association_keys.exclude? :comments
155+
end
148156
end
149157
end
150158
end

0 commit comments

Comments
 (0)