Sha256: cd459440a886e0ea390f55e586fc359fb958175a98a4d2d163ec91de61fa4c2b

Contents?: true

Size: 1.77 KB

Versions: 9

Compression:

Stored size: 1.77 KB

Contents

module SoberSwag
  module Serializer
    ##
    # Transform a serializer that works on elements to one that works on Arrays
    class Array < Base
      ##
      # Make an array serializer out of another serializer.
      # @param element_serializer [SoberSwag::Serializer::Base] the serializer to use for each element.
      def initialize(element_serializer)
        @element_serializer = element_serializer
      end

      ##
      # The serializer that will be used for each element in the array.
      #
      # @return [SoberSwag::Serializer::Base]
      attr_reader :element_serializer

      ##
      # Delegates to {#element_serializer}
      def lazy_type?
        @element_serializer.lazy_type?
      end

      ##
      # Delegates to {#element_serializer}, wrapped in an array
      def lazy_type
        SoberSwag::Types::Array.of(@element_serializer.lazy_type)
      end

      ##
      # Delegates to {#element_serializer}
      def finalize_lazy_type!
        @element_serializer.finalize_lazy_type!
      end

      ##
      # Serialize an array of objects that can be serialized with {#element_serializer}
      # by calling `element_serializer.serialize` for each item in this array.
      #
      # Note: since ruby is duck-typed, anything that responds to the `#map` method from
      # [Enumerable](https://ruby-doc.org/core-3.0.0/Enumerable.html) should work!
      #
      # @param object [Array<Object>,#map] collection of objects to serialize
      # @return [Array<Object>] JSON-compatible array
      def serialize(object, options = {})
        object.map { |a| element_serializer.serialize(a, options) }
      end

      ##
      # The type of items returned from {#serialize}
      def type
        SoberSwag::Types::Array.of(element_serializer.type)
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
sober_swag-0.25.2 lib/sober_swag/serializer/array.rb
sober_swag-0.25.1 lib/sober_swag/serializer/array.rb
sober_swag-0.25.0 lib/sober_swag/serializer/array.rb
sober_swag-0.24.1 lib/sober_swag/serializer/array.rb
sober_swag-0.24.0 lib/sober_swag/serializer/array.rb
sober_swag-0.23.0 lib/sober_swag/serializer/array.rb
sober_swag-0.22.0 lib/sober_swag/serializer/array.rb
sober_swag-0.21.0 lib/sober_swag/serializer/array.rb
sober_swag-0.20.0 lib/sober_swag/serializer/array.rb