current_metar 0.1.2 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/current_metar/metar.rb +27 -16
- metadata +4 -4
data/lib/current_metar/metar.rb
CHANGED
@@ -1,23 +1,19 @@
|
|
1
1
|
class CurrentMetar::Metar
|
2
2
|
require 'rexml/document'
|
3
|
-
|
4
|
-
attr_accessor :wind_speed, :wind_direction, :wind_gust_speed, :observation_time, :visibility, :temperature, :available, :no_results, :observation_time
|
5
|
-
attr_reader :icao
|
3
|
+
attr_accessor :wind_speed, :wind_direction, :wind_gust_speed, :observation_time, :visibility, :temperature, :available, :no_results, :icao
|
6
4
|
|
7
5
|
METAR_ATTRIBUTE_MAPPING = {
|
8
6
|
:wind_speed => "wind_speed_kt",
|
9
7
|
:wind_direction => "wind_dir_degrees",
|
10
8
|
:wind_gust_speed => "wind_gust_kt",
|
11
|
-
:visibility => "visibility_statute_mi"
|
9
|
+
:visibility => "visibility_statute_mi",
|
10
|
+
:icao => 'station_id'
|
12
11
|
}
|
13
12
|
|
14
|
-
def initialize(icao)
|
15
|
-
@icao = icao
|
16
|
-
end
|
17
13
|
|
18
14
|
def self.get_metar(icao)
|
19
|
-
|
20
|
-
metar =
|
15
|
+
metar = CurrentMetar::Metar.new()
|
16
|
+
metar.icao = icao
|
21
17
|
begin
|
22
18
|
metar_response_body = REXML::Document.new(CurrentMetar::Request.query_adds(metar.icao))
|
23
19
|
if metar_response_body.root.elements['data'].attributes.get_attribute('num_results').value == '0'
|
@@ -25,13 +21,7 @@ class CurrentMetar::Metar
|
|
25
21
|
metar.no_results = true
|
26
22
|
else
|
27
23
|
metar_response_body.root.elements.each("data/METAR") do |metar_xml|
|
28
|
-
|
29
|
-
metar.temperature = (9/5.0 * metar_xml.elements['temp_c'].text.to_i + 32).round
|
30
|
-
end
|
31
|
-
unless metar_xml.elements['observation_time'].nil?
|
32
|
-
metar.observation_time = Time.parse(metar_xml.elements['observation_time'].text)
|
33
|
-
end
|
34
|
-
metar.parse_standard_attributes(metar_xml)
|
24
|
+
metar.parse_metar_xml(metar_xml)
|
35
25
|
end
|
36
26
|
metar.available = true
|
37
27
|
metar.no_results = false
|
@@ -44,6 +34,27 @@ class CurrentMetar::Metar
|
|
44
34
|
end
|
45
35
|
end
|
46
36
|
|
37
|
+
def self.new_from_xml(metar_xml)
|
38
|
+
metar = CurrentMetar::Metar.new()
|
39
|
+
begin
|
40
|
+
metar.parse_metar_xml(metar_xml)
|
41
|
+
metar.available = true
|
42
|
+
metar.no_results = false
|
43
|
+
rescue
|
44
|
+
metar.availabe = false
|
45
|
+
metar.no_results = false
|
46
|
+
ensure
|
47
|
+
return metar
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def parse_metar_xml(metar_xml)
|
52
|
+
unless metar_xml.elements['temp_c'].nil?
|
53
|
+
self.temperature = (9/5.0 * metar_xml.elements['temp_c'].text.to_i + 32).round
|
54
|
+
end
|
55
|
+
self.parse_standard_attributes(metar_xml)
|
56
|
+
end
|
57
|
+
|
47
58
|
def parse_standard_attributes(metar_xml)
|
48
59
|
METAR_ATTRIBUTE_MAPPING.each do |key, value|
|
49
60
|
unless metar_xml.elements[value].nil?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: current_metar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-07 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fakeweb
|
16
|
-
requirement: &
|
16
|
+
requirement: &70338441703020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70338441703020
|
25
25
|
description: current_metar queries the ADDS Experimental server to pull back current
|
26
26
|
weather data for a specific reporting station
|
27
27
|
email:
|