Q: How to check if an hash is "completely" included in another hash? I am using Ruby on Rails 3.1.0 and I would like to check if an hash is "completely" included in another hash and return a boolean value.
Say I have those hashes:
hash1 = {
  :key1 => 'value1',
  :key2 => 'value2',
  :key3 => 'value3'
}

hash2 = {
  :key1 => 'value1',
  :key2 => 'value2',
  :key3 => 'value3',
  :key4 => 'value4',
  :key5 => 'value5',
  ...
}

I would like to check if the hash1 is included in the hash2 even if in the hash2 there are more values than hash1 (in the above case the response that I am looking for should be true)? Is it possible to do that by using "one only code line"\"a Ruby method"?

A: The easiest way I can think of would be:
hash2.values_at(*hash1.keys) == hash1.values


A: the more elegant way is to check the equality when one hash merge another.
e.g. rewrite Hash include? instance method for this.
class Hash
  def include?(other)
    self.merge(other) == self
  end
end

{:a => 1, :b => 2, :c => 3}.include? :a => 1, :b => 2 # => true


A: That will be enough
(hash1.to_a - hash2.to_a).empty?


A: There is a way:
hash_2 >= hash_1

Alternatively:
hash_1 <= hash_2

More info in this post: https://olivierlacan.com/posts/proposal-for-a-better-ruby-hash-include/

A: The most efficient and elegant solution I've found - with no intermediary arrays, or redundant loops.
class Hash
  alias_method :include_key?, :include?

  def include?(other)
    return include_key?(other) unless other.is_a?(Hash)
    other.all? do |key, value|
      self[key] == value
    end
  end
end


Since Ruby 2.3 you can use built-in Hash#<= method.

A: Since Ruby 2.3, you can do this:
hash1 <= hash2


A: I am not sure if I understand the inclusion idea in hash. 
To see if it has the same keys(usual problem).
All keys in hash1 are included in hash2:
hash1.keys - hash2.keys == [] 
Then if you want to compare those values do as suggested in the previous post:
hash1.values - hash2.values_at(*hash1.keys) == []
