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