Sha256: 96eba07b513a7cbd19b9cb24280c93881071312ce2f2dc5d5381c5d8a65558d5

Contents?: true

Size: 1.22 KB

Versions: 8

Compression:

Stored size: 1.22 KB

Contents

class Cistern::Hash
  # @example
  #   Cistern::Hash.slice({ :a => 1, :b => 2 }, :a) #=> { :a => 1 }
  # @return [Hash] copy of {#hash} containing only {#keys}
  def self.slice(hash, *keys)
    keys.each_with_object({}) { |e, a| a[e] = hash[e] if hash.key?(e) }
  end

  # @example
  #   Cistern::Hash.except({ :a => 1, :b => 2 }, :a) #=> { :b => 2 }
  # @return [Hash] copy of {#hash} containing all keys except {#keys}
  def self.except(hash, *keys)
    Cistern::Hash.except!(hash.dup, *keys)
  end

  # Remove all keys not specified in {#keys} from {#hash} in place
  #
  # @example
  #   Cistern::Hash.except({ :a => 1, :b => 2 }, :a) #=> { :b => 2 }
  # @return [Hash] {#hash}
  # @see {Cistern::Hash#except}
  def self.except!(hash, *keys)
    keys.each { |key| hash.delete(key) }
    hash
  end

  # Copy {#hash} and convert all keys to strings recursively.
  #
  # @example
  #   Cistern::Hash.stringify_keys(:a => 1, :b => 2) #=> { 'a' => 1, 'b' => 2 }
  # @return [Hash] {#hash} with string keys
  def self.stringify_keys(object)
    case object
    when Hash
      object.each_with_object({}) { |(k, v), a| a[k.to_s] = stringify_keys(v) }
    when Array
      object.map { |v| stringify_keys(v) }
    else
      object
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
cistern-2.8.0 lib/cistern/hash.rb
cistern-2.7.2 lib/cistern/hash.rb
cistern-2.7.1 lib/cistern/hash.rb
cistern-2.7.0 lib/cistern/hash.rb
cistern-2.6.0 lib/cistern/hash.rb
cistern-2.5.0 lib/cistern/hash.rb
cistern-2.4.1 lib/cistern/hash.rb
cistern-2.4.0 lib/cistern/hash.rb