Class: CurrentMetar::Metar

Inherits:
Object
  • Object
show all
Defined in:
lib/current_metar/metar.rb

Constant Summary collapse

METAR_ATTRIBUTE_MAPPING =
{
  :wind_speed => "wind_speed_kt",
  :wind_direction => "wind_dir_degrees",
  :wind_gust_speed => "wind_gust_kt",
  :visibility => "visibility_statute_mi",
  :icao => 'station_id'
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#availableObject

Returns the value of attribute available.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def available
  @available
end

#icaoObject

Returns the value of attribute icao.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def icao
  @icao
end

#no_resultsObject

Returns the value of attribute no_results.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def no_results
  @no_results
end

#observation_timeObject

Returns the value of attribute observation_time.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def observation_time
  @observation_time
end

#temperatureObject

Returns the value of attribute temperature.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def temperature
  @temperature
end

#visibilityObject

Returns the value of attribute visibility.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def visibility
  @visibility
end

#wind_directionObject

Returns the value of attribute wind_direction.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def wind_direction
  @wind_direction
end

#wind_gust_speedObject

Returns the value of attribute wind_gust_speed.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def wind_gust_speed
  @wind_gust_speed
end

#wind_speedObject

Returns the value of attribute wind_speed.



4
5
6
# File 'lib/current_metar/metar.rb', line 4

def wind_speed
  @wind_speed
end

Class Method Details

.get_metar(icao) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
# 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

Instance Method Details

#parse_metar_xml(metar_xml) ⇒ Object



52
53
54
55
56
57
58
59
60
# 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) ⇒ Object



62
63
64
65
66
67
68
# 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