Sha256: 11f57d8db68410d5f4b9c6c1f3a783f1de15eb8b3b9c33a6875b0f58f8ddc710
Contents?: true
Size: 1014 Bytes
Versions: 32
Compression:
Stored size: 1014 Bytes
Contents
# frozen_string_literal: true class ReeMapper::Rational < ReeMapper::AbstractType contract(Any => Rational).throws(ReeMapper::TypeError) def serialize(value) if value.is_a?(Rational) value else raise ReeMapper::TypeError.new("should be a rational, got `#{truncate(value.inspect)}`") end end contract(Any => Rational).throws(ReeMapper::CoercionError, ReeMapper::TypeError) def cast(value) if value.is_a?(Rational) value elsif value.is_a?(String) begin Rational(value) rescue ArgumentError, ZeroDivisionError raise ReeMapper::CoercionError.new("is invalid rational, got `#{truncate(value.inspect)}`") end elsif value.is_a?(Numeric) Rational(value) else raise ReeMapper::TypeError.new("should be a rational, got `#{truncate(value.inspect)}`") end end contract(Any => String) def db_dump(value) serialize(value).to_s end contract(Any => Rational) def db_load(value) cast(value) end end
Version data entries
32 entries across 32 versions & 1 rubygems