Runtime assertions for Ruby
literal.fun
ruby
1# frozen_string_literal: true
2
3UserID = Literal::Value(Integer)
4Age = Literal::Value(Integer, 18..)
5Name = Literal::Value(String) do
6 delegate :length
7end
8
9class Email < Literal::Value(String)
10 delegate :length
11
12 def domain
13 value.split("@").last
14 end
15end
16
17test do
18 user_id = UserID.new(123)
19 assert_equal(123, user_id.to_i)
20
21 assert_raises Literal::TypeError do
22 Age.new(17)
23 end
24
25 name = Name.new("Joel")
26 assert_equal 4, name.length
27end
28
29test "class inheritance" do
30 email = Email.new("joel@drapper.me")
31
32 assert_equal email.domain, "drapper.me"
33 assert_equal email.length, 15
34 assert_equal email.to_s, "joel@drapper.me"
35 assert_equal email.to_str, "joel@drapper.me"
36
37 assert Email === email
38 refute String === email
39end