This is an experiment with Design by Contract programming in Ruby. It's not intended for real-world use, it's just for experimenting with property based testing.
class MyClass
extend Invariance::Methods
# Contract
types [Integer, Integer] => Integer
pre 0, ->(i){i >= 0}
pre 1, ->(i){i >= 0}
post do |result, args|
result >= args.first \
&& result >= args.last
end
# Method
def add(a, b)
a + b
end
end