class DWML
The DWML
class is the main entrypoint for processing DWML
Nokogiri XML documents.
See graphical.weather.gov/xml/mdl/XML/Design/MDL_XML_Design.pdf for authoritative type definitions
Usage¶ ↑
output = DWML.new(nokogiri_xml_doc).process
Constants
- VERSION
Attributes
output[R]
xmldoc[R]
Public Class Methods
new(xmldoc)
click to toggle source
Creates a new instance of the DWML
class.
@param Nokogiri::XML::Document @return [DWML]
# File lib/dwml.rb, line 26 def initialize(xmldoc) @xmldoc = xmldoc @output = {} end
Public Instance Methods
process()
click to toggle source
Processes the associated XML document with DWML
object and returns a detailed hash of the weather metrics and also stores it in the +@output+ instance variable.
@return [Hash]
Hash Structure¶ ↑
The returned hash will have a consistent structure under :product
and :source
keys. The :parameters
value will vary depending on the original XML/DWML document that is passed to DWML.new
.
Example Output¶ ↑
{:product=> {:title=>"NOAA's National Weather Service Forecast Data", :field=>"meteorological", :category=>"forecast", :creation_date=>Thu, 05 Mar 2020 18:49:42 UTC +00:00}, :source=> {:product_center=> "Meteorological Development Laboratory - Product Generation Branch", :more_information=>"https://graphical.weather.gov/xml/", :disclaimer=>"http://www.nws.noaa.gov/disclaimer.html", :credit=>"https://www.weather.gov/", :credit_logo=>"https://www.weather.gov/logorequest", :feedback=>"https://www.weather.gov/contact"}, :parameters=> {"point1"=> {:latitude=>38.99, :longitude=>-77.01, :temperature=> {:maximum=> {:name=>"Daily Maximum Temperature", :values=> [{:value=>48.0, :start_time=>Sat, 07 Mar 2020 12:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Sun, 08 Mar 2020 00:00:00 UTC +00:00}, {:value=>59.0, :start_time=>Sun, 08 Mar 2020 12:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Mon, 09 Mar 2020 00:00:00 UTC +00:00}, {:value=>68.0, :start_time=>Mon, 09 Mar 2020 12:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Tue, 10 Mar 2020 00:00:00 UTC +00:00}, {:value=>66.0, :start_time=>Tue, 10 Mar 2020 12:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Wed, 11 Mar 2020 00:00:00 UTC +00:00}, {:value=>62.0, :start_time=>Wed, 11 Mar 2020 12:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Thu, 12 Mar 2020 00:00:00 UTC +00:00}]}, :minimum=> {:name=>"Daily Minimum Temperature", :values=> [{:value=>35.0, :start_time=>Sat, 07 Mar 2020 00:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Sat, 07 Mar 2020 13:00:00 UTC +00:00}, {:value=>31.0, :start_time=>Sun, 08 Mar 2020 01:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Sun, 08 Mar 2020 13:00:00 UTC +00:00}, {:value=>40.0, :start_time=>Mon, 09 Mar 2020 00:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Mon, 09 Mar 2020 13:00:00 UTC +00:00}, {:value=>51.0, :start_time=>Tue, 10 Mar 2020 00:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Tue, 10 Mar 2020 13:00:00 UTC +00:00}, {:value=>48.0, :start_time=>Wed, 11 Mar 2020 00:00:00 UTC +00:00, :unit=>"Fahrenheit", :end_time=>Wed, 11 Mar 2020 13:00:00 UTC +00:00}]}}}}}
# File lib/dwml.rb, line 111 def process if @xmldoc.is_a?(Nokogiri::XML::Document) build_head build_data output else raise DWML::NokogiriDocumentError, "The input is not an Nokogiri::XML::Document" end end
Protected Instance Methods
build_data()
click to toggle source
# File lib/dwml.rb, line 128 def build_data extractor = DataExtractor.new(xmldoc.xpath("//dwml/data").first) @output.merge!(extractor.process) end
build_head()
click to toggle source
# File lib/dwml.rb, line 123 def build_head extractor = HeadExtractor.new(xmldoc.xpath("//dwml/head").first) @output.merge!(extractor.process) end