Sha256: 95247663a4c2dd9c89ce8e2832e652d914719d73316531527774514fadba0c05

Contents?: true

Size: 1.04 KB

Versions: 7

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module Dry
  module Types
    # Storage for meta-data
    #
    # @api public
    module Meta
      def initialize(*args, meta: EMPTY_HASH, **options)
        super(*args, **options)
        @meta = meta.freeze
      end

      # @param options [Hash] new_options
      #
      # @return [Type]
      #
      # @api public
      def with(**options)
        super(meta: @meta, **options)
      end

      # @overload meta
      #   @return [Hash] metadata associated with type
      #
      # @overload meta(data)
      #   @param [Hash] new metadata to merge into existing metadata
      #   @return [Type] new type with added metadata
      #
      # @api public
      def meta(data = Undefined)
        if Undefined.equal?(data)
          @meta
        elsif data.empty?
          self
        else
          with(meta: @meta.merge(data))
        end
      end

      # Resets meta
      #
      # @return [Dry::Types::Type]
      #
      # @api public
      def pristine
        with(meta: EMPTY_HASH)
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
dry-types-1.7.2 lib/dry/types/meta.rb
dry-types-1.7.1 lib/dry/types/meta.rb
dry-types-1.7.0 lib/dry/types/meta.rb
dry-types-1.6.1 lib/dry/types/meta.rb
dry-types-1.6.0 lib/dry/types/meta.rb
dry-types-1.5.1 lib/dry/types/meta.rb
dry-types-1.5.0 lib/dry/types/meta.rb