Class: Pubid::Nist::Series::Ir

Inherits:
LetterPreserving show all
Defined in:
lib/pubid/nist/series/ir.rb

Overview

IR (Interagency Report) series carries the most series-specific logic:

  • “R” or “Ur” letter suffix becomes revision “r1” (e.g., “79-1786R”).

  • part_num alongside second_num becomes a Part component (type “pt”).

  • Preprocessing converts “84-2946” → “84e2946”; this class reverses that side effect so IR keeps the compound number form.

Class Method Summary collapse

Methods inherited from LetterPreserving

preserve_letter_suffix?

Methods inherited from Base

combine_letter_suffix, modern_edition_date?, preserve_letter_suffix?

Class Method Details

.cast_letter_number(value, _parsed_hash) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/pubid/nist/series/ir.rb', line 13

def self.cast_letter_number(value, _parsed_hash)
  full = combine_letter_suffix(value)
  return nil if full.nil? || full.empty?

  if ["R", "Ur"].include?(full)
    value[:letter_suffix] = full
    value
  else
    super
  end
end

.finalize_identifier(identifier, _parsed_hash) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/pubid/nist/series/ir.rb', line 44

def self.finalize_identifier(identifier, _parsed_hash)
  return unless identifier.number

  value = identifier.number.value.to_s
  match = value.match(/^(\d+)e(\d{4})$/)
  return unless match

  identifier.number = Components::Code.new(
    value: "#{match[1]}-#{match[2]}",
  )
  identifier.edition = nil
  identifier.edition_component = nil
end

.handle_letter_num_compound?(identifier, first_num:, letter_base:, letter_suffix:) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/pubid/nist/series/ir.rb', line 29

def self.handle_letter_num_compound?(identifier,
                                     first_num:, letter_base:,
                                     letter_suffix:)
  return false unless letter_suffix == "R"

  identifier.number = Components::Code.new(
    value: "#{first_num.value}-#{letter_base}",
  )
  edition_obj = Components::Edition.new(type: "r", id: "1")
  identifier.edition = edition_obj
  identifier.edition_component = edition_obj
  identifier.revision = "r1"
  true
end

.part_num_as_component?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/pubid/nist/series/ir.rb', line 25

def self.part_num_as_component?
  true
end