Module: Pubid::Itu

Extended by:
PrefixesSupport
Defined in:
lib/pubid/itu.rb,
lib/pubid/itu/i18n.rb,
lib/pubid/itu/model.rb,
lib/pubid/itu/parser.rb,
lib/pubid/itu/builder.rb,
lib/pubid/itu/components.rb,
lib/pubid/itu/urn_parser.rb,
lib/pubid/itu/identifiers.rb,
lib/pubid/itu/urn_generator.rb,
lib/pubid/itu/components/code.rb,
lib/pubid/itu/identifiers/base.rb,
lib/pubid/itu/components/sector.rb,
lib/pubid/itu/components/series.rb,
lib/pubid/itu/identifiers/annex.rb,
lib/pubid/itu/identifiers/errata.rb,
lib/pubid/itu/identifiers/report.rb,
lib/pubid/itu/identifiers/addendum.rb,
lib/pubid/itu/identifiers/handbook.rb,
lib/pubid/itu/identifiers/question.rb,
lib/pubid/itu/identifiers/amendment.rb,
lib/pubid/itu/components/designation.rb,
lib/pubid/itu/identifiers/supplement.rb,
lib/pubid/itu/identifiers/corrigendum.rb,
lib/pubid/itu/identifiers/recommendation.rb,
lib/pubid/itu/identifiers/combined_identifier.rb,
lib/pubid/itu/identifiers/special_publication.rb,
lib/pubid/itu/identifiers/standard_serialization.rb,
lib/pubid/itu/identifiers/annex_of_recommendation.rb,
lib/pubid/itu/identifiers/appendix_of_recommendation.rb

Defined Under Namespace

Modules: Components, Identifiers Classes: Builder, Identifier, Model, Parser, UrnGenerator, UrnParser

Constant Summary collapse

PREFIXES =

Sole ITU publisher token (see the parser's itu_prefix rule).

The leading "Report" of an ITU-R Report's canonical form ("Report ITU-R BT.2020-1") is deliberately NOT listed: prefix routing claims every reference beginning with the token, and "Report" is a generic English word that other SDOs' references start with — the mixin's documented exclusion for ambiguous tokens. Report references route by their "ITU" token in the infix spelling ("ITU-R Report BT.2020-1"), and Pubid::Itu.parse accepts both.

["ITU"].freeze
I18N =
YAML.load_file(File.expand_path("i18n.yaml", __dir__)).freeze

Class Method Summary collapse

Methods included from PrefixesSupport

prefix_flavor_key, prefixes

Class Method Details

.all_typed_stagesArray<Pubid::Components::TypedStage>

Build typed stage index from identifier types

Returns:



50
51
52
53
54
55
56
57
58
# File 'lib/pubid/itu.rb', line 50

def self.all_typed_stages
  @all_typed_stages ||= identifier_types.flat_map do |klass|
    if klass.const_defined?(:TYPED_STAGES)
      klass.const_get(:TYPED_STAGES)
    else
      []
    end
  end
end

.identifier_typesArray<Class>

Auto-discover all identifier types from the Identifiers namespace

Returns:

  • (Array<Class>)

    identifier classes (Pubid::Identifier subclasses)



39
40
41
42
43
44
45
46
# File 'lib/pubid/itu.rb', line 39

def self.identifier_types
  @identifier_types ||= Identifiers.constants
    .filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
    .select { |c| c.is_a?(Class) && c < Pubid::Identifier }
    # Exclude the flavor base itself by identity (Identifier is now an
    # alias for Pubid::Itu::Identifier, so name-based matching misses it).
    .reject { |c| c == Identifier }
end

.locate_stage(abbr) ⇒ Pubid::Components::TypedStage?

Lookup: abbreviation -> typed stage

Parameters:

  • abbr (String, Symbol)

    the abbreviation to find

Returns:



70
71
72
73
# File 'lib/pubid/itu.rb', line 70

def self.locate_stage(abbr)
  abbr_str = abbr.to_s.upcase
  all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
end

.locate_type(code) ⇒ Class?

Lookup: type code -> identifier class

Parameters:

  • code (String, Symbol)

    the type key to find

Returns:

  • (Class, nil)

    the matching identifier class



63
64
65
# File 'lib/pubid/itu.rb', line 63

def self.locate_type(code)
  identifier_types.find { |t| t.type[:key].to_s == code.to_s }
end

.parse(identifier) ⇒ Object



33
34
35
# File 'lib/pubid/itu.rb', line 33

def self.parse(identifier)
  Identifier.parse(identifier)
end