Ruby如何扩展方法来接受新参数

时间:2013-05-13 16:31:02

标签: ruby-on-rails puppet theforeman

我希望有人能帮助我。

我在ruby中有这个方法:

def puppetrun_oneClass!
   ProxyAPI::Puppet.new({:url => puppet_proxy.url}).runSingle fqdn
end

然后我在其他方法中调用:

def update_multiple_puppetrun_oneClass_deploy
   if @hosts.map(&:puppetrun_oneClass!).uniq == [true]
      notice "Successfully executed, check reports and/or log files for more details"
   else
      error "Some or all hosts execution failed, Please check log files for more information"
   end
end

其中 @hosts 是一个主机名数组。

现在,我想扩展 puppetrun_oneClass!以接受 @myDeploy 参数,其中 @myDeploy 参数是包含字符串的变量。

我怎么能这样做?然后我该如何调用修改后的方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该将其添加为参数,但这意味着您需要向map循环声明一个长格式块。

新方法:

def puppetrun_oneClass!(deploy)
  # ... Code using `deploy` variable
end

新来电:

@hosts.map { |h| host.puppetrun_oneClass!(@myDeploy) }.uniq

请注意,uniq是一个非常严厉的方法,如果您只想查看其中是否有任何失败。你可能想尝试find,它会在第一个失败而不是盲目地执行它们时停止:

!@hosts.find { |h| !host.puppetrun_oneClass!(@myDeploy) }

这将确保他们都没有返回错误的条件。如果您想要全部运行它们并查找错误,您可以尝试:

 failures = @hosts.reject { |h| host.puppetrun_oneClass!(@myDeploy) }

 if (failures.empty?)
   # Worked
 else
   # Had problems, failures contains list of failed `@hosts`
 end

第一部分返回失败的任何@hosts条目的数组。捕获此列表并使用它来生成更强大的错误消息(可能描述那些不起作用的消息)可能很有用。