Sha256: d320be5b7968939f6579ee6fda672bfbaf8541f5d212c8b81d264ca63379dd28

Contents?: true

Size: 924 Bytes

Versions: 57

Compression:

Stored size: 924 Bytes

Contents

# frozen_string_literal: true

class Code
  class Type
    class Hash < Type
      attr_reader :hash

      def initialize(hash)
        @hash = hash.transform_keys { |key| Object::String.new(key) }
      end

      def valid?(argument)
        return false unless argument.is_a?(Object::Dictionary)

        argument = argument.raw
        (argument.keys + hash.keys).uniq.all? do |key|
          if hash[key]
            valid_for?(
              expected: hash[key],
              actual: argument[key] || Object::Nothing.new
            )
          else
            false
          end
        end
      end

      def min_arguments
        hash.sum { |_, value| min_arguments_of(value) }
      end

      def max_arguments
        hash.sum { |_, value| max_arguments_of(value) }
      end

      def name
        "{#{hash.map { |key, value| "#{key.inspect} => #{value.name}" }.join(", ")}}"
      end
    end
  end
end

Version data entries

57 entries across 57 versions & 1 rubygems

Version Path
code-ruby-1.2.5 lib/code/type/hash.rb
code-ruby-1.2.4 lib/code/type/hash.rb
code-ruby-1.2.3 lib/code/type/hash.rb
code-ruby-1.2.2 lib/code/type/hash.rb
code-ruby-1.2.1 lib/code/type/hash.rb
code-ruby-1.1.3 lib/code/type/hash.rb
code-ruby-1.1.1 lib/code/type/hash.rb
code-ruby-1.1.0 lib/code/type/hash.rb
code-ruby-1.0.0 lib/code/type/hash.rb
code-ruby-0.15.16 lib/code/type/hash.rb
code-ruby-0.15.15 lib/code/type/hash.rb
code-ruby-0.15.14 lib/code/type/hash.rb
code-ruby-0.15.13 lib/code/type/hash.rb
code-ruby-0.15.12 lib/code/type/hash.rb
code-ruby-0.15.11 lib/code/type/hash.rb
code-ruby-0.15.10 lib/code/type/hash.rb
code-ruby-0.15.9 lib/code/type/hash.rb
code-ruby-0.15.8 lib/code/type/hash.rb
code-ruby-0.15.7 lib/code/type/hash.rb
code-ruby-0.15.6 lib/code/type/hash.rb