Module: Castle::Utils
- Defined in:
- lib/castle/utils.rb,
lib/castle/utils/cloner.rb,
lib/castle/utils/merger.rb
Defined Under Namespace
Class Method Summary collapse
-
.deep_symbolize_keys(object, &block) ⇒ Object
Returns a new hash with all keys converted to symbols, as long as they respond to
to_sym. - .deep_symbolize_keys!(object, &block) ⇒ Object
- .replace_invalid_characters(arg) ⇒ Object
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 |