File: active_support/core_ext/hash/keys.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: ActiveSupport#1
  module: CoreExtensions#2
  module: Hash#3
  module: Keys#4
has properties
method: stringify_keys #6
method: stringify_keys! #14
method: symbolize_keys #22
method: symbolize_keys! #30
method: assert_valid_keys / 1 #45

Code

   1  module ActiveSupport #:nodoc:
   2    module CoreExtensions #:nodoc:
   3      module Hash #:nodoc:
   4        module Keys
   5          # Return a new hash with all keys converted to strings.
   6          def stringify_keys
   7            inject({}) do |options, (key, value)|
   8              options[key.to_s] = value
   9              options
  10            end
  11          end
  12 
  13          # Destructively convert all keys to strings.
  14          def stringify_keys!
  15            keys.each do |key|
  16              self[key.to_s] = delete(key)
  17            end
  18            self
  19          end
  20 
  21          # Return a new hash with all keys converted to symbols.
  22          def symbolize_keys
  23            inject({}) do |options, (key, value)|
  24              options[(key.to_sym rescue key) || key] = value
  25              options
  26            end
  27          end
  28 
  29          # Destructively convert all keys to symbols.
  30          def symbolize_keys!
  31            self.replace(self.symbolize_keys)
  32          end
  33 
  34          alias_method :to_options,  :symbolize_keys
  35          alias_method :to_options!, :symbolize_keys!
  36 
  37          # Validate all keys in a hash match *valid keys, raising ArgumentError on a mismatch.
  38          # Note that keys are NOT treated indifferently, meaning if you use strings for keys but assert symbols
  39          # as keys, this will fail.
  40          #
  41          # ==== Examples
  42          #   { :name => "Rob", :years => "28" }.assert_valid_keys(:name, :age) # => raises "ArgumentError: Unknown key(s): years"
  43          #   { :name => "Rob", :age => "28" }.assert_valid_keys("name", "age") # => raises "ArgumentError: Unknown key(s): name, age"
  44          #   { :name => "Rob", :age => "28" }.assert_valid_keys(:name, :age) # => passes, raises nothing
  45          def assert_valid_keys(*valid_keys)
  46            unknown_keys = keys - [valid_keys].flatten
  47            raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty?
  48          end
  49        end
  50      end
  51    end
  52  end