2013-05-13 55 views
0

我希望有人能帮助我。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参数是一个包含字符串的变量。

我该怎么做?那么我应该如何调用修改的方法?

谢谢!

回答

0

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

的新方法:

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

新通话:

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

注意uniq是一个相当沉重的霸道做法在这里,如果你只是想看看如果其中任何失败。你可能会想尝试find其将停止在失败,而不是盲目地执行它们所有的第一个:

[email protected] { |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项的数组。捕获这个列表并用它来产生更强大的错误信息可能是有用的,可能描述那些不起作用的错误信息。

+0

嗨@tadman!是!我的代码现在正在工作!非常感谢! – MrTeleBird 2013-05-14 06:55:33