Bagaimana cara menyiapkan proyek Ruby dasar?

103

Saya ingin membuat proyek Ruby kecil dengan 10 ~ 20 kelas / file. Saya membutuhkan beberapa permata dan saya ingin menggunakan RSpec sebagai kerangka kerja pengujian.

Saya mungkin ingin membangun permata nanti, tapi itu belum pasti.

Adakah panduan atau petunjuk yang menunjukkan kepada saya bagaimana mengatur struktur dasar proyek saya?

Pertanyaan yang saya miliki adalah:

  • Di mana saya meletakkan semua Kesalahan / Pengecualian kustom saya?
  • Apakah ada beberapa konvensi di luar sana untuk penamaan direktori seperti lib, bin, src dll?
  • Di mana saya meletakkan data atau dokumen uji?
  • Di mana saya memerlukan semua file saya agar saya memiliki akses ke file tersebut dalam proyek saya?

Saya tahu saya bisa melakukan semuanya dari awal, tapi saya butuh bimbingan. Ada beberapa permata bagus di luar sana yang dapat saya salin, tetapi saya tidak yakin apa yang benar-benar saya butuhkan dan apa yang dapat saya hapus.

Saya melihat http://gembundler.com/ , tetapi berhenti setelah menyiapkan Bundler.

ayckoster
sumber

Jawaban:

156

Untuk memulai dengan baik, Anda dapat menggunakan bundle gemperintah dan rspec --init.

~/code $ bundle gem my_lib
      create  my_lib/Gemfile
      create  my_lib/Rakefile
      create  my_lib/LICENSE.txt
      create  my_lib/README.md
      create  my_lib/.gitignore
      create  my_lib/my_lib.gemspec
      create  my_lib/lib/my_lib.rb
      create  my_lib/lib/my_lib/version.rb
Initializating git repo in /Users/john/code/my_lib
~/code $ cd my_lib/
~/code/my_lib $ git commit -m "Empty project"
~/code/my_lib $ rspec --init
The --configure option no longer needs any arguments, so true was ignored.
  create   spec/spec_helper.rb
  create   .rspec
  • kode masuk lib
  • spesifikasi masuk spec
  • data uji atau dokumen masuk spec/fixtures/
  • Wajibkan semua file ruby ​​Anda dalam lib/my_lib.rb. Anda juga dapat menentukan pengecualian di file itu, atau di filenya sendiri - sesuai dengan preferensi Anda.
  • File sumber C masuk ext/my_lib
  • skrip shell dan file yang dapat dieksekusi masuk bin

Jika ragu, lihat saja bagaimana permata lainnya ditata.


Informasi lebih lanjut:

Anda harus menambahkan rspec sebagai dependensi pengembangan di gemspec Anda untuk mempermudah pengembang lain

  1. Edit my_lib.gemspec, tambahkan gem.add_development_dependency 'rspec'dan gem.add_development_dependency 'rake'dekat bagian bawah.
  2. Tambahkan Bundler.setupdan require 'my_lib'ke bagian atas spec / spec_helper.rb untuk memastikan dependensi gem Anda dimuat saat Anda menjalankan spesifikasi Anda.
  3. Tambahkan require "rspec/core/rake_task"dan task :default => :specke Rakefile Anda, sehingga rakemenjalankan spesifikasi Anda.

Saat Anda mengerjakan kreasi terbaru Anda, guard-rspec dapat menghemat waktu dan kerumitan Anda dengan menjalankan spesifikasi Anda secara otomatis saat file berubah, mengingatkan Anda akan kegagalan spesifikasi.

~/code/my_lib $ git add spec/spec_helper.rb
~/code/my_lib $ git commit -am "Add RSpec"
~/code/my_lib $ vim my_lib.gemspec # add guard development dependency
~/code/my_lib $ bundle
~/code/my_lib $ bundle exec guard init
~/code/my_lib $ vim Guardfile # Remove the sections below the top one
~/code/my_lib $ git add Guardfile
~/code/my_lib $ git commit -am "Add Guard"

Setelah Anda puas dengan kreasi Anda, dorong ke github

# create a github repository for your gem, then push it up
~/code/my_lib $ curl -u myusername https://api.github.com/user/repos -d '{"name":"my_lib"}' 
~/code/my_lib $ git remote add origin git@github.com:myusername/my_lib.git
~/code/my_lib $ git push

Kemudian, ketika Anda siap untuk merilis permata Anda di Rubygems.org, jalankan rake release, yang akan memandu Anda melalui langkah-langkahnya.

~/code/my_lib $ rake release

Referensi Lebih Lanjut

John Douthat
sumber
1
bisa Anda gunakan -b, [--bin=Generate a binary for your library.]dengan bundle gem.
Selman Ulug
Anda juga dapat menggunakan bundle gem <gem-name> -tuntuk melakukan hal yang sama rspec --initsekaligus.
pioto
1
Bagaimana cara menjalankan proyek ruby. Saya telah membangun proyek ruby ​​berbasis konsol untuk jadwal guru siswa. Tidak yakin bagaimana cara menjalankannya ??
rAzOr
11

