How to check if a class already exists in Ruby
You can use Module.const_get
to get the constant referred to by the string. It will return the constant (generally classes are referenced by constants). You can then check to see if the constant is a class.
I would do something along these lines:
def class_exists?(class_name) klass = Module.const_get(class_name) return klass.is_a?(Class)rescue NameError return falseend
Also, if possible I would always avoid using eval
when accepting user input; I doubt this is going to be used for any serious application, but worth being aware of the security risks.
perhaps you can do it with defined?
eg:
if defined?(MyClassName) == 'constant' && MyClassName.class == Class puts "its a class" end
Note: the Class check is required, for example:
Hello = 1 puts defined?(Hello) == 'constant' # returns true
To answer the original question:
puts "enter the name of the Class to see if it exists"nameofclass=gets.chompeval("defined?(#{nameofclass}) == 'constant' and #{nameofclass}.class == Class")