Sha256: b31d97d5dc2818c668f1ebf75a52eb2fb09a4281d3757ae3b3febf6f272afdea

Contents?: true

Size: 744 Bytes

Versions: 5

Compression:

Stored size: 744 Bytes

Contents

module Monolens
  module Type
    class Map
      include Type::ErrorHandling

      def initialize(key_type, value_type)
        @key_type = key_type
        @value_type = value_type
      end

      def self.of(key_type, value_type)
        Map.new(key_type, value_type)
      end

      def dress(value, registry, &block)
        fail!("Map expected, got #{value.class}", &block) unless value.is_a?(::Hash)

        value.each_with_object({}) do |(k,v), memo|
          memo[@key_type.dress(k, registry, &block)] = @value_type.dress(v, registry, &block)
        end
      end

      def ===(instance)
        instance.is_a?(::Hash) && instance.all?{|(k,v)|
          @key_type === k && @value_type === v
        }
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
monolens-0.6.4 lib/monolens/type/map.rb
monolens-0.6.3 lib/monolens/type/map.rb
monolens-0.6.2 lib/monolens/type/map.rb
monolens-0.6.1 lib/monolens/type/map.rb
monolens-0.6.0 lib/monolens/type/map.rb