strings/coercion_and_padding_no_parens.rb

tests/_examples/strings/coercion_and_padding_no_parens.rb in the metorex repository.

# String#+, #ljust, and #rjust read anything that spells itself as text
# through #to_str, and the padded result carries whichever encoding holds
# both the receiver and the pattern.
class Spelled
  def to_str
    "-spelled"
  end
end

p "held" + Spelled.new
p "ab".ljust(6, Spelled.new)
p "ab".rjust(6, Spelled.new)

begin
  "held" + 42
rescue TypeError => refused
p refused.message
end

begin
  "ab".ljust(6, "")
rescue ArgumentError => refused
p refused.message
end

p "ab".ljust(4.7)
p "abc".ljust(5, "x").encoding

# Array#* joins with a separator the argument names, and repeats when it
# names a count instead.
p [1, 2, 3] * ", "
p [1, 2] * 3
p [1, [2, 3]].join(":")

begin
  [1, 2] * Object.new
rescue TypeError => refused
p refused.message
end

Output:

"held-spelled"
"ab-spe"
"-speab"
"no implicit conversion of Integer into String"
"zero width padding"
"ab  "
#<Encoding:UTF-8>
"1, 2, 3"
[1, 2, 1, 2, 1, 2]
"1:2:3"
"no implicit conversion of Object into Integer"