Class: Openphar::Migrators::JP::Classifier

Inherits:
Object
  • Object
show all
Defined in:
lib/openphar/migrators/jp/classifier.rb

Overview

Single dispatch point mapping a JP record's type string to the correct Openphar::Models::JP::* subclass.

JP's HTML parser already produces a type string (e.g., "CrudeDrugMonograph"); the classifier trusts it and maps to the JP-specific subclass. Falls back to JP::Monograph for unknown type strings.

MECE invariant: every type string in TYPE_MAP classifies to exactly one subclass; every other input falls back to the base.

Constant Summary collapse

TYPE_MAP =
{
  'CrudeDrugMonograph' => 'CrudeDrug',
  'ChemicalDrugMonograph' => 'ChemicalDrug',
  'FormulationMonograph' => 'Formulation',
  'BiologicalSubstanceMonograph' => 'Biological',
  'VitaminMonograph' => 'Vitamin',
  'AminoAcidMonograph' => 'AminoAcid',
  'MineralSubstanceMonograph' => 'Mineral',
}.freeze
FINAL_FALLBACK =
'Monograph'.freeze

Class Method Summary collapse

Class Method Details

.all_typesObject



39
40
41
42
43
44
# File 'lib/openphar/migrators/jp/classifier.rb', line 39

def all_types
  %i[CrudeDrug ChemicalDrug Formulation Biological
     Excipient Vitamin AminoAcid Mineral].map do |k|
    Openphar::Models::JP.const_get(k)
  end
end

.classify(type_string:, name: nil) ⇒ Class

Returns a subclass of Openphar::Models::JP::Monograph.

Parameters:

  • type_string (String, nil)

    Harmonized type string from the parser.

  • name (String, nil) (defaults to: nil)

    Monograph name (for name-based heuristics, deferred).

Returns:

  • (Class)

    a subclass of Openphar::Models::JP::Monograph



34
35
36
37
# File 'lib/openphar/migrators/jp/classifier.rb', line 34

def classify(type_string:, name: nil)
  klass_name = TYPE_MAP.fetch(type_string, FINAL_FALLBACK)
  Openphar::Models::JP.const_get(klass_name)
end