Определение Browser (или :: Browser, чтобы напрямую ответить на ваш вопрос) не позволит вам звонить на фабрику более одного раза.
Я бы рекомендовал использовать анонимный класс. Нет необходимости в eval, кстати, и вы можете определить метод класса to_s, если хотите:
class BrowserFactory
def self.create_browser(browser)
super_class = case browser
when 'IE'
require 'watir'
Watir::IE
when 'celerity'
require 'celerity'
Celerity::Browser
else
raise StandardError.new("Browser '#{browser}' is not currentlys supported")
end
klass = Class.new(super_class) do
include Singleton
include BrowserModification
def self.to_s
"Modified#{superclass}"
end
end
klass.instance
end
end