module TurboTestRubyRefinements::ModuleName

Constants

ANONYMOUS_CLASS_MATCHER

Public Instance Methods

translated_name() click to toggle source
# File lib/turbo_test_ruby_refinements/module/name.rb, line 54
def translated_name
  return if name.nil?

  name.gsub(TurboTestRubyRefinements::ModuleName::ANONYMOUS_CLASS_MATCHER) do |_match|
    obj = Fiddle::Pointer.new(Integer(Regexp.last_match(2))).to_value
    obj.turbo_test_name
  end
end
turbo_test_name() click to toggle source

Resolves singleton class names to the name of the class

class AClass;end AClass.singleton_class.name

> “#<Class:AClass>”

AClass.turbo_test_name

> “AClass”

anonymous = class << AClass; class SomeClass; self; end; end anonymous.name

> “#<Class:0x00007fd72a1bce30>::SomeClass”

anonymous.turbo_test_name

> “AClass::SomeClass”

# File lib/turbo_test_ruby_refinements/module/name.rb, line 23
def turbo_test_name
  return translated_name unless singleton_class?

  obj = ObjectSpace.each_object(self).first
  case obj
  when Module
    obj.turbo_test_name
  else
    obj.class.turbo_test_name
  end
end
turbo_test_original_class() click to toggle source

Returns either self for a class or the class from which a class is the singleton class

class AClass;end AClass.singleton_class.name

> Class

AClass.singleton_class.turbo_test_original_class

> AClass

# File lib/turbo_test_ruby_refinements/module/name.rb, line 42
def turbo_test_original_class
  return self unless singleton_class?

  obj = ObjectSpace.each_object(self).first
  case obj
  when Module
    obj.turbo_test_original_class
  else
    obj.class.turbo_test_original_class
  end
end