Overloader

Overload for Ruby

DO NOT USE THIS LIBRARY FOR PRODUCTION

Installation

Add this line to your application's Gemfile:

gem 'overloader'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install overloader

Usage

require 'overloader'

class A
  extend Overloader
  overload do
    def foo() "no args" end
    def foo(x) "one arg" end
    def foo(x, y) "two args" end
  end
end

a = A.new
p a.foo # => "no args"
p a.foo(1) # => "one args"
p a.foo(1, 2) # => "two args"

Advanced Usage: types

You can define overload with types.

This feature requires the following things.

  • Ruby 2.7 or greater
  • ruby-signature gem
    • This gem has not been published to RubyGems.org. So you need to install it manually.

First, add require 'overloader/type'. Then, define the method type with RBS syntax. https://github.com/ruby/ruby-signature

require 'overloader'
require 'overloader/type'

class A
  extend Overloader
  overload do
    # (String, Integer) -> untyped
    def foo(x, y) 'str int' end

    # (Integer, String) -> untyped
    def foo(x, y) 'int str' end

    # (Symbol, Symbol) -> untyped
    def foo(x, y) 'sym sym' end
  end
end

a = A.new
p a.foo('bar', 42) # => "str int"
p a.foo(42, 'baz') # => "int str"
p a.foo(:a, :b)    # => "sym sym"
p a.foo(:a, 42)    # => ArgumentError

Development

After checking out the repo, run bin/setup to install dependencies. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/pocke/overloader.