Я думаю, что это очень точно. По умолчанию Rubygems добавит каталог lib в путь загрузки, но вы можете вставить в него любой каталог, используя переменную $:. т.е.
$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')
Это означает, что когда вы скажете, surfer.rbв require "surfer"этом каталоге , вы можете где угодно, и файл будет найден.
Кроме того, по соглашению классы и синглтоны получают файл, а модули - каталог. Например, если бы у вас были LolCatzмодуль и LolCatz::Moarкласс, которые выглядели бы так:
lib/
appname.rb
lolcatz/
moar.rb
Вот почему существует папка lib / appname, потому что большинство библиотек находятся в appnameпространстве имен.
Вдобавок, если вы попытаетесь запустить команду, newgem --simple [projectname]которая быстро сгенерирует для вас каркас, содержащий только самое необходимое для проекта Ruby (и, как следствие, Ruby Gem). Я знаю, что есть и другие инструменты, которые делают это, но newgem довольно распространен. Обычно я избавляюсь от файла TODO и всего остального скрипта.