Module: Comparable
- Included in:
- Tuple
- Defined in:
- lib/core/facets/comparable/cap.rb,
lib/core/facets/comparable/cmp.rb,
lib/core/facets/comparable/clip.rb,
lib/core/facets/comparable/op_get.rb
Class Method Summary collapse
-
.[](*accessors) ⇒ Object
Automatically generate comparitive definitions based on attribute fields.
Instance Method Summary collapse
-
#at_least(lower) ⇒ Object
Returns the lower of self or x.
-
#at_most(upper) ⇒ Object
(also: #cap)
Returns the greater of self or x.
-
#clip(lower, upper = nil) ⇒ Object
(also: #bound)
Returns self if above the given lower bound, or within the given lower and upper bounds, otherwise returns the the bound of which the value falls outside.
-
#cmp(o) ⇒ Object
Alternate name for comparison operator #<=>.
Class Method Details
.[](*accessors) ⇒ Object
Automatically generate comparitive definitions based on attribute fields.
include Comparable[:a, :b]
is equivalent to including a module containing:
def <=>(other)
cmp = self.a <=> other.a; return cmp unless cmp == 0
cmp = self.b <=> other.b; return cmp unless cmp == 0
0
end
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/core/facets/comparable/op_get.rb', line 16 def self.[](*accessors) Module.new do include Comparable define_method(:comparability){ accessors } define_method(:<=>) do |other| comparability.each do |a| cmp = (send(a) <=> other.send(a)) break cmp unless cmp == 0 end end end end |
Instance Method Details
#at_least(lower) ⇒ Object
Returns the lower of self or x.
4.at_least(5) #=> 5
6.at_least(5) #=> 6
CREDIT: Florian Gross
10 11 12 |
# File 'lib/core/facets/comparable/cap.rb', line 10 def at_least(lower) (self >= lower) ? self : lower end |
#at_most(upper) ⇒ Object Also known as: cap
Returns the greater of self or x.
4.at_most(5) #=> 4
6.at_most(5) #=> 5
CREDIT: Florian Gross
21 22 23 |
# File 'lib/core/facets/comparable/cap.rb', line 21 def at_most(upper) (self <= upper) ? self : upper end |
#clip(lower, upper = nil) ⇒ Object Also known as: bound
Returns self if above the given lower bound, or within the given lower and upper bounds, otherwise returns the the bound of which the value falls outside.
4.clip(3) #=> 4
4.clip(5) #=> 5
4.clip(2,7) #=> 4
9.clip(2,7) #=> 7
1.clip(2,7) #=> 2
CREDIT Florian Gross, Trans
16 17 18 19 20 21 |
# File 'lib/core/facets/comparable/clip.rb', line 16 def clip(lower, upper=nil) return lower if self < lower return self unless upper return upper if self > upper return self end |
#cmp(o) ⇒ Object
Alternate name for comparison operator #<=>.
3.cmp(1) #=> 1
3.cmp(3) #=> 0
3.cmp(10) #=> -1
This fundamental compare method is used to keep comparison compatible with #succ
.
CREDIT: Peter Vanbroekhoven
14 15 16 |
# File 'lib/core/facets/comparable/cmp.rb', line 14 def cmp(o) self<=>o end |