$message_mutex = Mutex.new def show_message message $message_mutex.lock puts message $message_mutex.unlock end def error_and_exit text, exit_code = 2 show_message text exit exit_code end def constantize camel_cased_word names = camel_cased_word.split('::') names.shift if names.empty? || names.first.empty? constant = Object names.each do |name| constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name) end constant end def file_name_to_class_name file_name "T_" + file_name.gsub(/^test-/, "").gsub(/\.rb$/, "") end def class_name_to_file_name class_name class_name.gsub(/^T_/, "test-") + ".rb" end class Array def extract_options! last.is_a?(::Hash) ? pop : {} end end class String def md5 Digest::MD5.hexdigest self end end # install md5 handler if $is_macos def md5 name `/sbin/md5 #{name}`.chomp.gsub(/.*=\s*/, "") end else def md5 name `md5sum #{name}`.chomp.gsub(/\s+.*/, "") end end