class ReeMapper::Rational
def cast(value)
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
def db_dump(value)
def db_dump(value) serialize(value).to_s end
def db_load(value)
def db_load(value) cast(value) end
def serialize(value)
def serialize(value) if value.is_a?(Rational) value else raise ReeMapper::TypeError.new("should be a rational, got `#{truncate(value.inspect)}`") end end