current_metar 0.1.2 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/current_metar/metar.rb +27 -16
  2. metadata +4 -4
@@ -1,23 +1,19 @@
1
1
  class CurrentMetar::Metar
2
2
  require 'rexml/document'
3
- require 'time'
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 = CurrentMetar::Metar.new(icao)
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
- unless metar_xml.elements['temp_c'].nil?
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.1.2
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-11-08 00:00:00.000000000Z
12
+ date: 2011-12-07 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fakeweb
16
- requirement: &16209180 !ruby/object:Gem::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: *16209180
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: