Sha256: 35d68c6546d1dc742c71c5bbbe0d2f54d40a249689817f7291ad3c3f953f98fa

Contents?: true

Size: 805 Bytes

Versions: 2

Compression:

Stored size: 805 Bytes

Contents

# frozen_string_literal: true

module Jimmy
  module Declaration
    private

    CASTS = {
      TrueClass  => ->(s, _) { s },
      FalseClass => ->(s, _) { s.nothing },
      Regexp     => ->(s, v) { s.pattern v },
      Range      => ->(s, v) { s.range v }
    }.freeze

    CASTABLE_CLASSES = CASTS.keys.freeze

    # Cast the given value to a usable schema.
    # @param [Object] value
    # @return [Jimmy::Schema]
    def cast_schema(value)
      case value
      when *CASTABLE_CLASSES then apply_cast(Schema.new, value)
      when Schema then value
      else
        assert { "Expected #{value.class} to be a schema" }
      end
    end

    def apply_cast(schema, value)
      CASTS.each do |klass, proc|
        return proc.call schema, value if value.is_a? klass
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jimmy-2.1.0 lib/jimmy/declaration/casting.rb
jimmy-2.0.3 lib/jimmy/declaration/casting.rb