oop/initialize/default_arity_parens.rb

tests/_examples/oop/initialize/default_arity_parens.rb in the metorex repository.

# The default `initialize` takes no arguments, so handing `new` any is an
# ArgumentError rather than a silent no-op.

class Plain
end

plain = Plain.new
puts(plain.class.to_s)

begin
  Plain.new(1, 2)
rescue ArgumentError => error
  puts(error.message)
end

begin
  BasicObject.new("extra")
rescue ArgumentError => error
  puts(error.message)
end

puts(BasicObject.private_instance_methods(false).include?(:initialize).to_s)

class Accepting
  def initialize(first, second = 2)
    @pair = [first, second]
  end

  attr_reader :pair
end

puts(Accepting.new(1).pair.inspect)
puts(Accepting.new(1, 9).pair.inspect)

begin
  Accepting.new
rescue ArgumentError => error
  puts(error.message)
end

class Variadic
  def initialize(first, *rest)
    @all = [first, *rest]
  end

  attr_reader :all
end

puts(Variadic.new(1, 2, 3).all.inspect)

begin
  Variadic.new
rescue ArgumentError => error
  puts(error.message)
end

adder = lambda { |first, second| first + second }
begin
  adder.call(1)
rescue ArgumentError => error
  puts(error.message)
end

optional = lambda { |first, second = 2| [first, second] }
begin
  optional.call(1, 2, 3)
rescue ArgumentError => error
  puts(error.message)
end

Output:

Plain
wrong number of arguments (given 2, expected 0)
wrong number of arguments (given 1, expected 0)
true
[1, 2]
[1, 9]
wrong number of arguments (given 0, expected 1..2)
[1, 2, 3]
wrong number of arguments (given 0, expected 1+)
wrong number of arguments (given 1, expected 2)
wrong number of arguments (given 3, expected 1..2)