builtins/kernel_array_parens.rb

tests/_examples/builtins/kernel_array_parens.rb in the metorex repository.

p(Array(nil))
p(Array([1, 2]))
p(Array(3))
p(Array({a: 1}))

class Pair
  def to_ary
    [1, 2]
  end
end

p(Array(Pair.new))

class Listed
  def to_a
    [3, 4]
  end
end

p(Array(Listed.new))

class PrivatePair
  def to_ary
    [5, 6]
  end
  private :to_ary
end

p(Array(PrivatePair.new))

class NilAry
  def to_ary
    nil
  end

  def to_a
    [7, 8]
  end
end

p(Array(NilAry.new))

class BadAry
  def to_ary
    "not an array"
  end
end

begin
  Array(BadAry.new)
rescue TypeError => error
  puts(error.message)
end

class BadToA
  def to_a
    "not an array"
  end
end

begin
  Array(BadToA.new)
rescue TypeError => error
  puts(error.message)
end

puts(Kernel.private_instance_methods.include?(:Array))

Output:

[]
[1, 2]
[3]
[[:a, 1]]
[1, 2]
[3, 4]
[5, 6]
[7, 8]
can't convert BadAry to Array (BadAry#to_ary gives String)
can't convert BadToA to Array (BadToA#to_a gives String)
true