Saya setelah ikhtisar / klarifikasi struktur proyek ideal untuk proyek ruby (non-rails / merb / etc). Saya menduga ini mengikuti
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
Apakah ada yang salah? Bagian apa yang saya lewatkan?
ruby
project-structure
dylanfm
sumber
sumber
Jawaban:
Saya pikir itu cukup tepat. Secara default, Rubygems akan menambahkan direktori lib ke loadpath, tetapi Anda bisa mendorong direktori mana pun yang Anda inginkan ke sana menggunakan variabel $:. yaitu
Itu berarti ketika Anda telah mengatakan,
surfer.rb
di dir itu, Anda dapat direquire "surfer"
mana saja dan file tersebut akan ditemukan.Juga, sebagai konvensi, kelas dan lajang mendapatkan file dan modul mendapatkan direktori. Misalnya, jika Anda memiliki
LolCatz
modul danLolCatz::Moar
kelas yang akan terlihat seperti:Itulah sebabnya ada folder lib / appname karena sebagian besar perpustakaan ada di
appname
namespace.Selain itu, jika Anda mencoba menjalankan perintah
newgem --simple [projectname]
yang akan dengan cepat menghasilkan perancah untuk Anda hanya dengan esensi telanjang untuk proyek Ruby (dan dengan ekstensi Permata Ruby). Ada alat lain yang melakukan ini, saya tahu, tetapi newgem cukup umum. Saya biasanya menyingkirkan file TODO dan semua hal skrip.sumber
lib
ditambahkan secara otomatis ke loadpath. Apakah ini sesuatu yang 1.9? Adakah konfigurasi khusus yang diperlukan untuk mewujudkannya?bundle gem gem_name
Lihat contoh berikut dari http://guides.rubygems.org/what-is-a-gem/
sumber
Saya berusaha meniru struktur proyek Rails karena tim saya, yang biasanya berurusan dengan Rails, akan memahami struktur lebih baik daripada konfigurasi lain. Convention over Configuration - perdarahan dari Rails.
sumber
Jika Anda menggunakan bundler, menjalankan perintah ini
bundle gem app_name
akan memberi Anda struktur direktori yang sama.Jika Anda ingin menggunakan rspec alih-alih pengujian unit, Anda dapat menjalankan perintah ini
rspec --init
(Pastikan Andacd app_name
terlebih dahulu)sumber