简化 Ruby 中 or 运算符的"any of"检查



如何简化以下检查…

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] == [] 

这个语法有点不对劲,但基本上是从必需的键集中减去您拥有的键。如果集合中有所有必需的键,则结果应该为空。

我不确定关于正确的语法?. 如有任何帮助,不胜感激

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?) 

如果你认为你要在多个地方使用这个功能,你可以扩展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)

相关内容

  • 没有找到相关文章

最新更新