2012-03-03 11 views
83

我想創建一個10-20個類/文件的小紅寶石項目。我需要一些寶石,我想使用rspec作爲測試框架。如何設置一個基本的ruby項目?

我可能想在稍後創建一個gem,但這並不確定。

是否有一些Howto或指南,告訴我如何設置我的項目的基本結構?

問題,我有是:

  • 我在哪裏把我的自定義錯誤/異常
  • 是否有一些約定在那裏命名目錄,如lib下,垃圾桶,SRC等?
  • 我在哪裏放置測試數據或文件。
  • 我在哪裏需要我所有的文件,以便我可以在我的項目中訪問它們。

我知道我可以從零開始做所有事情,但我想要一些指導。我可以複製一些好的寶石,但我不確定我真正需要什麼以及我可以刪除什麼。

我看着http://gembundler.com/,但它在設置捆綁器後停止。

+2

相關問題:http://stackoverflow.com/questions/614309/ideal-ruby-project-structure – 2012-03-04 22:44:45

回答

129

要獲得良好的開局,您可以使用bundle gem命令和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 
  • 代碼放在lib
  • 規格進去spec
  • 測試數據或文檔中spec/fixtures/
  • 去要求在lib/my_lib.rb所有Ruby文件。您也可以根據自己的喜好定義您的例外文件,或者在自己的文件中定義。
  • C源文件進去ext/my_lib
  • shell腳本和可執行文件去bin

如果有疑問,只是看別人怎麼寶石佈局。


更多信息:

你應該在你gemspec rspec的增加作爲發展的依賴,使事情變得更容易爲其他開發人員

  1. 編輯my_lib.gemspec,加入gem.add_development_dependency 'rspec'gem.add_development_dependency 'rake'附近底端。
  2. Bundler.setuprequire 'my_lib'添加到spec/spec_helper.rb的頂部,以確保您在運行規格時加載了您的gem依賴項。
  3. require "rspec/core/rake_task"task :default => :spec添加到您的Rakefile中,以便運行rake將運行您的規格。

當你在你的最新創作工作,guard-rspec可以運行你的規格爲文件改變由自動節省您的時間和麻煩,提醒您符合規格故障。

~/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" 

後,你認爲自己的創作,它推送到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 [email protected]:myusername/my_lib.git 
~/code/my_lib $ git push 

然後,當你準備好釋放你的Rubygems.org寶石,運行rake release,這將走你通過這些步驟。

~/code/my_lib $ rake release 

更多參考

+1

你可以使用'-b,[--bin =爲你的庫生成一個二進制文件。 gem'。 – 2012-03-03 20:20:37

+0

您也可以使用'bundle gem -t'來同時執行'rspec --init'的等價操作。 – pioto 2015-06-12 15:23:06

+1

如何執行ruby項目。我爲學生教師時間表構建了一個基於控制檯的ruby項目。不知道如何執行它? – rAzOr 2017-01-29 11:24:58

6

這裏是我所最常見的慣例(假設你的項目的名稱是「富」):

  • /lib/foo.rb - 定義項目及其版本的頂級命名空間;需要所需的文件。
  • /lib/foo/- 包含項目的所有類,包括與錯誤相關的類。
  • /test/- 包含您項目的測試。
  • /spec/- 包含您的項目的規格。
  • /bin/- 如果您的項目依賴於二進制文件(JAR文件等),他們通常會進入該文件。

在lib /內部,約定通常是爲您的頂級命名空間中的每個子命名空間創建一個文件夾。例如,類Foo :: Bar :: Baz通常位於/lib/foo/bar/baz.rb下。

有些人喜歡創建一個/lib/foo/version.rb文件來設置Foo :: VERSION常量,但是我經常在/lib/foo.rb文件中看到這個定義。

另外,如果你正在創建一個寶石,你會需要以下文件:

  • /Rake文件 - 定義rake任務(如測試,建設和推動創業板的任務)。
  • /Gemfile - 定義gem的來源(以及其他可能的事情)。
  • /foo.gemspec - 描述你的gem並提供依賴關係列表。
10

some nice guides at rubygems.org會向你介紹公約和推理其中的一些。一般來說,大多數Ruby開發人員都遵循Rubygems naming and directory conventions

,如果我沒能找到任何類的標準庫中我只會創建自定義的異常類適合的錯誤描述。鳥巢是提高它的類或模塊在你的錯誤類:

class Parser::Error < RuntimeError; end 

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

單元測試去任何進入/test,如果你使用Test::Unit,或者如果你正在使用RSpec/spec。我推薦後者。

Bundler是管理你的負載路徑的好方法。它將自動設置您的環境,僅使用Gemfile和可選的gemspec中指定的依賴關係。它還可以讓您輕鬆地將require代碼變爲寶石。

但是,因爲你可能捆綁你的代碼在將來的寶石,我建議調查how to create gem specifications。你應該手動編寫你的規範。不要使用某種工具來自動生成它 - 在我看來,它們是暴力破解方法,在與源代碼控制一起使用時會不必要地複製信息並造成嚴重破壞。

I created a gem這可能對你有用。鑑於gemspec文件,它定義了許多有用的Rake任務與您的寶石,其中包括任務建立,安裝和釋放您的寶石rubygemsgit存儲庫與自動版本標記。它還提供了一種簡單的方法來在irbpry會話中加載您的代碼。

# Rakefile 
require 'rookie' 

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

在互聯網上有一些關於如何構建Ruby項目的指南。另外,我認爲解決這個問題的最好方法是通過github瀏覽並尋找一些着名的Ruby項目,並檢查「他們的」結構。

除了一般的紅寶石寶石的要求,我建議以下工具用於更好的工作流程:

  • editorconfig,可幫助開發人員定義和維護不同的編輯器和IDE之間是一致的編碼風格。
  • rubocop,靜態代碼分析儀紅寶石的defac以棉短絨在Ruby社區。
  • guard,有一些插件在一起,你可以爲你喜歡的代碼發生變化時自動運行的任何命令。
  • rake,各種項目任務,如通用驅動程序:
    • package:建立gem包
    • clean:清潔生成的文件
    • test:運行測試
  • yard,流行紅寶石文檔工具。

而除了上述所有的工具,their're紅寶石項目的一些在線服務:

並且你可以通過http://shields.io/甚至genearate徽章爲你的開源項目。

這是我的經驗,希望對一些人有幫助。