Class: Pubid::Ansi::UrnGenerator

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

Instance Attribute Summary

Attributes inherited from UrnGenerator::Base

#identifier

Instance Method Summary collapse

Methods inherited from UrnGenerator::Base

#initialize, #maybe, #urn_language, #urn_namespace, #urn_publisher, #urn_type

Constructor Details

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

Instance Method Details

#generateObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/pubid/ansi/urn_generator.rb', line 50

def generate
  parts = ["urn", "ansi"]
  parts << urn_number if urn_number
  parts << urn_part if urn_part
  parts << urn_subpart if urn_subpart
  parts << urn_year if urn_year
  parts << urn_edition if urn_edition
  parts << urn_typed_stage if urn_typed_stage

  if identifier.publisher
    parts[1] = identifier.publisher.body.to_s.downcase
  end

  if identifier.copublishers&.any?
    copubs = identifier.copublishers.map(&:body)
    parts[1] = "#{parts[1]}-#{copubs.join('-').downcase}"
  end

  if identifier.languages&.any?
    parts << identifier.languages.map(&:code).join(",")
  end

  parts.join(":")
end

#urn_editionObject



32
33
34
35
36
37
38
39
# File 'lib/pubid/ansi/urn_generator.rb', line 32

def urn_edition
  return nil unless identifier.edition

  num = identifier.edition.number
  return nil unless num

  "ed.#{num}"
end

#urn_numberObject



6
7
8
9
10
# File 'lib/pubid/ansi/urn_generator.rb', line 6

def urn_number
  return nil unless identifier.number

  identifier.number.value.to_s
end

#urn_partObject



12
13
14
15
16
# File 'lib/pubid/ansi/urn_generator.rb', line 12

def urn_part
  return nil unless identifier.part

  "-#{identifier.part.value}"
end

#urn_subpartObject



18
19
20
21
22
# File 'lib/pubid/ansi/urn_generator.rb', line 18

def urn_subpart
  return nil unless identifier.subpart

  "-#{identifier.subpart.value}"
end

#urn_typed_stageObject



41
42
43
44
45
46
47
48
# File 'lib/pubid/ansi/urn_generator.rb', line 41

def urn_typed_stage
  return nil unless identifier.typed_stage

  type_code = identifier.typed_stage.type_code
  return nil if type_code && type_code.to_s == "ans"

  type_code&.to_s
end

#urn_yearObject



24
25
26
27
28
29
30
# File 'lib/pubid/ansi/urn_generator.rb', line 24

def urn_year
  if identifier.date&.year
    return identifier.date.year.to_s
  end

  identifier.year&.to_s
end