Class: Pubid::Nist::Parser

Inherits:
Core::Parser
  • Object
show all
Defined in:
lib/pubid/nist/parser.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#parsedObject

Returns the value of attribute parsed.



3
4
5
# File 'lib/pubid/nist/parser.rb', line 3

def parsed
  @parsed
end

Instance Method Details

#find_parser(publisher, series) ⇒ Object



37
38
39
# File 'lib/pubid/nist/parser.rb', line 37

def find_parser(publisher, series)
  PARSERS_CLASSES[series] || PARSERS_CLASSES["#{publisher} #{series}"] || Pubid::Nist::Parsers::Default
end

#parse(code) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/pubid/nist/parser.rb', line 14

def parse(code)
  parsed = super(code)
  series = if parsed[:series]
             parsed[:series].to_s
           else
             SERIES["mr"].key(parsed[:series_mr].to_s)
           end
  publisher = parsed[:publisher]
  parser = find_parser(publisher, series)
  begin
    parsed = parser.new.parse(parsed[:remaining].to_s)
  rescue Parslet::ParseFailed
    # for PubID 1.0 identifier series specific parser might fail,
    # so parse using Default parser which is comply with PubID 1.0
    parsed = Parsers::Default.new.parse(parsed[:remaining].to_s)
  end
  if publisher
    parsed.is_a?(Array) ? parsed << { series: series, publisher: publisher } : parsed.merge({ series: series, publisher: publisher })
  else
    parsed.is_a?(Array) ? parsed << { series: series } : parsed.merge({ series: series })
  end
end