Myślę, że to jest trafne. Domyślnie Rubygems doda katalog lib do ścieżki ładowania, ale możesz przesłać do niego dowolny katalog, używając zmiennej $:. to znaczy
$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')
Oznacza to, że kiedy powiesz, surfer.rbw tym require "surfer"katalogu , możesz gdziekolwiek i plik zostanie znaleziony.
Ponadto, zgodnie z konwencją, klasy i singletony otrzymują plik, a moduły otrzymują katalog. Na przykład, gdybyś miał LolCatzmoduł i LolCatz::Moarklasę, które wyglądałyby następująco:
lib/
appname.rb
lolcatz/
moar.rb
Dlatego istnieje folder lib / appname, ponieważ większość bibliotek znajduje się w appnameprzestrzeni nazw.
Dodatkowo, jeśli spróbujesz uruchomić polecenie newgem --simple [projectname], które szybko wygeneruje dla Ciebie rusztowanie, zawierające tylko podstawowe elementy projektu Ruby (a co za tym idzie, Klejnot Ruby). Wiem, że istnieją inne narzędzia, które to robią, ale newgem jest dość powszechny. Zwykle pozbywam się pliku TODO i całego skryptu.