class AIPP::LF::ENR55
Sporting and Recreational Activities
Constants
- ACTIVITIES
Map raw activities to activity and airspace type
Public Instance Methods
parse()
click to toggle source
# File lib/aipp/regions/LF/ENR-5.5.rb 18 def parse 19 prepare(html: read).css('tbody').each do |tbody| 20 tbody.css('tr').to_enum.each_slice(2).with_index(1) do |trs, index| 21 begin 22 id, activity_and_name, upper_limit, timetable = trs.first.css('td') 23 activity, name = activity_and_name.css('span') 24 lateral_limit, lower_limit, remarks = trs.last.css('td') 25 lateral_limit.search('br').each { _1.replace("|||") } 26 geometry, lateral_limit = lateral_limit.text.split('|||', 2) 27 lateral_limit&.gsub!('|||', "\n") 28 remarks = [remarks&.text&.cleanup&.blank_to_nil] 29 s = timetable&.text&.cleanup and remarks.prepend('**SCHEDULE**', s, '') 30 s = lateral_limit&.cleanup and remarks.prepend('**LATERAL LIMIT**', s, '') 31 airspace = AIXM.airspace( 32 source: source(position: trs.first.line), 33 id: id.text.strip, 34 type: ACTIVITIES.fetch(activity.text.downcase).fetch(:airspace_type), 35 name: [id.text.strip, name.text.cleanup].join(' ') 36 ).tap do |airspace| 37 airspace.geometry = geometry_from(geometry) 38 airspace.add_layer( 39 layer_from([upper_limit.text, lower_limit.text].join('---').cleanup).tap do |layer| 40 layer.activity = ACTIVITIES.fetch(activity.text.downcase).fetch(:activity) 41 layer.remarks = remarks.compact.join("\n") 42 end 43 ) 44 end 45 rescue => error 46 warn("error parsing #{airspace.type} `#{airspace.name}' at ##{index}: #{error.message}", pry: error) 47 end 48 add airspace 49 end 50 end 51 end