Project

General

Profile

Actions

Bug #10984

closed

Hash#contain? to check whether hash contains other hash

Added by olivierlacan (Olivier Lacan) over 6 years ago. Updated almost 6 years ago.

Status:
Closed
Priority:
Normal
Target version:
-
ruby -v:
Backport:
[ruby-core:<unknown>]

Description

Comparing hashes seems like a common practice but there currently isn't a method to ask a
hash instance whether it includes another hash instance.

The most intuitive method to reach for would be Hash#include? but it is in fact an alias to Hash#has_key?

What I'm looking for can be achieved with:

class Hash
  def contain?(other)
    self.merge(other) == self
  end
end

Here's a simple demo of #contain? in use:

{ a: true, b: false }.contain?({ a: true})
# => true

{ a: true, b: false }.contain?({ b: false})
# => true

{ a: true, b: false }.contain?({ a: false})
# => false

{ a: true, b: false }.contain?({ c: true})
# => false

One important note is that this method is not checking for nested hash matches.
This may need to be addressed when the parameters include a nested hash perhaps.

Thanks to Terence Lee's help, nobu created a patch for this feature last year.
I've only modified the name of the method from his original patch and attached it to this issue.


Files

Hash#contain_.patch (2.22 KB) Hash#contain_.patch olivierlacan (Olivier Lacan), 03/19/2015 01:54 PM
Actions

Also available in: Atom PDF