oop/class_variable_home_no_parens.rb

tests/_examples/oop/class_variable_home_no_parens.rb in the metorex repository.

module Shared
  @@count = :module

  def count
    @@count
  end

  def count=(value)
    @@count = value
  end
end

class Parent
  @@held = :parent

  def held
    @@held
  end

  def held=(value)
    @@held = value
  end
end

class Child < Parent; end

class Holder
  extend Shared
end

puts Holder.count.to_s
Holder.count = :written
puts Holder.count.to_s

Child.new.held = :from_child
puts Parent.new.held.to_s

parent = Class.new
subclass = Class.new(parent)
subclass.class_variable_set(:@@shared, :subclass)
parent.class_variable_set(:@@shared, :parent)
begin
  subclass.class_variable_get(:@@shared)
rescue RuntimeError => error
  puts error.message.include?("is overtaken by").to_s
end

begin
  eval "@@nowhere"
rescue RuntimeError => error
  puts error.message
end

Output:

module
written
from_child
true
class variable access from toplevel