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.rb
nesse 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 LolCatz
módulo e a LolCatz::Moar
classe 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 appname
espaç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.