簡體   English   中英

使用多個文件創建Ruby Main(命令行實用程序)程序

[英]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在加載路徑中一樣
  • 在您的gemspec中,請確保指明您的bin文件是什么以及您的lib文件是什么(如果使用bundle gem生成它並使用git,則應該會做的很好)

這樣, 與RubyGems一起安裝時,您的應用程序將在運行訪問lib中的文件。 在開發中,您需要bundle exec bin/my_appRUBYLIB=lib bin/my_app 關鍵是,RubyGems在運行時(而不是在開發時)負責加載路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM