Skip to content

Instantly share code, notes, and snippets.

@pboling
Created April 3, 2015 00:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pboling/e0582a1f28cb7cb22b31 to your computer and use it in GitHub Desktop.
Save pboling/e0582a1f28cb7cb22b31 to your computer and use it in GitHub Desktop.
TrueClass & FalseClass => Boolean Comparable hack
module Boolean
include Comparable
# true > false
def <=>(other)
raise ArgumentError, "Do not know how to compare #{other.class} with TrueClass and FalseClass" unless [TrueClass, FalseClass].include?(other.class)
other ? (self ? 0 : -1) : (self ? 1 : 0)
end
end
TrueClass.send(:include, Boolean)
FalseClass.send(:include, Boolean)
# [1] pry(main)> true < false
# => false
# [2] pry(main)> true > false
# => true
# [3] pry(main)> true > true
# => false
# [4] pry(main)> true == true
# => true
# [5] pry(main)> false == false
# => true
# [6] pry(main)> false > false
# => false
# [7] pry(main)> false < false
# => false
# [8] pry(main)> false < true
# => true
# [9] pry(main)> true.is_a?(Boolean)
# => true
# [10] pry(main)> false.is_a?(Boolean)
# => true
# [11] pry(main)> [true, false, false, true].sort
# => [false, false, true, true]
# [12] pry(main)> [true, false, false, true].sort.reverse
# => [true, true, false, false]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment