Class: Dcc::Builder::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/dcc/builder/session.rb

Overview

A builder session tracks the current container (administrative_data, items, measurement_results) and produces a fully populated Dcc::V2::DigitalCalibrationCertificate or Dcc::V3::DigitalCalibrationCertificate on build.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version: 3) ⇒ Session

Returns a new instance of Session.



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/dcc/builder/session.rb', line 10

def initialize(version: 3)
  @version = version
  case version
  when 2 then ::Dcc::V2.load_all!
  when 3 then ::Dcc::V3.load_all!
  else
    raise ::Dcc::UnknownVersionError,
          "Unsupported DCC version: #{version.inspect}"
  end
  @administrative_in_progress = new_administrative_data
  @results_in_progress = []
  @items_in_progress = []
end

Instance Attribute Details

#versionObject (readonly)

Returns the value of attribute version.



24
25
26
# File 'lib/dcc/builder/session.rb', line 24

def version
  @version
end

Instance Method Details

#administrative_data(**attrs, &block) ⇒ Object

Top-level DSL methods. Each opens a nested container that captures subsequent setter calls via instance_eval.



28
29
30
31
32
# File 'lib/dcc/builder/session.rb', line 28

def administrative_data(**attrs, &block)
  apply_attrs(@administrative_in_progress, attrs)
  instance_eval(&block) if block_given?
  @administrative_in_progress
end

#begin_performance_date(value) ⇒ Object



94
95
96
# File 'lib/dcc/builder/session.rb', line 94

def begin_performance_date(value)
  ensure_core_data.begin_performance_date = value
end

#buildDcc::V2::DigitalCalibrationCertificate, Dcc::V3::DigitalCalibrationCertificate



103
104
105
106
107
108
109
110
111
# File 'lib/dcc/builder/session.rb', line 103

def build
  validate_required_sections!
  dcc = new_digital_calibration_certificate
  dcc.schema_version = @version == 2 ? "2.3.0" : "3.3.0"
  dcc.administrative_data = @administrative_in_progress
  dcc.measurement_results = new_measurement_results
  dcc.measurement_results.measurement_result = @results_in_progress
  dcc
end

#core_data(**attrs, &block) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/dcc/builder/session.rb', line 34

def core_data(**attrs, &block)
  cd = new_core_data
  apply_attrs(cd, attrs)
  @administrative_in_progress.core_data = cd
  instance_eval(&block) if block_given?
  cd
end

#country_code(value) ⇒ Object



80
81
82
# File 'lib/dcc/builder/session.rb', line 80

def country_code(value)
  ensure_core_data.country_code_iso_3166_1 = value
end

#end_performance_date(value) ⇒ Object



98
99
100
# File 'lib/dcc/builder/session.rb', line 98

def end_performance_date(value)
  ensure_core_data.end_performance_date = value
end

#item(**attrs, &block) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/dcc/builder/session.rb', line 50

def item(**attrs, &block)
  it = new_item
  apply_attrs(it, attrs)
  instance_eval(&block) if block_given?
  (@items_in_progress ||= []) << it
  # Wire into the open items container if present.
  if @administrative_in_progress&.items
    current = @administrative_in_progress.items.item
    @administrative_in_progress.items.item = Array(current) + [it]
  end
  it
end

#items(**attrs, &block) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/dcc/builder/session.rb', line 42

def items(**attrs, &block)
  items_obj = new_items
  apply_attrs(items_obj, attrs)
  @administrative_in_progress.items = items_obj
  instance_eval(&block) if block_given?
  items_obj
end

#mandatory_lang(value) ⇒ Object



89
90
91
92
# File 'lib/dcc/builder/session.rb', line 89

def mandatory_lang(value)
  cd = ensure_core_data
  cd.mandatory_lang_code_iso_639_1 = Array(cd.mandatory_lang_code_iso_639_1) + [value]
end

#measurement_result(**attrs, &block) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/dcc/builder/session.rb', line 67

def measurement_result(**attrs, &block)
  mr = new_measurement_result
  apply_attrs(mr, attrs)
  instance_eval(&block) if block_given?
  @results_in_progress << mr
  mr
end

#measurement_results(**_attrs, &block) ⇒ Object



63
64
65
# File 'lib/dcc/builder/session.rb', line 63

def measurement_results(**_attrs, &block)
  instance_eval(&block) if block_given?
end

#unique_identifier(value) ⇒ Object

CoreData convenience setters



76
77
78
# File 'lib/dcc/builder/session.rb', line 76

def unique_identifier(value)
  ensure_core_data.unique_identifier = value
end

#used_lang(value) ⇒ Object



84
85
86
87
# File 'lib/dcc/builder/session.rb', line 84

def used_lang(value)
  cd = ensure_core_data
  cd.used_lang_code_iso_639_1 = Array(cd.used_lang_code_iso_639_1) + [value]
end