@@ -6,59 +6,104 @@ class User
6
6
7
7
attr_reader :town , :blk
8
8
9
- sig String , Integer , town : String
9
+ sig ( Integer ) { Integer }
10
+ attr_writer :age
11
+
12
+ sig String , town : String
10
13
def initialize ( name , age = nil , town : nil , &block )
11
14
@name = name
12
15
@age = age
13
16
@town = town
14
17
@blk = block
15
18
end
16
19
17
- sig returns : String
20
+ sig ( String , age : Integer ) { Integer }
21
+ def with_block_return ( name , age :) = 1 # rubocop:disable Lint/UnusedMethodArgument
22
+
23
+ sig ( String , age : Integer ) { Integer }
24
+ def with_incorrect_block_return = 'hello'
25
+
26
+ sig [ String , age : Integer ] => Integer
27
+ def with_incorrect_hash_return = 'hello'
28
+
29
+ sig [ String , age : Integer ] => Integer
30
+ def with_hash_return ( name , age :) = 1 # rubocop:disable Lint/UnusedMethodArgument
31
+
32
+ sig [ ] => String
18
33
def to_s = "#{ @name } , #{ @age } "
19
34
20
- sig returns : Integer
35
+ sig { Integer }
21
36
def age = @age . to_s
22
37
23
- sig Integer , returns : Integer
24
- attr_writer :age
38
+ sig ( String , _age : Integer ) { Array }
39
+ def self . where ( _name , _age : nil ) = [ ]
40
+
41
+ sig [ String ] => Array
42
+ def self . find_by_name ( name ) = User . new ( name )
43
+ end
25
44
26
- sig String , _age : Integer , returns : Array
27
- def self . where ( _name , _age : nil )
28
- [ ]
45
+ with 'return type with hash' do
46
+ it 'succeeds' do
47
+ user = User . new ( 'Joel' )
48
+ expect ( user . with_hash_return ( 'Joel' , age : 47 ) ) . to be == 1
29
49
end
30
50
31
- sig String , returns : Array
32
- def self . find_by_name ( name )
33
- User . new ( name )
51
+ it 'raises on incorrect types' do
52
+ user = User . new ( 'Joel' )
53
+ expect { user . with_hash_return } . to raise_exception NoMatchingPatternError
54
+ end
55
+
56
+ it 'raises on incorrect return type' do
57
+ user = User . new ( 'Joel' )
58
+ expect { user . with_incorrect_hash_return } . to raise_exception NoMatchingPatternError
34
59
end
35
60
end
36
61
37
- it 'supports positional args' do
38
- user = User . new ( 'Joel' , 47 )
39
- expect ( user . to_s ) . to be == 'Joel, 47'
62
+ with 'return type as block' do
63
+ it 'succeeds' do
64
+ user = User . new ( 'Joel' )
65
+ expect ( user . with_block_return ( 'Joel' , age : 47 ) ) . to be == 1
66
+ end
67
+
68
+ it 'raises on incorrect types' do
69
+ user = User . new ( 'Joel' )
70
+ expect { user . with_block_return } . to raise_exception NoMatchingPatternError
71
+ end
72
+
73
+ it 'raises on incorrect return type' do
74
+ user = User . new ( 'Joel' )
75
+ expect { user . with_incorrect_block_return } . to raise_exception NoMatchingPatternError
76
+ end
40
77
end
41
78
42
- # it 'supports optional positional args'
79
+ it 'raises on mix of returns' do
80
+ extend Delivered ::Signature
43
81
44
- it 'supports block' do
45
- user = User . new ( 'Joel' , 47 ) { 'Hello' }
46
- expect ( user . blk . call ) . to be == 'Hello'
82
+ expect do
83
+ sig ( [ ] => Integer ) { Integer }
84
+ end . to raise_exception ( ArgumentError , message : be =~ /Cannot mix/ )
47
85
end
48
86
49
- it 'checks return type ' do
87
+ it 'supports positional args ' do
50
88
user = User . new ( 'Joel' , 47 )
51
89
expect ( user . to_s ) . to be == 'Joel, 47'
52
90
end
53
91
54
- it 'raises on incorrect return type ' do
55
- user = User . new ( 'Joel' , 47 )
56
- expect { user . age } . to raise_exception NoMatchingPatternError
92
+ it 'supports block ' do
93
+ user = User . new ( 'Joel' , 47 ) { 'Hello' }
94
+ expect ( user . blk . call ) . to be == 'Hello'
57
95
end
58
96
59
- it 'checks return type with args' do
60
- user = User . new ( 'Joel' , 47 )
61
- expect ( user . age = 48 ) . to be == 48
97
+ with 'attr_writer' do
98
+ it 'succeeds' do
99
+ user = User . new ( 'Joel' )
100
+ expect ( user . age = 47 ) . to be == 47
101
+ end
102
+
103
+ it 'raise on incorrect type' do
104
+ user = User . new ( 'Joel' , 47 )
105
+ expect { user . age = '47' } . to raise_exception NoMatchingPatternError
106
+ end
62
107
end
63
108
64
109
it 'raises on missing args' do
0 commit comments