Jestem po omówieniu / wyjaśnieniu idealnej struktury projektu dla projektu rubinowego (bez szyn / merb / itp.). Zgaduję, że to wynika
app/
bin/ #Files for command-line execution
lib/
appname.rb
appname/ #Classes and so on
Rakefile #Running tests
README
test,spec,features/ #Whichever means of testing you go for
appname.gemspec #If it's a gem
Czy coś się stało? Jakie części przegapiłem?
ruby
project-structure
dylanfm
źródło
źródło
Odpowiedzi:
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
Oznacza to, że kiedy powiesz,
surfer.rb
w tymrequire "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ł
LolCatz
moduł iLolCatz::Moar
klasę, które wyglądałyby następująco:Dlatego istnieje folder lib / appname, ponieważ większość bibliotek znajduje się w
appname
przestrzeni 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.źródło
lib
opisujesz, jako automatycznego dodawania do ścieżki ładowania. Czy to sprawa 1,9? Czy wymagana jest jakaś specjalna konfiguracja, aby to się stało?bundle gem gem_name
Zobacz poniższy przykład z http://guides.rubygems.org/what-is-a-gem/
źródło
Próbuję naśladować strukturę projektu Railsów, ponieważ mój zespół, który zazwyczaj ma do czynienia z Railsami, zrozumie strukturę lepiej niż inna konfiguracja. Konwencja nad konfiguracją - wykrwawia się z Railsów.
źródło
Jeśli używasz bundlera, uruchomienie tej komendy
bundle gem app_name
da ci taką samą strukturę katalogów.Jeśli chcesz użyć rspec zamiast testów jednostkowych, możesz uruchomić to polecenie
rspec --init
(tylko upewnij się, żecd app_name
najpierw)źródło