builtins/environment_lookup/coercion_parens.rb

tests/_examples/builtins/environment_lookup/coercion_parens.rb in the metorex repository.

# The environment is looked up by text, so anything that reads as a String
# names a variable or a value.
class Named
  def initialize(text)
    @text = text
  end

  def to_str
    @text
  end
end

ENV["metorex_example"] = "held"
p(ENV.has_key?(Named.new("metorex_example")))
p(ENV.include?(Named.new("metorex_example")))
p(ENV.member?(Named.new("metorex_example")))
p(ENV.key?(Named.new("metorex_example")))
p(ENV.has_value?(Named.new("held")))
p(ENV.value?(Named.new("held")))
p(ENV.key(Named.new("held")))
p(ENV.assoc(Named.new("metorex_example")))
p(ENV.rassoc(Named.new("held")))

# A value that names nothing matches nothing, while a name that names nothing
# is refused.
p(ENV.has_value?(Object.new))
p(ENV.rassoc(Object.new))
begin
  ENV.has_key?(Object.new)
rescue TypeError => problem
  p(problem.message)
end

ENV.delete(Named.new("metorex_example"))
p(ENV["metorex_example"])

Output:

true
true
true
true
true
true
"metorex_example"
["metorex_example", "held"]
["metorex_example", "held"]
nil
nil
"no implicit conversion of Object into String"
nil