diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cb573f2..ca2a6510 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Breaking changes: Features: +- [#1668](https://github.com/rails-api/active_model_serializers/pull/1668) Exclude nil and empty links. (@sigmike) - [#1426](https://github.com/rails-api/active_model_serializers/pull/1426) Add ActiveModelSerializers.config.default_includes (@empact) Fixes: diff --git a/lib/active_model_serializers/adapter/json_api.rb b/lib/active_model_serializers/adapter/json_api.rb index 6232086b..9b516f8d 100644 --- a/lib/active_model_serializers/adapter/json_api.rb +++ b/lib/active_model_serializers/adapter/json_api.rb @@ -474,7 +474,8 @@ module ActiveModelSerializers # }.reject! {|_,v| v.nil? } def links_for(serializer) serializer._links.each_with_object({}) do |(name, value), hash| - hash[name] = Link.new(serializer, value).as_json + result = Link.new(serializer, value).as_json + hash[name] = result if result end end diff --git a/lib/active_model_serializers/adapter/json_api/link.rb b/lib/active_model_serializers/adapter/json_api/link.rb index 40c5d489..64e15071 100644 --- a/lib/active_model_serializers/adapter/json_api/link.rb +++ b/lib/active_model_serializers/adapter/json_api/link.rb @@ -71,7 +71,7 @@ module ActiveModelSerializers hash[:href] = @href if defined?(@href) hash[:meta] = @meta if defined?(@meta) - hash + hash.any? ? hash : nil end protected diff --git a/test/adapter/json_api/links_test.rb b/test/adapter/json_api/links_test.rb index 981e32b5..6be6ead6 100644 --- a/test/adapter/json_api/links_test.rb +++ b/test/adapter/json_api/links_test.rb @@ -17,6 +17,7 @@ module ActiveModelSerializers link :yet_another do "http://example.com/resource/#{object.id}" end + link(:nil) { nil } end def setup