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.
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: