Sha256: 0c2a718726a270e25c5bce6c96340a69228abfaefcddcaa8ba32d982d275b52a

Contents?: true

Size: 990 Bytes

Versions: 1

Compression:

Stored size: 990 Bytes

Contents

module SoberSwag
  module Serializer
    ##
    # Provides metadata on a serializer.
    # All actions delegate to the base.
    class Meta < Base
      def initialize(base, meta)
        @base = base
        @metadata = meta
        @identifier = @base.identifier
      end

      attr_reader :base, :metadata

      def serialize(args, opts = {})
        base.serialize(args, opts)
      end

      def meta(hash)
        self.class.new(base, metadata.merge(hash))
      end

      ##
      # Delegates to `base`, adds metadata, pumbs identifiers
      def lazy_type
        @base.lazy_type.meta(**metadata).tap { |t| t.identifier(@base.identifier) }
      end

      ##
      # Delegates to `base`, adds metadata, plumbs identifiers
      def type
        @base.type.meta(**metadata).tap { |t| t.identifier(@base.identifier) }
      end

      def finalize_lazy_type!
        @base.finalize_lazy_type!
      end

      def lazy_type?
        @base.lazy_type?
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sober_swag-0.11.0 lib/sober_swag/serializer/meta.rb