lib/solis/model.rb in solis-0.73.0 vs lib/solis/model.rb in solis-0.74.0

- old
+ new

@@ -1,7 +1,8 @@ require 'securerandom' require 'iso8601' +require 'hashdiff' require_relative 'query' module Solis class Model @@ -171,27 +172,56 @@ original_klass = self.query.filter({ language: nil, filters: { id: [id] } }).find_all.map { |m| m }&.first raise Solis::Error::NotFoundError if original_klass.nil? updated_klass = original_klass.deep_dup - attributes.each_pair do |key, value| - if value.is_a?(Hash) - embedded = self.class.graph.shape_as_model(original_klass.class.metadata[:attributes][key][:datatype].to_s).new(value) - if embedded.exists?(sparql) - embedded_data = properties_to_hash(embedded) - embedded.update(embedded_data) - else - embedded.save + attributes.each_pair do |key, value| # check each key. if it is an entity process it + unless original_klass.class.metadata[:attributes][key][:node].nil? #it is an entity + value = [value] unless value.is_a?(Array) + value.each do |sub_value| + embedded = self.class.graph.shape_as_model(original_klass.class.metadata[:attributes][key][:datatype].to_s).new(sub_value) + if embedded.exists?(sparql) + embedded_data = properties_to_hash(embedded) + embedded.update(embedded_data) + else + embedded.save + end end end updated_klass.instance_variable_set("@#{key}", value) end + # attributes.each_pair do |key, value| + # if value.is_a?(Hash) + # embedded = self.class.graph.shape_as_model(original_klass.class.metadata[:attributes][key][:datatype].to_s).new(value) + # if embedded.exists?(sparql) + # embedded_data = properties_to_hash(embedded) + # embedded.update(embedded_data) + # else + # embedded.save + # end + # elsif value.is_a?(Array) + # value.each do |sub_value| + # if sub_value.is_a?(Hash) + # if embedded.exists?(sparql) + # embedded_data = properties_to_hash(embedded) + # embedded.update(embedded_data) + # else + # embedded.save + # end + # end + # end + # end + # # updated_klass.instance_variable_set("@#{key}", value) # end + + # attributes.each_pair do |key, value| + # updated_klass.instance_variable_set("@#{key}", value) + # end # properties_original_klass=Model.properties_to_hash(original_klass) # properties_updated_klass = Model.properties_to_hash(updated_klass) # changes = Hashdiff.diff(properties_original_klass, properties_updated_klass) # pp changes # @@ -262,12 +292,12 @@ # end before_update_proc&.call(original_klass, updated_klass) properties_orignal_klass = properties_to_hash(original_klass) - properties_updated_klsss = properties_to_hash(updated_klass) + properties_updated_klass = properties_to_hash(updated_klass) - if Hashdiff.best_diff(properties_orignal_klass, properties_updated_klsss).empty? + if Hashdiff.best_diff(properties_orignal_klass, properties_updated_klass).empty? Solis::LOGGER.info("#{original_klass.class.name} unchanged, skipping") data = self.query.filter({ filters: { id: [id] } }).find_all.map { |m| m }&.first else delete_graph = as_graph(original_klass, false) \ No newline at end of file