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



我希望有人能帮帮我。

我在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参数是一个包含字符串的变量。

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

谢谢! !

您应该将其作为参数添加,但是这意味着您需要在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) }

这将确保它们都不返回false条件。如果您想要运行它们并查找错误,您可以尝试:

 failures = @hosts.reject { |h| host.puppetrun_oneClass!(@myDeploy) }
 if (failures.empty?)
   # Worked
 else
   # Had problems, failures contains list of failed `@hosts`
 end

第一部分返回所有失败的@hosts条目的数组。捕获此列表并使用它来生成更健壮的错误消息可能会很有用,可能会描述那些不工作的错误。

相关内容

  • 没有找到相关文章

最新更新