aboutsummaryrefslogblamecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/hash/except.rb
blob: 5013812460930169415c753f6724727f6edb0312 (plain) (tree)
1
2
3
4
5
6
7
8
9
                             
 
          




                                                              
   
                                                                                          
                                                    
                   
                            
     
 



                                                    
                    

                                   

     
# frozen_string_literal: true

class Hash
  # Returns a hash that includes everything except given keys.
  #   hash = { a: true, b: false, c: nil }
  #   hash.except(:c)     # => { a: true, b: false }
  #   hash.except(:a, :b) # => { c: nil }
  #   hash                # => { a: true, b: false, c: nil }
  #
  # This is useful for limiting a set of parameters to everything but a few known toggles:
  #   @person.update(params[:person].except(:admin))
  def except(*keys)
    slice(*self.keys - keys)
  end

  # Removes the given keys from hash and returns it.
  #   hash = { a: true, b: false, c: nil }
  #   hash.except!(:c) # => { a: true, b: false }
  #   hash             # => { a: true, b: false }
  def except!(*keys)
    keys.each { |key| delete(key) }
    self
  end
end