Class: Clickwrap::EventDocument

Inherits:
ApplicationRecord show all
Defined in:
lib/clickwrap/models/event_document.rb

Overview

The exact document version bound to one statement in one event, with the digests as they stood at capture.

The digests are copied here rather than only referenced, so that verification can detect a document version row that was edited in place instead of trusting the current value of a column it is supposed to be checking.

Instance Method Summary collapse

Instance Method Details

#canonical_fragmentObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/clickwrap/models/event_document.rb', line 45

def canonical_fragment
  {
    "statement" => statement_key,
    "key" => document_key,
    "version" => version_label,
    "locale" => locale,
    "source_media_type" => source_media_type,
    "source_digest" => source_content_digest,
    "rendered_media_type" => rendered_media_type,
    "rendered_digest" => rendered_content_digest,
    "renderer" => {
      "name" => renderer_name,
      "version" => renderer_version,
      "sanitizer_name" => sanitizer_name,
      "sanitizer_version" => sanitizer_version
    }.compact.presence,
    "ordinal" => ordinal
  }.compact
end

#still_matches_stored_version?Boolean

True when the stored document version still carries the digest this event recorded. A false says the document row changed after capture — which is a finding, not a crash, so verification reports it with a stable error rather than raising into an export.

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/clickwrap/models/event_document.rb', line 30

def still_matches_stored_version?
  return false if document_version.nil?

  Digest.secure_compare?(document_version.content_digest, source_content_digest) &&
    Digest.secure_compare?(
      document_version.rendered_content_digest.presence || document_version.content_digest,
      rendered_content_digest
    ) && document_version.media_type == source_media_type &&
    (document_version.rendered_media_type.presence || document_version.media_type) == rendered_media_type &&
    document_version.renderer_name.to_s == renderer_name.to_s &&
    document_version.renderer_version.to_s == renderer_version.to_s &&
    document_version.sanitizer_name.to_s == sanitizer_name.to_s &&
    document_version.sanitizer_version.to_s == sanitizer_version.to_s
end

#to_sObject



65
# File 'lib/clickwrap/models/event_document.rb', line 65

def to_s = "#{document_key} #{version_label} (#{locale})"