lib/ecoportal/api/v1/person.rb in ecoportal-api-0.2.1 vs lib/ecoportal/api/v1/person.rb in ecoportal-api-0.2.2

- old
+ new

@@ -34,21 +34,34 @@ doc["details"] = value.slice("schema_id", "fields") else raise "Invalid set on details: Need nil, PersonDetails or Hash; got #{value.class}" end remove_instance_variable("@details") if defined?(@details) - return details + details.tap do |details| + # When reassigning details, mark the whole thing as dirty + details&.instance_variable_set("@original_doc", {}) + end end def add_details(schema_or_id) - self.details = person_details_class.new - case schema_or_id - when person_schema_class - schema_or_id.initialize_details(self.details) - when String - self.details.schema_id = schema_or_id + person_details_class.new.tap do |new_details| + case schema_or_id + when person_schema_class + schema_or_id.initialize_details(new_details) + when String + new_details.schema_id = schema_or_id + end + self.details = new_details + # Patch out static data from as_update + @original_doc["details"] = { + "fields" => JSON.parse(doc["details"]["fields"].to_json) + } end - self.details + self.details.tap do |details| + # Patch out static data from as_update + original = details.instance_variable_get("@original_doc") + original["fields"] = JSON.parse(doc["details"]["fields"].to_json) + end end private def person_schema_class