Class: SepaFileParser::Xml

Inherits:
Object
  • Object
show all
Defined in:
lib/sepa_file_parser/xml.rb

Constant Summary collapse

PARSER_MAPPING =
{
  camt052: SepaFileParser::Camt052::Base,
  camt053: SepaFileParser::Camt053::Base,
  camt054: SepaFileParser::Camt054::Base,
  pain001: SepaFileParser::Pain001::Base,
  pain002: SepaFileParser::Pain002::Base,
  pain008: SepaFileParser::Pain008::Base,
}.freeze
SUPPORTED_PARSERS =
PARSER_MAPPING.keys.freeze

Class Method Summary collapse

Class Method Details

.parse(doc) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/sepa_file_parser/xml.rb', line 30

def self.parse(doc)
  if !doc.is_a?(Nokogiri::XML::Document)
    raise SepaFileParser::Errors::NotXMLError, doc.class
  end

  namespace = doc.namespaces['xmlns']
  doc.remove_namespaces!

  parser_class = @namespace_parsers[namespace]
  if parser_class == nil
    raise SepaFileParser::Errors::UnsupportedNamespaceError, namespace
  end

  return parser_class.new(doc.xpath('Document'))
end

.register(namespace, parser) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/sepa_file_parser/xml.rb', line 18

def self.register(namespace, parser)
  if !SUPPORTED_PARSERS.include?(parser)
    raise SepaFileParser::Errors::UnsupportedParserClass, parser.to_s
  end

  if @namespace_parsers.key?(namespace) # Prevent overwriting existing registrations
    raise SepaFileParser::Errors::NamespaceAlreadyRegistered, namespace
  end

  @namespace_parsers[namespace] = PARSER_MAPPING[parser]
end