1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
##
# call-seq:
# obj.clamp(min, max) -> obj
# obj.clamp(range) -> obj
#
# In <code>(min, max)</code> form, returns _min_ if _obj_
# <code><=></code> _min_ is less than zero, _max_ if _obj_
# <code><=></code> _max_ is greater than zero, and _obj_
# otherwise.
#
# 12.clamp(0, 100) #=> 12
# 523.clamp(0, 100) #=> 100
# -3.123.clamp(0, 100) #=> 0
#
# 'd'.clamp('a', 'f') #=> 'd'
# 'z'.clamp('a', 'f') #=> 'f'
#
# In <code>(range)</code> form, returns _range.begin_ if _obj_
# <code><=></code> _range.begin_ is less than zero, _range.end_
# if _obj_ <code><=></code> _range.end_ is greater than zero, and
# _obj_ otherwise.
#
# 12.clamp(0..100) #=> 12
# 523.clamp(0..100) #=> 100
# -3.123.clamp(0..100) #=> 0
#
# 'd'.clamp('a'..'f') #=> 'd'
# 'z'.clamp('a'..'f') #=> 'f'
#
# If _range.begin_ is +nil+, it is considered smaller than _obj_,
# and if _range.end_ is +nil+, it is considered greater than
# _obj_.
#
# -20.clamp(0..) #=> 0
# 523.clamp(..100) #=> 100
#
# When _range.end_ is excluded and not +nil+, an exception is
# raised.
#
# 100.clamp(0...100) # ArgumentError
#
if max.nil?
if min.kind_of?(Range)
max = min.end
if max.nil?
max = self
elsif min.exclude_end?
raise ArgumentError,
end
min = min.begin
if min.nil?
min = self
end
else
raise TypeError,
end
end
c = min <=> max
if c.nil?
raise ArgumentError,
elsif c > 0
raise ArgumentError,
end
c = self <=> min
if c.nil?
raise ArgumentError,
elsif c == 0
return self
elsif c < 0
return min
end
c = self <=> max
if c.nil?
raise ArgumentError,
elsif c > 0
return max
else
return self
end
end
end