class CurrentMetar::Metar

Constants

METAR_ATTRIBUTE_MAPPING

Attributes

available[RW]
icao[RW]
no_results[RW]
observation_time[RW]
temperature[RW]
visibility[RW]
wind_direction[RW]
wind_gust_speed[RW]
wind_speed[RW]

Public Class Methods

get_metar(icao) click to toggle source
# File lib/current_metar/metar.rb, line 15
def self.get_metar(icao)
  metar = CurrentMetar::Metar.new()
  metar.icao = icao
  begin
    metar_response_body  = REXML::Document.new(CurrentMetar::Request.query_adds(metar.icao))
    if metar_response_body.root.elements['data'].attributes.get_attribute('num_results').value == '0'
      metar.available = false
      metar.no_results = true
    else
      metar_response_body.root.elements.each("data/METAR") do |metar_xml|
        metar.parse_metar_xml(metar_xml)
      end
      metar.available = true
      metar.no_results = false
    end
  rescue
    metar.available = false
    metar.no_results = false
  ensure
    return metar
  end
end
new_from_xml(metar_xml) click to toggle source
# File lib/current_metar/metar.rb, line 38
def self.new_from_xml(metar_xml)
  metar = CurrentMetar::Metar.new()
  begin
    metar.parse_metar_xml(metar_xml)
    metar.available = true
    metar.no_results = false
  rescue
    metar.availabe = false
    metar.no_results = false
  ensure
    return metar
  end
end

Public Instance Methods

parse_metar_xml(metar_xml) click to toggle source
# File lib/current_metar/metar.rb, line 52
def parse_metar_xml(metar_xml)
  unless metar_xml.elements['temp_c'].nil?
    self.temperature = (9/5.0 * metar_xml.elements['temp_c'].text.to_i + 32).round
  end
  unless metar_xml.elements['observation_time'].nil?
    self.observation_time = Time.parse(metar_xml.elements['observation_time'].text)
  end
  self.parse_standard_attributes(metar_xml)
end
parse_standard_attributes(metar_xml) click to toggle source
# File lib/current_metar/metar.rb, line 62
def parse_standard_attributes(metar_xml)
  METAR_ATTRIBUTE_MAPPING.each do |key, value|
    unless metar_xml.elements[value].nil?
      self.send( "#{key}=", metar_xml.elements[value].text)
    end
  end
end