使用Ruby中的or-operator简化"任意"检查

Bea*_*ude 4 ruby operators or-operator

如何简化以下检查?...

if node[:base][:database][:adapter].empty? || node[:base][:database][:host].empty? || 
  node[:base][:database][:database].empty? || node[:base][:database][:port].empty? 
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

required_keys = { :adapter, :host, :database...etc...} 
required keys - node[:base][:database] == [] 
Run Code Online (Sandbox Code Playgroud)

这种语法有点偏,但基本上从所需的密钥集中减去了你的密钥.如果您的集合中包含所有必需的键,则结果应为空.

我不确定正确的语法?.任何帮助,将不胜感激

Aru*_*hit 11

required_keys = [:adapter, :host, :database ]
if required_keys.any?{|x| node[:base][:database][x].empty?}
  #code here
end
Run Code Online (Sandbox Code Playgroud)

或者你也可以这样做:

node[:base][:database].values_at(*required_keys).any?(&:empty?) 
Run Code Online (Sandbox Code Playgroud)