1

mainコマンドラインユーティリティを作成するためにgemを使用しようとしています。これは、最近の Ruby Rogues ポッドキャストで紹介されました。

すべてのコードを 1 つのファイルに入れ、そのファイルを必要とする場合、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​​ コマンドライン プログラムを配布/デプロイする便利な方法は何ですか? 多分宝石を作成しますか?

4

1 に答える 1

1

テストの正しい軌道に乗っています。基本的には、「ロジック」を個別のファイルにして、単体テストできるようにする必要があります。その後、Arubaなどを使用して統合テストを行うことができます。

複数のファイルがある場合は、RubyGem として配布することをお勧めします。たくさんのリソースがありますが、その要点は次のとおりです。

  • 実行可能ファイルを入れますbin
  • lib/YOUR_APP/whatever.rb「YOUR_APP」がアプリの名前である場所にファイルを配置します。アプリの名前を付けたモジュールでクラスの名前空間を設定することもお勧めします
  • 実行可能ファイルで、ロード パスにあるlibかのようにファイルを要求します。lib
  • gemspec では、bin ファイルと lib ファイルを必ず指定してください ( bundle gemgit で生成して使用している場合は、問題ありません)。

このようにして、アプリはRubyGems とともにインストールされるとlib、実行時にファイルにアクセスできます。開発では、またはのいずれかを行う必要があります。つまり、RubyGems は実行時にロード パスを処理しますが、開発時には処理しません。bundle exec bin/my_appRUBYLIB=lib bin/my_app

于 2013-06-17T13:01:22.530 に答える