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