oop/remove_class_variable.rb

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

module Vars
  @@shared = :shared
end

class Holder
  @@own = :own
end

copy = Vars.dup
puts copy.send(:remove_class_variable, :@@shared).inspect
puts copy.class_variable_defined?(:@@shared).inspect

puts Holder.send(:remove_class_variable, "@@own").inspect

class Includer
  include Vars
end

[:@@shared, :@shared, :shared, :@@absent].each do |name|
  begin
    Includer.send(:remove_class_variable, name)
    puts "#{name}: removed"
  rescue NameError
    puts "#{name}: NameError"
  end
end

puts Module.private_instance_methods.include?(:remove_class_variable).inspect

def reports_block &block
  block.nil? ? :no_block : :got_block
end

Holder.new { :ignored }
puts reports_block().inspect

Output:

:shared
false
:own
@@shared: NameError
@shared: NameError
shared: NameError
@@absent: NameError
false
:no_block