[英]Creating Ruby Main (command line utility) program with multiple files
我正在嘗試使用main
gem來制作命令行實用程序。 最近的Ruby Rogues播客中對此進行了介紹。
如果我將所有代碼放在一個文件中並需要該文件,那么rspec給我一個錯誤,因為主dsl將rpsec視為主實用程序的命令行調用。
我可以將方法分解為一個新文件,並讓rspec要求該文件。 假設您有此程序,但想將do_something
方法放在單獨的文件中以使用rspec進行測試:
require 'main'
def do_something(foo)
puts "foo is #{foo}"
end
Main {
argument('foo'){
required # this is the default
cast :int # value cast to Fixnum
validate{|foo| foo == 42} # raises error in failure case
description 'the foo param' # shown in --help
}
do_something(arguments['foo'].value)
}
分發/部署具有多個文件的ruby命令行程序的便捷方法是什么? 也許創造一個寶石?
您的測試方向正確-基本上,您希望將“邏輯”放在單獨的文件中,以便可以對它們進行單元測試。 然后,您可以使用類似Aruba的工具進行集成測試。
對於多個文件,最好的選擇是將其作為RubyGem分發。 有很多資源,但是要點是:
bin
lib/YOUR_APP/whatever.rb
,其中“ YOUR_APP”是您的應用程序的名稱。 我還建議使用為您的應用程序命名的模塊為類命名 lib
的文件就像lib
在加載路徑中一樣 bundle gem
生成它並使用git,則應該會做的很好) 這樣, 與RubyGems一起安裝時,您的應用程序將在運行時訪問lib
中的文件。 在開發中,您需要bundle exec bin/my_app
或RUBYLIB=lib bin/my_app
。 關鍵是,RubyGems在運行時(而不是在開發時)負責加載路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.