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