Chcę stworzyć mały projekt Ruby z 10 ~ 20 klasami / plikami. Potrzebuję perełek i chcę używać RSpec jako struktury testowej.
Mogę później zbudować klejnot, ale to nie jest pewne.
Czy jest jakaś instrukcja lub przewodnik, który pokazuje mi, jak skonfigurować podstawową strukturę mojego projektu?
Pytania, które mam, to:
- Gdzie mogę umieścić wszystkie moje niestandardowe błędy / wyjątki?
- Czy istnieją jakieś konwencje nazywania katalogów, takich jak lib, bin, src itp?
- Gdzie umieścić dane testowe lub dokumenty?
- Gdzie potrzebuję wszystkich moich plików, aby mieć do nich dostęp w moim projekcie?
Wiem, że mógłbym zrobić wszystko od zera, ale chciałbym uzyskać wskazówki. Istnieje kilka dobrych perełek, które mógłbym skopiować, ale nie jestem pewien, czego naprawdę potrzebuję, a co mogę usunąć.
Spojrzałem na http://gembundler.com/ , ale zatrzymuje się po skonfigurowaniu Bundlera.
ruby
project-structure
ayckoster
źródło
źródło
Odpowiedzi:
Na dobry początek możesz użyć
bundle gem
polecenia irspec --init
.lib
spec
spec/fixtures/
lib/my_lib.rb
. Możesz zdefiniować swoje wyjątki również w tym pliku lub w ich własnych plikach - zgodnie z własnymi preferencjami.ext/my_lib
bin
W razie wątpliwości spójrz, jak ułożone są inne klejnoty.
Dalsza informacja:
Powinieneś dodać rspec jako zależność programistyczną w swoim gemspec, aby ułatwić pracę innym programistom
gem.add_development_dependency 'rspec'
igem.add_development_dependency 'rake'
u dołu.Bundler.setup
irequire 'my_lib'
na początku specyfikacji / spec_helper.rb, aby upewnić się, że zależności klejnotów są ładowane po uruchomieniu specyfikacji.require "rspec/core/rake_task"
itask :default => :spec
do swojego Rakefile, aby uruchomienierake
uruchomiło Twoje specyfikacje.Podczas pracy nad najnowszym dziełem guard-rspec może zaoszczędzić czas i kłopotów, automatycznie uruchamiając specyfikacje w miarę zmiany plików, ostrzegając o awariach specyfikacji.
Gdy będziesz zadowolony ze swojego dzieła, przenieś je na github
Następnie, gdy będziesz gotowy, aby wydać swój klejnot na Rubygems.org, biegnij
rake release
, co poprowadzi Cię przez kolejne kroki.Dalsze odniesienia
źródło
-b, [--bin=Generate a binary for your library.]
zbundle gem
.bundle gem <gem-name> -t
do zrobienia odpowiednikarspec --init
wszystkich naraz.Na rubygems.org jest kilka fajnych przewodników , które wprowadzą Cię w konwencje i uzasadnienie niektórych z nich. Ogólnie rzecz biorąc, większość programistów Ruby przestrzega konwencji nazewnictwa i katalogów Rubygems .
Utworzyłbym niestandardowe klasy wyjątków tylko wtedy, gdybym nie był w stanie znaleźć żadnej klasy w bibliotece standardowej, która pasuje do opisu błędu. Zagnieżdż swoją klasę błędów pod klasą lub modułem, który ją podnosi:
Testy jednostkowe przechodzą do
/test
, jeśli używaszTest::Unit
, lub do,/spec
jeśli używaszRSpec
. Polecam to drugie.Bundler
to świetny sposób na zarządzanie ścieżką ładowania. Automatycznie skonfiguruje twoje środowisko tylko z zależnościami określonymi wGemfile
i opcjonalniegemspec
. Umożliwia także łatwe tworzenierequire
kodu bez robienia z niego klejnotu.Ponieważ jednak w przyszłości możesz spakować swój kod w klejnot, zalecam zbadanie sposobu tworzenia specyfikacji klejnotów . Specyfikację należy napisać ręcznie. Nie używaj jakiegoś narzędzia do automagicznego generowania go - moim zdaniem są to podejścia brutalnej siły, które niepotrzebnie duplikują informacje i sieją spustoszenie, gdy są używane z kontrolą źródła.
Stworzyłem klejnot, który może ci się przydać. Biorąc pod uwagę
gemspec
plik, definiuje wiele przydatnychRake
zadań do pracy z twoim klejnotem, w tym zadania związane z budowaniem, instalowaniem i wydawaniem twojego klejnoturubygems
igit
repozytorium z automatycznym oznaczaniem wersji. Zapewnia również łatwy sposób załadowania kodu w sesjiirb
lubpry
.źródło
Oto konwencje, które najczęściej widziałem (zakładając, że nazwa twojego projektu to „foo”):
Wewnątrz lib / konwencja polega zwykle na utworzeniu folderu dla każdej podprzestrzeni nazw wewnątrz przestrzeni nazw najwyższego poziomu. Na przykład klasa Foo :: Bar :: Baz znajduje się zwykle w katalogu /lib/foo/bar/baz.rb.
Niektórzy lubią tworzyć plik /lib/foo/version.rb tylko po to, aby ustawić stałą Foo :: VERSION, ale bardzo często widziałem to zdefiniowane w pliku /lib/foo.rb.
Ponadto, jeśli tworzysz klejnot, będziesz potrzebować następujących plików:
źródło
W Internecie jest kilka poradników na temat struktury projektu Ruby. Poza tym myślę, że najlepszym sposobem rozwiązania tego problemu jest przejście na github i poszukanie jakiegoś słynnego projektu Ruby i sprawdzenie "ich" struktur.
Oprócz ogólnych wymagań dotyczących rubinowych klejnotów, polecam następujące narzędzia dla lepszego przepływu pracy:
package
: zbuduj pakiet klejnotówclean
: wyczyść wygenerowane plikitest
: uruchom testPoza wszystkimi powyższymi narzędziami, ich usługa online dla projektu Ruby:
Możesz nawet generować odznaki przez http://shields.io/ dla swojego projektu open source.
To moje doświadczenie, mam nadzieję, że komuś pomoże.
źródło