如何简化以下检查?...
if node[:base][:database][:adapter].empty? || node[:base][:database][:host].empty? ||
node[:base][:database][:database].empty? || node[:base][:database][:port].empty?
类似
required_keys = { :adapter, :host, :database...etc...}
required keys - node[:base][:database] == []
这种语法略有不同,但基本上从所需的密钥集中减去了你的密钥。如果您的集合中包含所有必需的键,则结果应为空。
我不确定正确的语法? 。任何帮助将不胜感激
答案 0 :(得分:11)
required_keys = [:adapter, :host, :database ]
if required_keys.any?{|x| node[:base][:database][x].empty?}
#code here
end
或者你也可以这样做:
node[:base][:database].values_at(*required_keys).any?(&:empty?)
答案 1 :(得分:0)
如果您认为您将在多个地方使用此功能,则可以扩展Hash类并在初始化程序中要求扩展。
class Hash
def contains_values_for?(*keys)
keys.all? do |key|
self[key].present?
end
end
end
现在你可以做到:
node[:base][:database].contains_values_for?(:adapter, :host, :database, :port)