From f6f3606e0892371cb7086758cf2c832de9d13c4d Mon Sep 17 00:00:00 2001 From: Nick Landgrebe Date: Wed, 30 Sep 2020 19:12:23 -0500 Subject: [PATCH] Add config.relationship_links to toggle relationship link serialization --- CHANGELOG.md | 1 + lib/caprese/configuration.rb | 6 ++- .../serializer/concerns/relationships.rb | 40 ++++++++++--------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0174b22..e5a8ea2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -197,3 +197,4 @@ * Add `relationships_referenced` helper so that when `optimize_relationships` is enabled and relationships are changed as part of a persistence request (create, update), respond with the data for these relationships in the primary data instead of skipping them * BREAKING: Use ActionController::API for Caprese::Controller * Allow includes to overwrite past includes of same resource identifier +* Add config.relationship_links to toggle relationship link serialization diff --git a/lib/caprese/configuration.rb b/lib/caprese/configuration.rb index dc0ce3f..525e662 100644 --- a/lib/caprese/configuration.rb +++ b/lib/caprese/configuration.rb @@ -10,6 +10,7 @@ class Configuration :max_page_size, :only_path_links, :optimize_relationships, + :relationship_links, :resource_primary_key ) @@ -34,6 +35,9 @@ def initialize # If true, relationship data will not be serialized unless it is in `include` @optimize_relationships = false + # If true, relationship links will be serialized + @relationship_links = true + # Defines the translation scope for model and controller errors @i18n_scope = '' # 'api.v1.errors' @@ -48,4 +52,4 @@ def initialize @isolated_namespace = nil end end -end \ No newline at end of file +end diff --git a/lib/caprese/serializer/concerns/relationships.rb b/lib/caprese/serializer/concerns/relationships.rb index 67a2ecb..48327c0 100644 --- a/lib/caprese/serializer/concerns/relationships.rb +++ b/lib/caprese/serializer/concerns/relationships.rb @@ -81,27 +81,29 @@ def build_association_block(reflection_name) reflection_name = reflection_name.to_sym Proc.new do |serializer| - link :self do - url = "relationship_definition_#{serializer.version_name("#{serializer.unnamespace(object.class.name).underscore}_url")}" - if serializer.url_helpers.respond_to? url - serializer.url_helpers.send( - url, - id: object.read_attribute(Caprese.config.resource_primary_key), - relationship: reflection_name, - host: serializer.class.send(:caprese_default_url_options_host) - ) + if Caprese.config.relationship_links + link :self do + url = "relationship_definition_#{serializer.version_name("#{serializer.unnamespace(object.class.name).underscore}_url")}" + if serializer.url_helpers.respond_to? url + serializer.url_helpers.send( + url, + id: object.read_attribute(Caprese.config.resource_primary_key), + relationship: reflection_name, + host: serializer.class.send(:caprese_default_url_options_host) + ) + end end - end - link :related do - url = "relationship_data_#{serializer.version_name("#{serializer.unnamespace(object.class.name).underscore}_url")}" - if serializer.url_helpers.respond_to? url - serializer.url_helpers.send( - url, - id: object.read_attribute(Caprese.config.resource_primary_key), - relationship: reflection_name, - host: serializer.class.send(:caprese_default_url_options_host) - ) + link :related do + url = "relationship_data_#{serializer.version_name("#{serializer.unnamespace(object.class.name).underscore}_url")}" + if serializer.url_helpers.respond_to? url + serializer.url_helpers.send( + url, + id: object.read_attribute(Caprese.config.resource_primary_key), + relationship: reflection_name, + host: serializer.class.send(:caprese_default_url_options_host) + ) + end end end