Class: Hash

Inherits:
Object
  • Object
show all
Includes:
Logging
Defined in:
lib/evoc/hash.rb

Instance Method Summary collapse

Methods included from Logging

configure_logger_for, #logger, logger_for, set_level

Instance Method Details

#convert_values(except: [], converter: Rational, convert_empty: false) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/evoc/hash.rb', line 4

def convert_values(except: [],converter: Rational, convert_empty: false)
  logger.debug "Converter: #{converter}, Hash: #{self}"
  if except.is_a?(Array)
    Hash[self.map {|k, v|  
      if except.include?(k)
        [k,v]
      else
        # don't convert empty fields to avoid side-effects
        # "".to_i is 0 for example
        if convert_empty
          [k, converter.method(converter.to_s).call(v)]
        else
          if v.to_s.empty?
            [k,v]
          else
            [k, converter.method(converter.to_s).call(v)]
          end
        end
      end}]
  else
    raise ArgumentError.new, "Specify an array of keys whose values you don't want to convert"
  end
end

#symbolize_keysObject



32
33
34
# File 'lib/evoc/hash.rb', line 32

def symbolize_keys
  transform_keys{ |key| key.to_sym rescue key }
end

#symbolize_keys!Object



36
37
38
# File 'lib/evoc/hash.rb', line 36

def symbolize_keys!
  transform_keys!{ |key| key.to_sym rescue key }
end

#transform_keysObject



40
41
42
43
44
45
46
47
# File 'lib/evoc/hash.rb', line 40

def transform_keys
  return enum_for(:transform_keys) unless block_given?
  result = self.class.new
  each_key do |key|
    result[yield(key)] = self[key]
  end
  result
end

#transform_keys!Object



49
50
51
52
53
54
55
# File 'lib/evoc/hash.rb', line 49

def transform_keys!
  return enum_for(:transform_keys!) unless block_given?
  keys.each do |key|
    self[yield(key)] = delete(key)
  end
  self
end