Class: Dcc::Inspect::Report

Inherits:
Lutaml::Model::Serializable
  • Object
show all
Defined in:
lib/dcc/inspect/report.rb

Overview

Dcc::Inspect::Report summarizes a parsed DCC: counts, key identifiers, signature presence, and a human-readable to_s / to_json / to_yaml.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.call(dcc) ⇒ Dcc::Inspect::Report

Parameters:

  • dcc (Lutaml::Model::Serializable)

Returns:



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/dcc/inspect/report.rb', line 58

def call(dcc)
  admin = admin_data(dcc)
  mr_list = measurement_results(dcc)
  new(
    schema_version: dcc.schema_version.to_s,
    unique_identifier: core_data(dcc)&.unique_identifier,
    country_code: core_data(dcc)&.country_code_iso_3166_1.to_s,
    item_count: items(dcc).size,
    measurement_result_count: mr_list.size,
    quantity_count: count_quantities(mr_list),
    list_count: count_lists(mr_list),
    embedded_file_count: ::Dcc::Extract::File.each(dcc).size,
    languages: lang_codes(dcc),
    signer_count: resp_persons(dcc).size,
    has_signature: signature_present?(dcc),
  )
end

Instance Method Details

#to_json(*_args) ⇒ Object



41
42
43
44
45
46
# File 'lib/dcc/inspect/report.rb', line 41

def to_json(*_args)
  require "json"
  payload = {}
  self.class.attributes.each_key { |k| payload[k] = public_send(k) }
  ::JSON.pretty_generate(payload)
end

#to_sObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/dcc/inspect/report.rb', line 23

def to_s
  lines = []
  lines << "DCC Inspection Report"
  lines << "=" * 50
  lines << "Schema version:     #{schema_version}"
  lines << "Unique identifier:  #{unique_identifier}"
  lines << "Country:            #{country_code}"
  lines << "Languages:          #{languages.join(', ')}" if languages.any?
  lines << "Items:              #{item_count}"
  lines << "Measurement results: #{measurement_result_count}"
  lines << "Quantities:         #{quantity_count}"
  lines << "Lists:              #{list_count}"
  lines << "Embedded files:     #{embedded_file_count}"
  lines << "Signers:            #{signer_count}"
  lines << "Has signature:      #{has_signature ? 'yes' : 'no'}"
  lines.join("\n")
end

#to_yaml(*_args) ⇒ Object



48
49
50
51
52
53
# File 'lib/dcc/inspect/report.rb', line 48

def to_yaml(*_args)
  require "yaml"
  payload = {}
  self.class.attributes.each_key { |k| payload[k] = public_send(k) }
  payload.to_yaml
end