从命令行执行 ruby 方法

Execute ruby method from command-line

我在文件 test_class.rb 中的 Ruby 中有以下 class:

class TestClass

   def test_verify_one
         # DO SOME
   end

   def test_verify_two
         # DO SOME
   end

end

为了执行这个 class 我向终端发送了两个参数,ENVIRONMENT 和 LANGUAGE。

所以...从我使用的终端呼叫:

ruby test_class.rb ENVIRONMENT LANGUAGE

这会执行两种方法。

我只想执行一个。

我尝试了以下方法:

ruby -r "test_class.rb" -e "TestClass.test_verify_one" ENVIRONMENT LANGUAGE

但它不起作用。

你能帮帮我吗?

在与 test_class.rb 相同的文件夹中,运行 ruby 命令具有以下命令语法:

ruby -I . -r "test_class" -e "TestClass.test_verify_one" arg1 arg2

分解这个命令我们得到:

-I . 在 $LOAD_PATH 中包含当前目录,这样我们就可以使用 require

-r 在 $LOAD_PATH 中需要一个名为 test_class 的文件。这是可能的,因为我们在上面的加载路径中包含了当前目录(.rb 扩展名在这里是可选的)。

-e 与您提供的相同,计算以下代码。

现在,如果我们在该方法中调用 ARGV,我们应该在不同的行上得到 arg1arg2

#...
def self.test_verify_one
  puts ARGV
end
#...

如果您希望第一个方法接受传递给它的变量,您需要定义第一个方法接受两个变量,如下所示:

class TestClass

    def test_verify_one (var1, var2)
             # DO SOME
       end

       def test_verify_two
             # DO SOME
       end

end

然后您需要在第二个条件中添加一个条件,使其仅在您希望的条件下执行...或者如果您目前不需要它,则将其注释掉。因此,例如,如果您只想在未传入变量时触发测试 2,您的代码将如下所示:

class TestClass

    def test_verify_one (var1, var2)
        # DO SOME
    end

    def test_verify_two (var1, var2)
        if (var1 and var2) defined? nil
        # DO SOME
    end

end