LoginSignup
4
1

More than 5 years have passed since last update.

Hashかどうかを判定しつつ任意の{key: value}を持っているかどうかを判定するメソッドを作った

Last updated at Posted at 2017-01-15
# 改善前
# foo_hashにはどんなclassが入ってくるかわからないという状況。
if foo_hash.is_a?(Hash) && foo_hash.dig('data', 'title') == "bar"
  やりたい処理
end
  • まずHashかどうかの判定を入れて、その後目的のkey: valueがあるかを判定。
  • が、判定を二段階で行うのが冗長に感じた。
# 改善後
# itemの中に期待するkey: valueがあるかどうかをチェックします。
# itemが入れ子になっていない場合:has_hash?(foo_hash,'title','bar')
# itemが入れ子になっている場合:  has_hash?(foo_hash,['data','title'],'bar')
# deep_symbolize_keysはrailsのメソッドなので注意。
def has_hash?(item, key, value)
  key = key.map &:to_sym if key.is_a?(Array)
  key = key.to_sym if key.is_a?(String)
  if item.is_a?(Hash)
    item = item.deep_symbolize_keys
    item.dig(*key) == value
  end
end

if has_hash?(foo_hash,['data','title'],'bar')
  やりたい処理
end
  • 結構便利に作ったつもり。
  • たぶん便利、なはず。
  • 突っ込みどころがあれば是非。。
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1