lib/mongoid/kms.rb in mongoid-kms-0.0.32 vs lib/mongoid/kms.rb in mongoid-kms-0.0.33
- old
+ new
@@ -63,19 +63,19 @@
if self.new_record? || # always run new records through this
changed_attributes.keys.include?(field_name.to_sym) || # this is a hack to get around Mongoid's weakass dirty hack
kms_context_value_changed?(field_name) # checks if any of the context fields have changed
encrypted_field_name = self.class.get_encrypted_field_name(field_name)
- if instance_variable_get("@#{field_name}").nil? && kms_context_value_changed?(field_name)
+ if !instance_variable_defined?("@#{field_name}") && kms_context_value_changed?(field_name)
raw = self.send(encrypted_field_name)
raw = raw.data if raw.is_a?(Mongoid::Kms.bson_class::Binary)
value = self.class.decrypt_field(self, field_name, raw, self.class.kms_context_was(self, field_name))
else
value = send("#{field_name}")
end
- if value.nil?
+ if value.nil? || value == ""
self.send("#{encrypted_field_name}=", nil)
else
self.send("#{encrypted_field_name}=", Mongoid::Kms.binary_factory(self.class.encrypt_field(self, field_name, value)))
end
end
@@ -158,10 +158,12 @@
kms_field_map[field_name.to_s] = {context: args.delete(:context), type: args[:type]}
field encrypted_field_name, type: Mongoid::Kms.bson_class::Binary
define_method(field_name) do
- instance_variable_get("@#{field_name}") || begin
+ if instance_variable_defined?("@#{field_name}")
+ instance_variable_get("@#{field_name}")
+ else
raw = send("kms_secure_#{field_name}")
raw = raw.data if raw.is_a?(Mongoid::Kms.bson_class::Binary)
if raw.nil?
raw