1

単一の Ruby スクリプトで達成できる簡単なタスクがありますが、gem の作成方法を学びたいと思っています。最善の方法は常に、工夫された表現による実用的なアプリケーションのようです。最終的な目標は、csv ファイルを解析し、フィルター (正規表現の一致) に基づいていくつかの行を除外し、残ったものを出力することです。ここに示されているのは、これについて私の頭を包み込むのに役立つ単純なハローワールドです。私は2つのことにこだわっています。

  1. コードを進行中の作業として適切に実行していますか? たとえば、これが単純なスクリプトの場合、ターミナルに入って「ruby list_cleaner.rb」を実行するだけで実行されます...しかし、今、このgemファイル構造があり、どのファイルを呼び出すべきかわかりませんか? 最上位の gem/gem_name.rb スクリプトを呼び出しても、何も起こりません (そのファイルで行うことは、他のファイルを自動ロードすることだけなので、当然のことです)。最初に自動ロードされたファイル (base.rb) を呼び出すと機能しますが、WIP 中にこれを実行する方法はありますか?

  2. 別のファイル内の 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」を出力します)。

あなたが提供できる指示をありがとう、私はそれを感謝します!

4

1 に答える 1

1

あなたは一度にたくさんのことをしようとしています。

このコードはより単純で、モジュールのテストを作成する方法を示しています。

#foo/lib/hi.rb
module Hi

  def hi
    puts "hello"
  end

end

#foo/test/hello_test.rb
class HelloTest < ActiveSupport::TestCase

  class X
    include Hi
  end

  test "says hello" do
    assert_equal X.new.hi, "hello"
  end

end

プレーンな Ruby だけを使用してテストを実行するには:

ruby -Ilib -Itest test/*.rb

これを正常に実行できますか?

于 2013-02-04T09:13:16.063 に答える