Module: SNOWTAM

Defined in:
src/snowtam_parser.rb

Class Method Summary collapse

Class Method Details

.map_messages!(messages) ⇒ Object



2
3
4
5
6
7
8
# File 'src/snowtam_parser.rb', line 2

def self.map_messages!(messages)
  messages.map! do |m|
    m =~ /\nA\)/ ? parse_old(m) : parse_new(m)
  rescue => e
    { parse_error: e.message, message: m}
  end
end

.parse_new(m) ⇒ Object



20
21
22
23
24
25
# File 'src/snowtam_parser.rb', line 20

def self.parse_new(m)
  data = { message: m }
  data.merge!(/(?<id>SW\S+)\s+(?<code>\S{4})\s+(?<date>\d+)\n/m.match(m).named_captures)
  data.merge!(/\(SNOWTAM\s\d+\n#{data['code']}\n(?<body>.*)\)/m.match(m).named_captures)
  data
end

.parse_old(m) ⇒ Object



11
12
13
14
15
16
17
18
# File 'src/snowtam_parser.rb', line 11

def self.parse_old(m)
  data = { message: m, version: 'old' }
  data.merge!(/(?<id>SW\S+)\s+(?<code>\S{4})\s+(?<date>\d+)\n/m.match(m).named_captures)
  data.merge!(/\(SNOWTAM\s\d+\n(?<body>.*)\)/m.match(m).named_captures)
  sections = data['body'].scan(/(^|\n|\s)(?<k>[A-Z])\)(?<b>(.(?!(\s|\n)[A-Z]\)))*.)/m).to_h
  data.merge! sections: sections
  data
end