Sha256: 176c411cc6ad69c30667917d3704690863e5f4948e827e83382acee3297042b1

Contents?: true

Size: 870 Bytes

Versions: 18

Compression:

Stored size: 870 Bytes

Contents

module SoberSwag
  module Serializer
    ##
    # Given something that serializes a type 'A',
    # this can be used to make a serializer of type 'A | nil'.
    #
    # Or, put another way, makes serializers not crash on nil values.
    class Optional < Base
      def initialize(inner)
        @inner = inner
      end

      attr_reader :inner

      def lazy_type?
        @inner.lazy_type?
      end

      def lazy_type
        @inner.lazy_type.optional
      end

      def finalize_lazy_type!
        @inner.finalize_lazy_type!
      end

      def serialize(object, options = {})
        if object.nil?
          object
        else
          inner.serialize(object, options)
        end
      end

      def type
        inner.type.optional
      end

      def optional(*)
        raise ArgumentError, 'no nesting optionals please'
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
sober_swag-0.19.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.18.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.17.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.16.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.15.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.14.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.13.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.12.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.11.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.10.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.9.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.8.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.7.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.6.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.5.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.4.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.3.0 lib/sober_swag/serializer/optional.rb
sober_swag-0.2.0 lib/sober_swag/serializer/optional.rb