A DSL for method overloading in Ruby based on pattern matching