yosiat / panko_serializer

High Performance JSON Serialization for ActiveRecord & Ruby Objects
https://panko.dev
MIT License
575 stars 35 forks source link

Ability to skip nil values #155

Open jpboliv opened 3 months ago

jpboliv commented 3 months ago

Similar to https://github.com/yosiat/panko_serializer/issues/133

Is there a way to exclude attributes if its value is nil?

We're are migrating our API serialization library to yours, particularly because of performance reasons. And we have multiple instances of big payloads where there are fields that could be nil.

For example, this is how we include errors on our serializers, which leads us to instances where if the resource has no errors it will include it in the payload unnecessarily.

class ApplicationSerializer < Panko::Serializer
      attributes :errors

      def errors
        return unless object&.errors&.any?

        object.errors.messages
      end
end

If it's not possible at the moment, is this a feature that you might consider adding support for in the future? For example a general config where you could skip all nil values.

yosiat commented 2 months ago

Hi,

The library don't support excluding keys based on their values. What you can do, it use "SKIP" option, so it won't serialize "errors" if there aren't any. see test as example: https://github.com/yosiat/panko_serializer/blob/master/spec/panko/serializer_spec.rb#L181

class ApplicationSerializer < Panko::Serializer
      attributes :errors

      def errors
        return Panko::SKIP unless object&.errors&.any?

        object.errors.messages
      end
end

@jpboliv that answers your question?

jpboliv commented 2 months ago

Hi! sorry for the late reply @yosiat , but that Panko::SKIP option should be enough to help us! I think it might be worth adding a reference on that feature to your documentation! Cheers!