Commit f83fcb0 1 parent 3a13562 commit f83fcb0 Copy full SHA for f83fcb0
File tree 3 files changed +43
-0
lines changed
3 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -92,6 +92,15 @@ sig name: T.RespondTo(:to_s)
92
92
def create (name: ); end
93
93
` ` `
94
94
95
+ #### ` RangeOf `
96
+
97
+ Value **MUST** be a Range of the given type
98
+
99
+ ` ` ` ruby
100
+ sig name: T .RangeOf (Integer )
101
+ def create (name: 1 ...2 ); end
102
+ ` ` `
103
+
95
104
#### ` Any `
96
105
97
106
Value **MUST** be any of the given list of values, that is, the value must be one of the given list.
Original file line number Diff line number Diff line change @@ -13,6 +13,21 @@ def ===(value)
13
13
end
14
14
end
15
15
16
+ class RangeOfType
17
+ def initialize ( type )
18
+ @type = type
19
+ end
20
+
21
+ def inspect = "Range(#{ @type &.inspect } )"
22
+
23
+ def ===( value )
24
+ Range === value && (
25
+ ( @type === value . begin && ( nil === value . end || @type === value . end ) ) ||
26
+ ( @type === value . end && nil === value . begin )
27
+ )
28
+ end
29
+ end
30
+
16
31
class RespondToType
17
32
def initialize ( *methods )
18
33
@methods = methods
@@ -53,6 +68,7 @@ module Types
53
68
module_function
54
69
55
70
def Nilable ( type = nil ) = NilableType . new ( type )
71
+ def RangeOf ( type = nil ) = RangeOfType . new ( type )
56
72
def RespondTo ( *methods ) = RespondToType . new ( *methods )
57
73
def Any ( *types ) = AnyType . new ( *types )
58
74
def Boolean = BooleanType . new
Original file line number Diff line number Diff line change 43
43
end
44
44
end
45
45
46
+ describe 'RangeOf' do
47
+ it 'should be a Range of given type' do
48
+ assert T . RangeOf ( Integer ) === ( 1 ..2 )
49
+ assert T . RangeOf ( Integer ) === ( ..2 )
50
+ assert T . RangeOf ( Integer ) === ( 1 ..)
51
+ end
52
+
53
+ it 'raises when not a Range' do
54
+ expect { 1 => ^( T . RangeOf ( Integer ) ) } . to raise_exception NoMatchingPatternError
55
+ end
56
+
57
+ it 'raises when not a Range of given type' do
58
+ expect { 1 ..2 => ^( T . RangeOf ( String ) ) } . to raise_exception NoMatchingPatternError
59
+ expect { 1 .. => ^( T . RangeOf ( String ) ) } . to raise_exception NoMatchingPatternError
60
+ expect { ..2 => ^( T . RangeOf ( String ) ) } . to raise_exception NoMatchingPatternError
61
+ end
62
+ end
63
+
46
64
describe 'Boolean' do
47
65
it 'should be true or false' do
48
66
assert T . Boolean === true
You can’t perform that action at this time.
0 commit comments