module Hashie::Extensions::Mash::KeepOriginalKeys
Overrides the indifferent access of a Mash
to keep keys in the original format given to the Mash
.
@example
class KeepingMash < Hashie::Mash include Hashie::Extensions::Mash::KeepOriginalKeys end mash = KeepingMash.new(:symbol_key => :symbol, 'string_key' => 'string') mash.to_hash #=> { :symbol_key => :symbol, 'string_key' => 'string' } mash['string_key'] == mash[:string_key] #=> true mash[:symbol_key] == mash['symbol_key'] #=> true
Public Class Methods
included(descendant)
click to toggle source
# File lib/hashie/extensions/mash/keep_original_keys.rb, line 17 def self.included(descendant) raise ArgumentError, "#{descendant} is not a kind of Hashie::Mash" unless descendant <= Hashie::Mash end
Private Instance Methods
__convert(key)
click to toggle source
Converts symbol/string keys to their alternative formats, but leaves other keys alone.
@param [Object, String, Symbol] key the key to convert. @return [Object, String, Symbol] the converted key.
# File lib/hashie/extensions/mash/keep_original_keys.rb, line 42 def __convert(key) case key when Symbol then key.to_s when String then key.to_sym else key end end
convert_key(key)
click to toggle source
Converts the key when necessary to access the correct Mash
key.
@param [Object, String, Symbol] key the key to access. @return [Object] the value assigned to the key.
# File lib/hashie/extensions/mash/keep_original_keys.rb, line 27 def convert_key(key) if regular_key?(key) key elsif (converted_key = __convert(key)) && regular_key?(converted_key) converted_key else key end end