Ada beberapa panduan bagus di rubygems.org yang akan memperkenalkan Anda pada konvensi dan alasan di balik beberapa di antaranya. Secara umum, penamaan Rubygems dan konvensi direktori diikuti oleh sebagian besar pengembang Ruby.

Saya hanya akan membuat kelas pengecualian khusus jika saya tidak dapat menemukan kelas apa pun di perpustakaan standar yang sesuai dengan deskripsi kesalahan. Tempatkan kelas kesalahan Anda di bawah kelas atau modul yang memunculkannya:

class Parser::Error < RuntimeError; end

begin
  Parser.new(:invalid).parse!
rescue Parser::Error => e
  puts e.message
end

Tes unit masuk ke /test, jika Anda menggunakan Test::Unit, atau ke /specjika Anda menggunakan RSpec. Saya merekomendasikan yang terakhir.

Bundleradalah cara terbaik untuk mengelola jalur pemuatan Anda. Ini akan secara otomatis mengatur lingkungan Anda dengan hanya ketergantungan yang ditentukan pada Gemfiledan secara opsional gemspec. Ini juga memungkinkan Anda untuk dengan mudah requirekode Anda tanpa menjadikannya permata.

Namun, karena Anda mungkin membundel kode Anda dalam permata di masa mendatang, saya sarankan untuk menyelidiki cara membuat spesifikasi permata . Anda harus menulis spesifikasi Anda secara manual. Jangan gunakan beberapa alat untuk menghasilkannya secara otomatis - menurut pendapat saya, pendekatan brute force yang menduplikasi informasi secara tidak perlu dan mendatangkan malapetaka saat digunakan dengan kontrol sumber.

Saya membuat permata yang mungkin berguna bagi Anda. Diberikan sebuah gemspecfile, itu mendefinisikan banyak Raketugas berguna untuk bekerja dengan permata Anda, yang mencakup tugas untuk membangun, menginstal dan melepaskan permata Anda ke rubygemsdan gitrepositori dengan penandaan versi otomatis. Ini juga menyediakan cara mudah untuk memuat kode Anda dalam sesi irbatau pry.

# Rakefile
require 'rookie'

# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
Matheus Moreira
sumber
6

Berikut adalah konvensi yang paling sering saya lihat (dengan asumsi nama proyek Anda adalah "foo"):

  • /lib/foo.rb - Mendefinisikan namespace tingkat atas dari proyek dan versinya; membutuhkan file yang dibutuhkan.
  • / lib / foo / - Berisi semua kelas untuk proyek Anda, termasuk kelas yang berhubungan dengan kesalahan.
  • / test / - Berisi tes untuk proyek Anda.
  • / spec / - Berisi spesifikasi untuk proyek Anda.
  • / bin / - Jika proyek Anda bergantung pada binari (file JAR, dll.), mereka biasanya masuk ke sana.

Di dalam lib /, konvensi biasanya adalah membuat folder untuk setiap sub-namespace di dalam namespace tingkat atas Anda. Misalnya, kelas Foo :: Bar :: Baz biasanya ditemukan di bawah /lib/foo/bar/baz.rb.

Beberapa orang suka membuat file /lib/foo/version.rb hanya untuk menyetel konstanta Foo :: VERSION, tetapi sangat sering saya melihat ini didefinisikan di file /lib/foo.rb.

Selain itu, jika Anda membuat permata, Anda memerlukan file berikut:

  • / Rakefile - Mendefinisikan tugas rake (seperti tugas untuk menguji, membangun dan mendorong gem).
  • / Gemfile - Mendefinisikan sumber permata (di antara kemungkinan lainnya).
  • /foo.gemspec - Menjelaskan permata Anda dan memberikan daftar dependensi.
pengguna2398029
sumber
5

Ada beberapa panduan di internet tentang cara menyusun proyek Ruby. Selain itu, menurut saya cara terbaik untuk mengatasi ini adalah menuju github dan mencari beberapa proyek Ruby yang terkenal, dan memeriksa struktur "mereka".

Selain persyaratan permata ruby ​​umum, saya merekomendasikan alat berikut untuk alur kerja yang lebih baik:

  • editorconfig , membantu pengembang mendefinisikan dan memelihara gaya pengkodean yang konsisten antara editor dan IDE yang berbeda.
  • rubocop , penganalisis kode statis untuk ruby, defac ke linter dalam komunitas ruby.
  • guard , bersama dengan sekumpulan plugin, Anda dapat menjalankan perintah apa pun sesuka Anda saat kode berubah, secara otomatis.
  • menyapu , driver universal untuk berbagai tugas proyek, seperti:
    • package: membangun paket permata
    • clean: file yang dihasilkan bersih
    • test: uji coba
  • halaman , alat dokumentasi ruby ​​populer.

Dan selain semua alat di atas, ada beberapa layanan online untuk proyek ruby:

Dan Anda bahkan dapat membuat lencana melalui http://shields.io/ untuk proyek sumber terbuka Anda.

Itulah pengalaman saya, semoga bisa membantu seseorang.

Xiao Hanyu
sumber