2013-05-13 59 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