Skip to content

Instantly share code, notes, and snippets.

@tobynet
Created July 30, 2010 02:01
Show Gist options
  • Save tobynet/499720 to your computer and use it in GitHub Desktop.
Save tobynet/499720 to your computer and use it in GitHub Desktop.
#!ruby
module Kernel
def if_true(bool, &block)
if bool
block.call
return true
else
return false
end
end
def if_false(bool, &block)
return if_true(!bool, &block)
end
end
class TrueClass
def else
return self
end
end
class FalseClass
def else
yield
return nil
end
end
if __FILE__ == $0
TEST_EXAMPLES = [true, false, nil, "Matz", 1234, 12.00]
TEST_EXAMPLES.each.each do |x|
print "#{x.class} #{x.inspect}: "
print "if_true() == "
if_true(x){ print "true" }.else{ print "false" }
print ", if_false() == "
if_false(x){ print "false" }.else{ print "true" }
print ", if == "
if x then print "true" else print "false" end
puts
end
puts
require 'test/unit'
class ExtIfTest < Test::Unit::TestCase
TEST_EXAMPLES.each do |x|
define_method "test_if_true_with_#{x}" do
result = nil; if_true(x){ result = true }.else{ result = false }
assert(result == (x ? true : false))
end
define_method "test_if_false_with_#{x}" do
result = nil; if_false(x){ result = false }.else{ result = true }
assert(result == (x ? true : false))
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment