単一の Ruby スクリプトで達成できる簡単なタスクがありますが、gem の作成方法を学びたいと思っています。最善の方法は常に、工夫された表現による実用的なアプリケーションのようです。最終的な目標は、csv ファイルを解析し、フィルター (正規表現の一致) に基づいていくつかの行を除外し、残ったものを出力することです。ここに示されているのは、これについて私の頭を包み込むのに役立つ単純なハローワールドです。私は2つのことにこだわっています。
コードを進行中の作業として適切に実行していますか? たとえば、これが単純なスクリプトの場合、ターミナルに入って「ruby list_cleaner.rb」を実行するだけで実行されます...しかし、今、このgemファイル構造があり、どのファイルを呼び出すべきかわかりませんか? 最上位の gem/gem_name.rb スクリプトを呼び出しても、何も起こりません (そのファイルで行うことは、他のファイルを自動ロードすることだけなので、当然のことです)。最初に自動ロードされたファイル (base.rb) を呼び出すと機能しますが、WIP 中にこれを実行する方法はありますか?
別のファイル内の 1 つのモジュールまたはクラスのメソッドが別のモジュールまたはクラスからアクセス可能かどうかをテストするにはどうすればよいですか? assert_kind? assert_nil? 私はそれを理解することができなかったようです!そこで、「contraints.rb」ファイルでメソッド「hello」を定義し、それを含めて、base.rb で「hello」を呼び出しました。base.rb スクリプトを実行すると、
uninitialized constant ListCleaner::Constraints (NameError)
. これをテストする方法を見つけて、明らかに修正したいと思います。
非常に単純な Hello World の例とファイル構造を以下に示します。
最上位ディレクトリ & gem 名は「list_cleaner」
#list_cleaner/lib/list_cleaner.rb
module ListCleaner
autoload :Base, 'list_cleaner/base'
autoload :Constraints, 'list_cleaner/constraints'
end
#list_cleaner/lib/base.rb
module ListCleaner
class Base
include ListCleaner::Constraints
hello #a method from the constraints rb auto loaded and included right?
end
end
#list_cleaner/lib/constraints.rb
module ListCleaner
class Constraints #long term this will be filled with 'filter' methods
def hello
puts('hello world')
end
end
end
#list_cleaner/test/list_cleaner_test.rb
require 'test_helper'
class ListCleanerTest < ActiveSupport::TestCase
test "truth" do
assert_kind_of Module, ListCleaner
end
test "constrains exposed to Base?" do
assert_kind_of constraints, base, 'msg' #is constraints part of base?
end
end
Jose Valim による「crafting rails application」を読んだり、作業したりしています。また、いくつかのインターネット ガイドを使用しています。いくつかの基本的な仕組みを自分で適用することはできないようです. この例では、あるファイル (モジュール、クラス、または何が最適か) のメソッドを別のファイル (モジュール、クラス、何が最適か) から呼び出す方法を理解しようとしているだけです。それ。したがって、すべてを機能させるだけでなく、単体テストで機能することをテストし、ターミナルから呼び出して実行することを確認します(この場合は「hello world」を出力します)。
あなたが提供できる指示をありがとう、私はそれを感謝します!