Reiniciando una instancia de singleton en Ruby

¿Cómo reinicio un objeto singleton en Ruby? Sé que uno nunca querría hacer esto enreal código pero ¿qué pasa con las pruebas unitarias?

Esto es lo que estoy tratando de hacer en una prueba de RSpec:

describe MySingleton, "#not_initialised" do
  it "raises an exception" do
    expect {MySingleton.get_something}.to raise_error(RuntimeError)
  end
end

Falla porque una de mis pruebas anteriores inicializa el objeto singleton. He intentado seguir el consejo de Ian White deesta enlace que esencialmente mono parches Singleton para proporcionar un método reset_instance pero obtengo una excepción de método indefinido 'reset_instance'.

require 'singleton'

class <<Singleton
  def included_with_reset(klass)
    included_without_reset(klass)
    class <<klass
      def reset_instance
        Singleton.send :__init__, self
        self
      end
    end
  end
  alias_method :included_without_reset, :included
  alias_method :included, :included_with_reset
end

describe MySingleton, "#not_initialised" do
  it "raises an exception" do
    MySingleton.reset_instance
    expect {MySingleton.get_something}.to raise_error(RuntimeError)
  end
end

¿Cuál es la forma más idiomática de hacer esto en Ruby?

Respuestas a la pregunta(3)

Su respuesta a la pregunta