Module: Hashie::Extensions::Coercion::InstanceMethods
- Defined in:
- lib/hashie/extensions/coercion.rb
Instance Method Summary collapse
- #custom_writer(key, value, _convert = true) ⇒ Object
- #replace(other_hash) ⇒ Object
- #set_value_with_coercion(key, value) ⇒ Object
Instance Method Details
#custom_writer(key, value, _convert = true) ⇒ Object
37 38 39 |
# File 'lib/hashie/extensions/coercion.rb', line 37 def custom_writer(key, value, _convert = true) self[key] = value end |
#replace(other_hash) ⇒ Object
41 42 43 44 45 |
# File 'lib/hashie/extensions/coercion.rb', line 41 def replace(other_hash) (keys - other_hash.keys).each { |key| delete(key) } other_hash.each { |key, value| self[key] = value } self end |
#set_value_with_coercion(key, value) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/hashie/extensions/coercion.rb', line 13 def set_value_with_coercion(key, value) into = self.class.key_coercion(key) || self.class.value_coercion(value) return set_value_without_coercion(key, value) unless value && into return set_value_without_coercion(key, coerce_or_init(into).call(value)) unless into.is_a?(Enumerable) if into.class >= Hash key_coerce = coerce_or_init(into.flatten[0]) value_coerce = coerce_or_init(into.flatten[-1]) value = Hash[value.map { |k, v| [key_coerce.call(k), value_coerce.call(v)] }] else # Enumerable but not Hash: Array, Set value_coerce = coerce_or_init(into.first) value = into.class.new(value.map { |v| value_coerce.call(v) }) end set_value_without_coercion(key, value) end |