Module: Castle::Utils

Defined in:
lib/castle/utils.rb,
lib/castle/utils/cloner.rb,
lib/castle/utils/merger.rb

Defined Under Namespace

Classes: Cloner, Merger

Class Method Summary collapse

Class Method Details

.deep_symbolize_keys(object, &block) ⇒ Object

Returns a new hash with all keys converted to symbols, as long as they respond to to_sym. This includes the keys from the root hash and from all nested hashes and arrays.

hash = { 'person' => { 'name' => 'Rob', 'age' => '28' } }

Castle::Hash.deep_symbolize_keys(hash)
# => {:person=>{:name=>"Rob", :age=>"28"}}


14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/castle/utils.rb', line 14

def deep_symbolize_keys(object, &block)
  case object
  when Hash
    object.each_with_object({}) do |(key, value), result|
      result[key.to_sym] = deep_symbolize_keys(value, &block)
    end
  when Array
    object.map { |e| deep_symbolize_keys(e, &block) }
  else
    object
  end
end

.deep_symbolize_keys!(object, &block) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/castle/utils.rb', line 27

def deep_symbolize_keys!(object, &block)
  case object
  when Hash
    object.keys.each do |key|
      value = object.delete(key)
      object[key.to_sym] = deep_symbolize_keys!(value, &block)
    end
    object
  when Array
    object.map! { |e| deep_symbolize_keys!(e, &block) }
  else
    object
  end
end

.replace_invalid_characters(arg) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/castle/utils.rb', line 42

def replace_invalid_characters(arg)
  if arg.is_a?(::String)
    arg.encode('UTF-8', invalid: :replace, undef: :replace)
  elsif arg.is_a?(::Hash)
    arg.each_with_object({}) { |(k, v), h| h[k] = replace_invalid_characters(v) }
  elsif arg.is_a?(::Array)
    arg.map(&method(:replace_invalid_characters))
  else
    arg
  end
end