Class: Pubid::Nist::UrnGenerator

Inherits:
UrnGenerator::Base show all
Defined in:
lib/pubid/nist/urn_generator.rb

Instance Attribute Summary

Attributes inherited from UrnGenerator::Base

#identifier

Instance Method Summary collapse

Methods inherited from UrnGenerator::Base

#initialize, #maybe, #urn_edition, #urn_language, #urn_namespace, #urn_number, #urn_part, #urn_publisher, #urn_subpart, #urn_type, #urn_year

Constructor Details

This class inherits a constructor from Pubid::UrnGenerator::Base

Instance Method Details

#generateObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/pubid/nist/urn_generator.rb', line 6

def generate
  parts = ["urn", "nist"]

  if identifier.series
    series = identifier.series.to_s
    parts << series.downcase
  elsif (sc = maybe(:series_code))
    parts << sc.downcase
  else
    parts << "sp"
  end

  identifier_parts = []

  if identifier.number
    number = identifier.number.to_s
    identifier_parts << number
  end

  if identifier.parts&.any?
    identifier_parts += identifier.parts.map { |p| "-#{p}" }
  end

  if identifier.edition
    identifier_parts << identifier.edition.to_s
  end

  if identifier.volume
    vol = identifier.volume.to_s
    identifier_parts << vol
  end

  if identifier.part && identifier.part
    identifier_parts << identifier.part.to_s
  end

  if identifier.volume && identifier.issue_number
    vol_str = identifier.volume.to_s
    issue_str = identifier.issue_number.to_s
    identifier_parts << "#{vol_str}n#{issue_str}"
  end

  if identifier.version_component
    identifier_parts << identifier.version_component.to_s
  elsif identifier.version
    identifier_parts << "ver.#{identifier.version}"
  end

  if identifier.update_component
    identifier_parts << identifier.update_component.to_s
  elsif identifier.update
    identifier_parts << "-upd#{identifier.update}"
  end

  if identifier.stage
    identifier_parts << identifier.stage.to_s
  end

  supp = identifier.supplement
  if identifier.supplement_date_range_start && identifier.supplement_date_range_end
    identifier_parts << "supp#{identifier.supplement_date_range_start}-#{identifier.supplement_date_range_end}"
  elsif identifier.supplement_has_revision
    identifier_parts << "supprev"
  elsif supp && !supp.empty?
    identifier_parts << if supp.match?(/^[A-Z]/)
                          "supp#{supp}"
                        else
                          "supp-#{supp}"
                        end
  elsif !supp
    identifier_parts << "supp"
  end

  if identifier.errata
    identifier_parts << identifier.errata
  end

  if identifier.addendum || identifier.addendum_number
    identifier_parts << "add."
  end

  if identifier.draft_number
    identifier_parts << "#{identifier.draft_number}pd"
  elsif identifier.draft&.to_s&.include?("draft")
    identifier_parts << "-draft"
  end

  if identifier.index
    identifier_parts << "index"
  end

  if identifier.insert
    identifier_parts << "insert"
  end

  if identifier.section
    identifier_parts << "sec#{identifier.section}"
  end

  if identifier.appendix
    identifier_parts << "app"
  end

  parts << identifier_parts.join(".") unless identifier_parts.empty?

  if identifier.translation_component
    trans = identifier.translation_component
    lang = if trans&.language
             trans.language
           elsif trans.is_a?(String)
             trans
           end
    parts << lang.downcase if lang
  elsif identifier.translation
    parts << identifier.translation.downcase
  end

  parts.join(":")
end