Eu acho que é muito bonito no local. Por padrão, Rubygems adicionará o diretório lib ao caminho de carregamento, mas você pode enviar qualquer diretório que desejar para ele usando a variável $: ie
$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')
Isso significa que, quando você disser, surfer.rbnesse diretório, poderá em require "surfer"qualquer lugar e o arquivo será encontrado.
Além disso, como convenção, classes e singletons obtêm um arquivo e módulos obtêm um diretório. Por exemplo, se você tivesse o LolCatzmódulo e a LolCatz::Moarclasse com a seguinte aparência:
lib/
appname.rb
lolcatz/
moar.rb
É por isso que existe uma pasta lib / appname, porque a maioria das bibliotecas está no appnameespaço para nome.
Além disso, se você tentar executar o comando newgem --simple [projectname]que gerará rapidamente um andaime para você, com apenas o essencial para um projeto Ruby (e, por extensão, uma Ruby Gem). Existem outras ferramentas que fazem isso, eu sei, mas o newgem é bastante comum. Normalmente, me livre do arquivo TODO e de todas as coisas de script.