about summary refs log tree commit diff
path: root/config/initializers/active_model_serializers.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2019-03-27 15:55:23 +0100
committerGitHub <noreply@github.com>2019-03-27 15:55:23 +0100
commit11fe293e1b318a12b75f0c5d1bb208fdbb46417e (patch)
treeb60386ef14602dd63e669d95f990d11625a8db48 /config/initializers/active_model_serializers.rb
parenta91acf79b53307ada584f449da1369c0216a24d1 (diff)
Remove unused ActivityPub `@context` values depending on response (#10378)
Fix #8078
Diffstat (limited to 'config/initializers/active_model_serializers.rb')
-rw-r--r--config/initializers/active_model_serializers.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/config/initializers/active_model_serializers.rb b/config/initializers/active_model_serializers.rb
index 0e69e1d96..329a5fb2c 100644
--- a/config/initializers/active_model_serializers.rb
+++ b/config/initializers/active_model_serializers.rb
@@ -3,3 +3,22 @@ ActiveModelSerializers.config.tap do |config|
 end
 
 ActiveSupport::Notifications.unsubscribe(ActiveModelSerializers::Logging::RENDER_EVENT)
+
+class ActiveModel::Serializer::Reflection
+  # We monkey-patch this method so that when we include associations in a serializer,
+  # the nested serializers can send information about used contexts upwards back to
+  # the root. We do this via instance_options because the nesting can be dynamic.
+  def build_association(parent_serializer, parent_serializer_options, include_slice = {})
+    serializer = options[:serializer]
+
+    parent_serializer_options.merge!(named_contexts: serializer._named_contexts, context_extensions: serializer._context_extensions) if serializer.respond_to?(:_named_contexts)
+
+    association_options = {
+      parent_serializer: parent_serializer,
+      parent_serializer_options: parent_serializer_options,
+      include_slice: include_slice,
+    }
+
+    ActiveModel::Serializer::Association.new(self, association_options)
+  end
+end