Runtime assertions for Ruby literal.fun
ruby
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add type_of and resolve methods to TaggedUnionType

+27 -1
+11 -1
lib/literal/types/tagged_union_type.rb
··· 31 31 end 32 32 33 33 def ===(value) 34 - @members.any? { |_, type| type === value } 34 + @members.each_value.any? { |type| type === value } 35 35 end 36 36 37 37 def [](tag) ··· 40 40 41 41 def tag_for(value) 42 42 @members.each { |tag, type| return tag if type === value } 43 + nil 44 + end 45 + 46 + def type_of(value) 47 + @members.each_value { |type| return type if type === value } 48 + nil 49 + end 50 + 51 + def resolve(value) 52 + @members.each { |tag, type| return tag, type if type === value } 43 53 nil 44 54 end 45 55
+16
test/types/_tagged_union.test.rb
··· 24 24 assert_equal type.tag_for(:other), nil 25 25 end 26 26 27 + test "#type_of" do 28 + type = _TaggedUnion(name: String, age: Integer) 29 + 30 + assert_equal type.type_of("Alice"), String 31 + assert_equal type.type_of(42), Integer 32 + assert_equal type.type_of(:other), nil 33 + end 34 + 35 + test "#resolve" do 36 + type = _TaggedUnion(name: String, age: Integer) 37 + 38 + assert_equal type.resolve("Alice"), [:name, String] 39 + assert_equal type.resolve(42), [:age, Integer] 40 + assert_equal type.resolve(:other), nil 41 + end 42 + 27 43 test "#inspect" do 28 44 type = _TaggedUnion(name: String, age: Integer) 29 45