metar-parser 0.9.14 → 0.9.15

Sign up to get free protection for your applications and to get access to all the features.
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
- require 'rubygems' if RUBY_VERSION < '1.9'
2
- require 'rubygems/package_task'
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 > 359
99
- new( M9t::Direction.new( $1 ),
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 > 359
103
- new( M9t::Direction.new( $1 ),
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(M9t::Direction.new($1), M9t::Direction.new($2))
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
@@ -3,7 +3,7 @@ module Metar
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 0
5
5
  MINOR = 9
6
- TINY = 14
6
+ TINY = 15
7
7
 
8
8
  STRING = [ MAJOR, MINOR, TINY ].join( '.' )
9
9
  end
@@ -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 the ' do
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'
@@ -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
- hash: 39
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
- date: 2012-06-05 00:00:00 Z
19
- dependencies:
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
- version_requirements: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
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
- version_requirements: &id002 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
38
33
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
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
- version_requirements: &id003 !ruby/object:Gem::Requirement
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
- version_requirements: &id004 !ruby/object:Gem::Requirement
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
- version_requirements: &id005 !ruby/object:Gem::Requirement
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
- version_requirements: &id006 !ruby/object:Gem::Requirement
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
- name: rcov
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
- hash: 3
121
- segments:
122
- - 0
123
- version: "0"
124
- requirement: *id007
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
- description: " metar-parser is a ruby gem that downloads weather reports, parses them and formats reports.\n\n It also provides weather station listings and info (e.g. country, latitude and longitude).\n\n Reports can be fully localized (currently English and Italian are available).\n"
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
- hash: 3
179
- segments:
173
+ requirements:
174
+ - - ! '>='
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ segments:
180
178
  - 0
181
- version: "0"
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
- hash: 3
188
- segments:
182
+ requirements:
183
+ - - ! '>='
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ segments:
189
187
  - 0
190
- version: "0"
188
+ hash: -2658375331668671320
191
189
  requirements: []
192
-
193
190
  rubyforge_project: nowarning
194
- rubygems_version: 1.8.24
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