metar-parser 0.9.14 → 0.9.15
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/README.md +8 -0
- data/Rakefile +2 -27
- data/lib/metar/data.rb +12 -5
- data/lib/metar/raw.rb +2 -2
- data/lib/metar/version.rb +1 -1
- data/spec/unit/variable_wind_spec.rb +16 -1
- data/spec/unit/wind_spec.rb +3 -0
- metadata +109 -112
data/README.md
CHANGED
@@ -59,6 +59,14 @@ parser = station.parser
|
|
59
59
|
puts parser.temperature.value
|
60
60
|
```
|
61
61
|
|
62
|
+
Use Your Own Raw Data
|
63
|
+
---------------------
|
64
|
+
```ruby
|
65
|
+
metar_string = "2012/07/28 08:54\nKHWD 280554Z AUTO 29007KT 10SM OVC008 14/12 A3002 RMK AO2 SLP176 T01390117 10211\n"
|
66
|
+
raw = Metar::Raw.new( 'KHWD', metar_string )
|
67
|
+
parser = Metar::Parser.new( raw )
|
68
|
+
```
|
69
|
+
|
62
70
|
Implementation
|
63
71
|
==============
|
64
72
|
|
data/Rakefile
CHANGED
@@ -1,16 +1,8 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require 'rdoc/task'
|
4
|
-
require 'rake/clean'
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
5
3
|
require 'rcov/rcovtask' if RUBY_VERSION < '1.9'
|
6
4
|
require 'rspec/core/rake_task'
|
7
5
|
|
8
|
-
$:.unshift(File.dirname(__FILE__) + '/lib')
|
9
|
-
require 'metar'
|
10
|
-
|
11
|
-
RDOC_OPTS = ['--quiet', '--title', 'METAR Weather Report Parser', '--main', 'README.rdoc', '--inline-source']
|
12
|
-
RDOC_PATH = 'doc/rdoc'
|
13
|
-
|
14
6
|
task :default => :spec
|
15
7
|
|
16
8
|
RSpec::Core::RakeTask.new do | t |
|
@@ -19,13 +11,6 @@ end
|
|
19
11
|
|
20
12
|
if RUBY_VERSION < '1.9'
|
21
13
|
|
22
|
-
Rake::RDocTask.new do |rdoc|
|
23
|
-
rdoc.rdoc_dir = RDOC_PATH
|
24
|
-
rdoc.options += RDOC_OPTS
|
25
|
-
rdoc.main = 'README.rdoc'
|
26
|
-
rdoc.rdoc_files.add ['README.rdoc', 'COPYING', 'lib/**/*.rb']
|
27
|
-
end
|
28
|
-
|
29
14
|
RSpec::Core::RakeTask.new( 'spec:rcov' ) do |t|
|
30
15
|
t.pattern = 'spec/**/*_spec.rb'
|
31
16
|
t.rcov = true
|
@@ -34,13 +19,3 @@ if RUBY_VERSION < '1.9'
|
|
34
19
|
|
35
20
|
end
|
36
21
|
|
37
|
-
desc "Build the gem"
|
38
|
-
task :build do
|
39
|
-
`gem build metar-parser.gemspec`
|
40
|
-
end
|
41
|
-
|
42
|
-
desc "Publish a new version of the gem"
|
43
|
-
task :release => :build do
|
44
|
-
`gem push metar-parser-#{Metar::VERSION::STRING}.gem`
|
45
|
-
end
|
46
|
-
|
data/lib/metar/data.rb
CHANGED
@@ -90,17 +90,24 @@ module Metar
|
|
90
90
|
|
91
91
|
end
|
92
92
|
|
93
|
+
class Direction < M9t::Direction
|
94
|
+
def initialize( direction )
|
95
|
+
direction = M9t::Direction::normalize( direction.to_f )
|
96
|
+
super( direction )
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
93
100
|
class Wind
|
94
101
|
|
95
102
|
def Wind.parse(s)
|
96
103
|
case
|
97
104
|
when s =~ /^(\d{3})(\d{2}(|MPS|KMH|KT))$/
|
98
|
-
return nil if $1.to_i >
|
99
|
-
new(
|
105
|
+
return nil if $1.to_i > 360
|
106
|
+
new( Direction.new( $1 ),
|
100
107
|
Speed.parse( $2 ) )
|
101
108
|
when s =~ /^(\d{3})(\d{2})G(\d{2,3}(|MPS|KMH|KT))$/
|
102
|
-
return nil if $1.to_i >
|
103
|
-
new(
|
109
|
+
return nil if $1.to_i > 360
|
110
|
+
new( Direction.new( $1 ),
|
104
111
|
Speed.parse( $2 + $4 ),
|
105
112
|
Speed.parse( $3 ) )
|
106
113
|
when s =~ /^VRB(\d{2}(|MPS|KMH|KT))$/
|
@@ -160,7 +167,7 @@ module Metar
|
|
160
167
|
|
161
168
|
def VariableWind.parse(variable_wind)
|
162
169
|
if variable_wind =~ /^(\d+)V(\d+)$/
|
163
|
-
new(
|
170
|
+
new(Direction.new($1), Direction.new($2))
|
164
171
|
else
|
165
172
|
nil
|
166
173
|
end
|
data/lib/metar/raw.rb
CHANGED
@@ -11,6 +11,7 @@ module Metar
|
|
11
11
|
def connection
|
12
12
|
return @@connection if @@connection
|
13
13
|
connect
|
14
|
+
@@connection
|
14
15
|
end
|
15
16
|
|
16
17
|
def connect
|
@@ -18,7 +19,6 @@ module Metar
|
|
18
19
|
@@connection.login
|
19
20
|
@@connection.chdir('data/observations/metar/stations')
|
20
21
|
@@connection.passive = true
|
21
|
-
@@connection
|
22
22
|
end
|
23
23
|
|
24
24
|
def fetch( cccc )
|
@@ -30,7 +30,7 @@ module Metar
|
|
30
30
|
s << chunk
|
31
31
|
end
|
32
32
|
return s
|
33
|
-
rescue Net::FTPTempError, EOFError => e
|
33
|
+
rescue Net::FTPPermError, Net::FTPTempError, EOFError => e
|
34
34
|
connect
|
35
35
|
attempts += 1
|
36
36
|
end
|
data/lib/metar/version.rb
CHANGED
@@ -12,6 +12,21 @@ describe Metar::VariableWind do
|
|
12
12
|
vw.direction2.value. should == 180.0
|
13
13
|
end
|
14
14
|
|
15
|
+
it 'accepts 360, rounding to 0 - 1' do
|
16
|
+
vw = Metar::VariableWind.parse( '360V090' )
|
17
|
+
|
18
|
+
vw.direction1.value. should == 0.0
|
19
|
+
vw.direction2.value. should == 90.0
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
it 'accepts 360, rounding to 0 - 2' do
|
24
|
+
vw = Metar::VariableWind.parse( '090V360' )
|
25
|
+
|
26
|
+
vw.direction1.value. should == 90.0
|
27
|
+
vw.direction2.value. should == 0.0
|
28
|
+
end
|
29
|
+
|
15
30
|
it 'returns nil for other' do
|
16
31
|
vw = Metar::VariableWind.parse( 'XXX' )
|
17
32
|
|
@@ -22,7 +37,7 @@ describe Metar::VariableWind do
|
|
22
37
|
|
23
38
|
context '#to_s' do
|
24
39
|
|
25
|
-
it 'renders
|
40
|
+
it 'renders compatible values as compass directions' do
|
26
41
|
vw = Metar::VariableWind.parse( '090V180' )
|
27
42
|
|
28
43
|
vw.to_s. should == 'E - S'
|
data/spec/unit/wind_spec.rb
CHANGED
@@ -5,6 +5,8 @@ RSpec::Matchers.define :be_wind do | direction, speed, gusts |
|
|
5
5
|
match do | wind |
|
6
6
|
if wind.nil? && [ direction, speed, gusts ].all?( &:nil? )
|
7
7
|
true
|
8
|
+
elsif wind.nil?
|
9
|
+
false
|
8
10
|
elsif wind.direction.nil? != direction.nil?
|
9
11
|
false
|
10
12
|
elsif wind.speed.nil? != speed.nil?
|
@@ -36,6 +38,7 @@ describe Metar::Wind do
|
|
36
38
|
[ 'understands 5 digits + KMH', '12345KMH', [ 123.0, 12.50, nil ] ],
|
37
39
|
[ 'understands 5 digits + MPS', '12345MPS', [ 123.0, 45.00, nil ] ],
|
38
40
|
[ 'understands 5 digits + KT', '12345KT', [ 123.0, 23.15, nil ] ],
|
41
|
+
[ 'rounds 360 down to 0', '36045KT', [ 0.0, 23.15, nil ] ],
|
39
42
|
[ 'returns nil for directions outside 0 to 360', '88845KT', [ nil, nil, nil ] ],
|
40
43
|
[ 'understands 5 digits + G + 2 digits', '12345G67', [ 123.0, 12.50, 18.61 ] ],
|
41
44
|
[ 'understands 5 digits + G + 2 digits + MPS', '12345G67MPS', [ 123.0, 45.00, 67.00 ] ],
|
metadata
CHANGED
@@ -1,137 +1,137 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: metar-parser
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.15
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
|
-
- 14
|
10
|
-
version: 0.9.14
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Joe Yates
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
prerelease: false
|
12
|
+
date: 2012-07-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rake
|
23
|
-
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
32
|
-
requirement: *id001
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :runtime
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
23
|
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
36
31
|
name: rdoc
|
37
|
-
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
38
33
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
46
|
-
requirement: *id002
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
47
38
|
type: :runtime
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
39
|
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
50
47
|
name: i18n
|
51
|
-
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
52
49
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
hash: 25
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
- 3
|
60
|
-
- 5
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
61
53
|
version: 0.3.5
|
62
|
-
requirement: *id003
|
63
54
|
type: :runtime
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
55
|
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.3.5
|
62
|
+
- !ruby/object:Gem::Dependency
|
66
63
|
name: aasm
|
67
|
-
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
68
65
|
none: false
|
69
|
-
requirements:
|
70
|
-
- -
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
hash: 1
|
73
|
-
segments:
|
74
|
-
- 2
|
75
|
-
- 1
|
76
|
-
- 5
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
77
69
|
version: 2.1.5
|
78
|
-
requirement: *id004
|
79
70
|
type: :runtime
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
71
|
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.1.5
|
78
|
+
- !ruby/object:Gem::Dependency
|
82
79
|
name: m9t
|
83
|
-
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
84
81
|
none: false
|
85
|
-
requirements:
|
82
|
+
requirements:
|
86
83
|
- - ~>
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
hash: 17
|
89
|
-
segments:
|
90
|
-
- 0
|
91
|
-
- 3
|
92
|
-
- 1
|
84
|
+
- !ruby/object:Gem::Version
|
93
85
|
version: 0.3.1
|
94
|
-
requirement: *id005
|
95
86
|
type: :runtime
|
96
|
-
- !ruby/object:Gem::Dependency
|
97
87
|
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.3.1
|
94
|
+
- !ruby/object:Gem::Dependency
|
98
95
|
name: rspec
|
99
|
-
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
100
97
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
hash: 3
|
105
|
-
segments:
|
106
|
-
- 2
|
107
|
-
- 3
|
108
|
-
- 0
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
109
101
|
version: 2.3.0
|
110
|
-
requirement: *id006
|
111
102
|
type: :development
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
103
|
prerelease: false
|
114
|
-
|
115
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
116
105
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 2.3.0
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: simplecov
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
125
118
|
type: :development
|
126
|
-
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: ! " metar-parser is a ruby gem that downloads weather reports, parses
|
127
|
+
them and formats reports.\n\n It also provides weather station listings and info
|
128
|
+
(e.g. country, latitude and longitude).\n\n Reports can be fully localized (currently
|
129
|
+
English and Italian are available).\n"
|
127
130
|
email: joe.g.yates@gmail.com
|
128
131
|
executables: []
|
129
|
-
|
130
132
|
extensions: []
|
131
|
-
|
132
133
|
extra_rdoc_files: []
|
133
|
-
|
134
|
-
files:
|
134
|
+
files:
|
135
135
|
- README.md
|
136
136
|
- COPYING
|
137
137
|
- Rakefile
|
@@ -164,38 +164,35 @@ files:
|
|
164
164
|
- locales/en.yml
|
165
165
|
homepage: http://github.com/joeyates/metar-parser
|
166
166
|
licenses: []
|
167
|
-
|
168
167
|
post_install_message:
|
169
168
|
rdoc_options: []
|
170
|
-
|
171
|
-
require_paths:
|
169
|
+
require_paths:
|
172
170
|
- lib
|
173
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
171
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
174
172
|
none: false
|
175
|
-
requirements:
|
176
|
-
- -
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
|
179
|
-
segments:
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
segments:
|
180
178
|
- 0
|
181
|
-
|
182
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
|
+
hash: -2658375331668671320
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
181
|
none: false
|
184
|
-
requirements:
|
185
|
-
- -
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
|
188
|
-
segments:
|
182
|
+
requirements:
|
183
|
+
- - ! '>='
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
186
|
+
segments:
|
189
187
|
- 0
|
190
|
-
|
188
|
+
hash: -2658375331668671320
|
191
189
|
requirements: []
|
192
|
-
|
193
190
|
rubyforge_project: nowarning
|
194
|
-
rubygems_version: 1.8.
|
191
|
+
rubygems_version: 1.8.23
|
195
192
|
signing_key:
|
196
193
|
specification_version: 3
|
197
194
|
summary: A Ruby gem for worldwide weather reports
|
198
|
-
test_files:
|
195
|
+
test_files:
|
199
196
|
- spec/unit/runway_visible_range_spec.rb
|
200
197
|
- spec/unit/vertical_visibility_spec.rb
|
201
198
|
- spec/unit/report_spec.rb
|