a microgem to add a micro type system to ruby
Adding just a bit of typing to ruby is just great. It makes you, as a programmer
have more control of what gets passed to your classes, methods or functions
and you know what your functions (and methods) returns.
And crash earlier. ( thx "the pragmatic programmer" )
Check out what Matz says
Why name it MonkeyType?
Well. The gem is just a elegant monkeyPatch of Object and Class classes.
And it does types.
gem install monkey_type
well. I tried to simplify the usage as hard as i can.
There is just two new things to learn. the method #is and the class macro contract.
the method is used like this:
(remember to you need both 'require' and 'using' lines!)
require 'monkey_type' using MonkeyType def accepts_only_nums(num) num.is Numeric #things here end
the method #is will raise an exception in the form of:
error: String is not an Numeric (TypeError)
accepts_only_nums is called and num isn't numeric or something like numeric.
Remember, we are duck typing here.
Simple isn't it?
require 'monkey_type' using MonkeyType class Returner def return1 1 end def return2  end contract :return1, Numeric contract :return2, Array end
Remember to call contract after defining the methods.
calling this contract will invoke metaprogramming deities and will ensure that the method will return something like a Numeric in case of return1 and a Array in case of return2. Also, you can call the functions on a typeless manner, just add "_typeless" to the end of the name of the method (like return1_typeless).
I have also included some types for your commodity. if you want to check if something is a Numeric or nil use option(Numeric) (you can change Numeric for Hash or even for you own class names) if you want to check if something is true or false use boolean
def i_accept_nil_or_array(t) t.is option(Array) end class Booled def i_return_true_or_false #boolean logic end contract :i_return_true_or_false, boolean end
that is all.
Running in irb
The interactive ruby interpreter
irb is unable to handle
using modules in the method
required by monkey_type. This is a known limitation. See Stack Overflow for more details.
If you want to help focus on the method is_duck? and how to make easier to add
new "types" as Boolean or Option.
Or, make better error messages.
Just send Pull Requests.