module Hashie::Extensions::Coercion::InstanceMethods

def set_value_with_coercion(key, value)

def set_value_with_coercion(key, value)
  into = self.class.key_coercion(key) || self.class.value_coercion(value)
  unless value.nil? || into.nil?
    begin
      value = self.class.fetch_coercion(into).call(value)
    rescue NoMethodError, TypeError => e
      raise CoercionError.new(key, value, into, e.message)
    end
  end
  set_value_without_coercion(key, value)
end