module LinkedRails::Helpers::DeltaHelper
Public Instance Methods
change_triple(predicate, value)
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 35 def change_triple(predicate, value) if value.nil? RDF::Statement.new(current_resource.iri, predicate, Vocab.sp[:Variable], graph_name: delta_iri(:remove)) else RDF::Statement.new(current_resource.iri, predicate, value, graph_name: delta_iri(:replace)) end end
changed_relation_triples(predicate, destructed, resources)
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 6 def changed_relation_triples(predicate, destructed, resources) related_resource_invalidations = resources.map(&method(:invalidate_resource_delta)) return related_resource_invalidations unless predicate if destructed return related_resource_invalidations + [ [current_resource.iri, predicate, Vocab.sp[:Variable], delta_iri(:remove)] ] end related_resource_invalidations + resources.map do |resource| [current_resource.iri, predicate, resource.iri, delta_iri(:replace)] end end
changed_relations_triples()
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 22 def changed_relations_triples # rubocop:disable Metrics/AbcSize current_resource.previously_changed_relations.flat_map do |key, value| if key.to_s.ends_with?('_collection') [invalidate_collection_delta(current_resource.send(key))] else destructed = current_resource.send(:association_has_destructed?, key) many = value.relationship_type == :has_many relation = current_resource.send(key) changed_relation_triples(value.predicate, destructed, many ? relation : [relation]) end end end
changes_triples()
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 43 def changes_triples # rubocop:disable Metrics/AbcSize, Metrics/MethodLength serializer = RDF::Serializers.serializer_for(current_resource).new(current_resource) current_resource.previous_changes_by_predicate.map do |predicate, (_old_value, _new_value)| serializer_attributes = current_resource.class.predicate_mapping[predicate] next if serializer_attributes.is_a?(FastJsonapi::Relationship) attr_name = serializer_attributes.key serialized_value = serializer.class.attributes_to_serialize[attr_name]&.serialize(current_resource, serializer_params, {}) (serialized_value.is_a?(Array) ? serialized_value : [serialized_value]).map do |value| change_triple(predicate, value) end end.compact.flatten end
delta_iri(delta)
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 59 def delta_iri(delta) %i[remove replace invalidate].include?(delta) ? Vocab.ontola[delta] : Vocab.ll[delta] end
invalidate_collection_delta(collection)
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 63 def invalidate_collection_delta(collection) [Vocab.sp[:Variable], Vocab.ontola[:baseCollection], collection.iri, delta_iri(:invalidate)] end
invalidate_parent_collections_delta(resource)
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 67 def invalidate_parent_collections_delta(resource) resource&.parent_collections(try(:user_context))&.map(&method(:invalidate_collection_delta)) || [] end
invalidate_resource_delta(resource)
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 71 def invalidate_resource_delta(resource) iri = resource.is_a?(RDF::Resource) ? resource : resource.iri [iri, Vocab.sp[:Variable], Vocab.sp[:Variable], delta_iri(:invalidate)] end
resource_added_delta(resource)
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 77 def resource_added_delta(resource) invalidate_parent_collections_delta(resource) end
resource_removed_delta(resource)
click to toggle source
# File lib/linked_rails/helpers/delta_helper.rb, line 81 def resource_removed_delta(resource) invalidate_parent_collections_delta(resource) end