module Commander::UI::AskForClass
def method_missing(method_name, *arguments, &block)
def method_missing(method_name, *arguments, &block) if method_name.to_s =~ /^ask_for_(.*)/ if arguments.count != 1 fail ArgumentError, "wrong number of arguments (given #{arguments.count}, expected 1)" end prompt = arguments.first requested_class = Regexp.last_match[1] # All Classes that respond to #parse # Ignore constants that trigger deprecation warnings available_classes = (Object.constants - DEPRECATED_CONSTANTS).map do |const| Object.const_get(const) end.select do |const| const.class == Class && const.respond_to?(:parse) end klass = available_classes.find { |k| k.to_s.downcase == requested_class } if klass $terminal.ask(prompt, klass) else super end else super end end
def respond_to_missing?(method_name, include_private = false)
def respond_to_missing?(method_name, include_private = false) method_name.to_s.start_with?('ask_for_') || super end