Module: LinkedRails::Helpers::DeltaHelper

Defined in:
lib/linked_rails/helpers/delta_helper.rb

Instance Method Summary collapse

Instance Method Details

#change_triple(predicate, value) ⇒ Object



35
36
37
38
39
40
41
# 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) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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_triplesObject

rubocop:disable Metrics/AbcSize



22
23
24
25
26
27
28
29
30
31
32
33
# 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_triplesObject

rubocop:disable Metrics/AbcSize, Metrics/MethodLength



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 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) ⇒ Object



59
60
61
# 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) ⇒ Object



63
64
65
# 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) ⇒ Object



67
68
69
# 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) ⇒ Object



71
72
73
74
75
# 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) ⇒ Object



77
78
79
# 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) ⇒ Object



81
82
83
# File 'lib/linked_rails/helpers/delta_helper.rb', line 81

def resource_removed_delta(resource)
  invalidate_parent_collections_delta(resource)
end