metar-parser 1.5.0 → 1.7.0
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.
- checksums.yaml +4 -4
- data/README.md +6 -48
- data/Rakefile +2 -1
- data/lib/metar/data/base.rb +16 -10
- data/lib/metar/data/density_altitude.rb +16 -10
- data/lib/metar/data/direction.rb +10 -4
- data/lib/metar/data/distance.rb +27 -20
- data/lib/metar/data/lightning.rb +69 -60
- data/lib/metar/data/observer.rb +26 -20
- data/lib/metar/data/pressure.rb +28 -22
- data/lib/metar/data/remark.rb +146 -130
- data/lib/metar/data/runway_visible_range.rb +98 -78
- data/lib/metar/data/sky_condition.rb +68 -57
- data/lib/metar/data/speed.rb +21 -14
- data/lib/metar/data/station_code.rb +8 -4
- data/lib/metar/data/temperature.rb +21 -14
- data/lib/metar/data/temperature_and_dew_point.rb +22 -16
- data/lib/metar/data/time.rb +57 -47
- data/lib/metar/data/variable_wind.rb +30 -19
- data/lib/metar/data/vertical_visibility.rb +27 -21
- data/lib/metar/data/visibility.rb +91 -79
- data/lib/metar/data/visibility_remark.rb +16 -5
- data/lib/metar/data/weather_phenomenon.rb +92 -74
- data/lib/metar/data/wind.rb +105 -93
- data/lib/metar/data.rb +25 -23
- data/lib/metar/i18n.rb +5 -2
- data/lib/metar/parser.rb +46 -21
- data/lib/metar/raw.rb +32 -44
- data/lib/metar/report.rb +31 -20
- data/lib/metar/station.rb +29 -20
- data/lib/metar/version.rb +3 -1
- data/lib/metar.rb +2 -1
- data/locales/de.yml +1 -0
- data/locales/en.yml +1 -0
- data/locales/it.yml +1 -0
- data/locales/pt-BR.yml +1 -0
- data/spec/data/density_altitude_spec.rb +2 -1
- data/spec/data/distance_spec.rb +2 -1
- data/spec/data/lightning_spec.rb +26 -9
- data/spec/data/pressure_spec.rb +2 -0
- data/spec/data/remark_spec.rb +26 -9
- data/spec/data/runway_visible_range_spec.rb +71 -35
- data/spec/data/sky_condition_spec.rb +63 -19
- data/spec/data/speed_spec.rb +2 -0
- data/spec/data/temperature_spec.rb +2 -1
- data/spec/data/variable_wind_spec.rb +2 -0
- data/spec/data/vertical_visibility_spec.rb +4 -4
- data/spec/data/visibility_remark_spec.rb +2 -1
- data/spec/data/visibility_spec.rb +46 -25
- data/spec/data/weather_phenomenon_spec.rb +79 -24
- data/spec/data/wind_spec.rb +156 -38
- data/spec/i18n_spec.rb +2 -0
- data/spec/parser_spec.rb +192 -64
- data/spec/raw_spec.rb +40 -68
- data/spec/report_spec.rb +27 -25
- data/spec/spec_helper.rb +5 -6
- data/spec/station_spec.rb +92 -52
- metadata +53 -39
@@ -1,30 +1,29 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "spec_helper"
|
3
4
|
|
4
|
-
RSpec::Matchers.define :be_runway_visible_range do |designator,
|
5
|
+
RSpec::Matchers.define :be_runway_visible_range do |designator, v1, v2, tend|
|
5
6
|
match do |rvr|
|
6
|
-
if rvr.nil?
|
7
|
+
if rvr.nil? && designator.nil?
|
7
8
|
true
|
8
|
-
elsif rvr.nil?
|
9
|
-
false
|
10
|
-
elsif rvr.visibility1.nil? != visibility1.nil?
|
9
|
+
elsif rvr.nil? != designator.nil?
|
11
10
|
false
|
12
|
-
elsif rvr.
|
11
|
+
elsif rvr.visibility1.nil? != v1.nil?
|
13
12
|
false
|
14
|
-
elsif rvr.
|
13
|
+
elsif rvr.visibility2.nil? != v2.nil?
|
15
14
|
false
|
16
|
-
elsif
|
17
|
-
((rvr.visibility1.distance.value - visibility1[0]).abs > 0.01 ||
|
18
|
-
rvr.visibility1.comparator != visibility1[ 2 ])
|
15
|
+
elsif rvr.tendency.nil? != tend.nil?
|
19
16
|
false
|
20
|
-
elsif !
|
21
|
-
((rvr.
|
22
|
-
|
17
|
+
elsif !v1.nil? &&
|
18
|
+
((rvr.visibility1.distance.value - v1[0]).abs > 0.01 ||
|
19
|
+
rvr.visibility1.comparator != v1[2])
|
23
20
|
false
|
24
|
-
elsif
|
21
|
+
elsif !v2.nil? &&
|
22
|
+
((rvr.visibility2.distance.value - v2[0]).abs > 0.02 ||
|
23
|
+
rvr.visibility2.comparator != v2[2])
|
25
24
|
false
|
26
25
|
else
|
27
|
-
|
26
|
+
tend == rvr.tendency
|
28
27
|
end
|
29
28
|
end
|
30
29
|
end
|
@@ -32,17 +31,44 @@ end
|
|
32
31
|
describe Metar::Data::RunwayVisibleRange do
|
33
32
|
context '.parse' do
|
34
33
|
[
|
35
|
-
[
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
[
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
[
|
44
|
-
|
45
|
-
|
34
|
+
[
|
35
|
+
'understands R + nn + / + nnnn', 'R12/3400',
|
36
|
+
['12', [3400.00, nil, nil], nil, nil]
|
37
|
+
],
|
38
|
+
[
|
39
|
+
'understands runway positions: RLC', 'R12L/3400',
|
40
|
+
['12L', [3400.00, nil, nil], nil, nil]
|
41
|
+
],
|
42
|
+
[
|
43
|
+
'understands comparators: PM', 'R12/P3400',
|
44
|
+
['12', [3400.00, nil, :more_than], nil, nil]
|
45
|
+
],
|
46
|
+
[
|
47
|
+
'understands tendencies: NUD', 'R12/3400U',
|
48
|
+
['12', [3400.00, nil, nil], nil, :improving]
|
49
|
+
],
|
50
|
+
[
|
51
|
+
'understands feet', 'R12/3400FT',
|
52
|
+
['12', [1036.32, nil, nil], nil, nil]
|
53
|
+
],
|
54
|
+
[
|
55
|
+
'understands second visibilities (m)', 'R26/0750V1200U',
|
56
|
+
['12', [750.0, nil, nil], [1200.0, nil, nil], :improving]
|
57
|
+
],
|
58
|
+
[
|
59
|
+
'understands second visibilities (ft)', 'R12/1800V3400FT',
|
60
|
+
['12', [548.64, nil, nil], [1036.32, nil, nil], nil]
|
61
|
+
],
|
62
|
+
[
|
63
|
+
'understands second RVR (ft) w/ tendency', 'R29/1800V3400FT/U',
|
64
|
+
['29', [548.64, nil, nil], [1036.32, nil, nil], :improving]
|
65
|
+
],
|
66
|
+
[
|
67
|
+
'returns nil for nil', nil,
|
68
|
+
[nil, nil, nil, nil]
|
69
|
+
]
|
70
|
+
].each do |title, raw, expected|
|
71
|
+
example title do
|
46
72
|
expect(described_class.parse(raw)).to be_runway_visible_range(*expected)
|
47
73
|
end
|
48
74
|
end
|
@@ -59,26 +85,36 @@ describe Metar::Data::RunwayVisibleRange do
|
|
59
85
|
end
|
60
86
|
|
61
87
|
[
|
62
|
-
[
|
63
|
-
|
64
|
-
|
65
|
-
|
88
|
+
[
|
89
|
+
'v1',
|
90
|
+
:en, [[3400.00, nil, nil], nil, nil],
|
91
|
+
'runway 14: 3400m'
|
92
|
+
],
|
93
|
+
[
|
94
|
+
'v1 and v2',
|
95
|
+
:en, [[3400.00, nil, nil], [1900.00, nil, nil], nil],
|
96
|
+
'runway 14: from 3400m to 1900m'
|
97
|
+
],
|
98
|
+
[
|
99
|
+
'v1 and tendency',
|
100
|
+
:en, [[3400.00, nil, nil], nil, :improving],
|
101
|
+
'runway 14: 3400m improving'
|
102
|
+
]
|
103
|
+
].each do |title, locale, (visibility1, visibility2, tendency), expected|
|
66
104
|
d1 = Metar::Data::Distance.new(visibility1[0])
|
67
105
|
v1 = Metar::Data::Visibility.new(
|
68
106
|
nil, distance: d1, direction: visibility1[1], comparator: visibility1[2]
|
69
107
|
)
|
70
108
|
v2 =
|
71
|
-
if !
|
109
|
+
if !visibility2.nil?
|
72
110
|
d2 = Metar::Data::Distance.new(visibility2[0])
|
73
111
|
Metar::Data::Visibility.new(
|
74
112
|
nil,
|
75
113
|
distance: d2, direction: visibility2[1], comparator: visibility2[2]
|
76
114
|
)
|
77
|
-
else
|
78
|
-
nil
|
79
115
|
end
|
80
116
|
|
81
|
-
example
|
117
|
+
example title + " (#{locale})" do
|
82
118
|
I18n.locale = locale
|
83
119
|
subject = described_class.new(
|
84
120
|
nil,
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "spec_helper"
|
3
4
|
|
4
5
|
RSpec::Matchers.define :be_sky_condition do |quantity, height, type|
|
@@ -11,10 +12,8 @@ RSpec::Matchers.define :be_sky_condition do |quantity, height, type|
|
|
11
12
|
false
|
12
13
|
elsif sk.height.is_a?(Metar::Data::Distance) && sk.height.value != height
|
13
14
|
false
|
14
|
-
elsif sk.type != type
|
15
|
-
false
|
16
15
|
else
|
17
|
-
|
16
|
+
sk.type == type
|
18
17
|
end
|
19
18
|
end
|
20
19
|
end
|
@@ -22,13 +21,34 @@ end
|
|
22
21
|
describe Metar::Data::SkyCondition do
|
23
22
|
context '.parse' do
|
24
23
|
[
|
25
|
-
[
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
[
|
30
|
-
|
31
|
-
|
24
|
+
[
|
25
|
+
'understands clear skies codes', 'NSC',
|
26
|
+
[nil, nil, nil]
|
27
|
+
],
|
28
|
+
[
|
29
|
+
'quantity + height', 'BKN12',
|
30
|
+
['broken', 365.76, nil]
|
31
|
+
],
|
32
|
+
[
|
33
|
+
'quantity + height + type', 'BKN12CB',
|
34
|
+
['broken', 365.76, 'cumulonimbus']
|
35
|
+
],
|
36
|
+
[
|
37
|
+
'quantity + ///', 'BKN///',
|
38
|
+
['broken', nil, nil]
|
39
|
+
],
|
40
|
+
[
|
41
|
+
'quantity + height + ///', 'FEW038///',
|
42
|
+
['few', 1158.24, nil]
|
43
|
+
],
|
44
|
+
[
|
45
|
+
'cumulonimbus only', 'CB', # seems non-standard, but occurs
|
46
|
+
[nil, nil, 'cumulonimbus']
|
47
|
+
],
|
48
|
+
[
|
49
|
+
'returns nil for unmatched', 'FUBAR',
|
50
|
+
[:expect_nil, nil, nil]
|
51
|
+
]
|
32
52
|
].each do |docstring, raw, expected|
|
33
53
|
example docstring do
|
34
54
|
expect(described_class.parse(raw)).to be_sky_condition(*expected)
|
@@ -38,11 +58,26 @@ describe Metar::Data::SkyCondition do
|
|
38
58
|
|
39
59
|
context '.to_summary' do
|
40
60
|
[
|
41
|
-
[
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
[
|
61
|
+
[
|
62
|
+
'all values nil', [nil, nil, nil],
|
63
|
+
:en, 'clear skies'
|
64
|
+
],
|
65
|
+
[
|
66
|
+
'quantity', ['broken', nil, nil],
|
67
|
+
:en, 'broken cloud'
|
68
|
+
],
|
69
|
+
[
|
70
|
+
'quantity', ['broken', nil, nil],
|
71
|
+
:'en-US', 'broken clouds'
|
72
|
+
],
|
73
|
+
[
|
74
|
+
'quantity + type', ['broken', nil, 'cumulonimbus'],
|
75
|
+
:en, 'broken cumulonimbus'
|
76
|
+
],
|
77
|
+
[
|
78
|
+
'quantity + type', ['broken', nil, 'cumulonimbus'],
|
79
|
+
:'en-US', 'broken cumulonimbus clouds'
|
80
|
+
]
|
46
81
|
].each do |docstring, (quantity, height, type), locale, expected|
|
47
82
|
before { @old_locale = I18n.locale }
|
48
83
|
after { I18n.locale = @old_locale }
|
@@ -59,9 +94,18 @@ describe Metar::Data::SkyCondition do
|
|
59
94
|
|
60
95
|
context '.to_s' do
|
61
96
|
[
|
62
|
-
[
|
63
|
-
|
64
|
-
|
97
|
+
[
|
98
|
+
'all values nil', [nil, nil, nil],
|
99
|
+
'clear skies'
|
100
|
+
],
|
101
|
+
[
|
102
|
+
'quantity', ['broken', 360, nil],
|
103
|
+
'broken cloud at 360'
|
104
|
+
],
|
105
|
+
[
|
106
|
+
'quantity + type', ['broken', 360, 'cumulonimbus'],
|
107
|
+
'broken cumulonimbus at 360'
|
108
|
+
]
|
65
109
|
].each do |docstring, (quantity, height, type), expected|
|
66
110
|
example docstring do
|
67
111
|
subject = described_class.new(
|
data/spec/data/speed_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
|
3
5
|
RSpec::Matchers.define :be_distance do |expected|
|
@@ -8,10 +10,8 @@ RSpec::Matchers.define :be_distance do |expected|
|
|
8
10
|
false
|
9
11
|
elsif distance.value.nil? && expected.nil?
|
10
12
|
true
|
11
|
-
elsif (distance.value - expected).abs > 0.01
|
12
|
-
false
|
13
13
|
else
|
14
|
-
|
14
|
+
(distance.value - expected).abs <= 0.01
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -21,7 +21,7 @@ describe Metar::Data::VerticalVisibility do
|
|
21
21
|
[
|
22
22
|
['VV + nnn', 'VV300', 9144],
|
23
23
|
['///', '///', nil],
|
24
|
-
['returns nil for unmatched', 'FUBAR', :expect_nil]
|
24
|
+
['returns nil for unmatched', 'FUBAR', :expect_nil]
|
25
25
|
].each do |docstring, raw, expected|
|
26
26
|
example docstring do
|
27
27
|
expect(described_class.parse(raw)).to be_distance(expected)
|
@@ -1,11 +1,12 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "spec_helper"
|
3
4
|
|
4
5
|
RSpec::Matchers.define :be_visibility do |distance, direction, comparator|
|
5
6
|
match do |visibility|
|
6
|
-
if
|
7
|
+
if visibility.nil? && [distance, direction, comparator].all?(&:nil?)
|
7
8
|
true
|
8
|
-
elsif visibility.nil? != [
|
9
|
+
elsif visibility.nil? != [distance, direction, comparator].all?(&:nil?)
|
9
10
|
false
|
10
11
|
elsif visibility.distance.nil? != distance.nil?
|
11
12
|
false
|
@@ -13,11 +14,13 @@ RSpec::Matchers.define :be_visibility do |distance, direction, comparator|
|
|
13
14
|
false
|
14
15
|
elsif visibility.comparator.nil? != comparator.nil?
|
15
16
|
false
|
16
|
-
elsif visibility.distance.is_a?(Metar::Data::Distance) &&
|
17
|
+
elsif visibility.distance.is_a?(Metar::Data::Distance) &&
|
18
|
+
(visibility.distance.value - distance).abs > 0.01
|
17
19
|
false
|
18
|
-
elsif visibility.direction.is_a?(M9t::Direction) &&
|
20
|
+
elsif visibility.direction.is_a?(M9t::Direction) &&
|
21
|
+
(visibility.direction.value - direction).abs > 0.01
|
19
22
|
false
|
20
|
-
elsif comparator.is_a?(Symbol)
|
23
|
+
elsif comparator.is_a?(Symbol) && visibility.comparator != comparator
|
21
24
|
false
|
22
25
|
else
|
23
26
|
true
|
@@ -28,17 +31,17 @@ end
|
|
28
31
|
describe Metar::Data::Visibility do
|
29
32
|
context '.parse' do
|
30
33
|
[
|
31
|
-
['understands 9999', '9999', [
|
32
|
-
['understands nnnn + NDV', '0123NDV', [
|
33
|
-
['understands n/nSM', '3/4SM', [
|
34
|
-
['understands 3/16SM', '3/16SM', [
|
35
|
-
['understands n n/nSM', '1 1/4SM', [
|
36
|
-
['understands nSM', '5SM', [
|
37
|
-
['understands M1/4SM', 'M1/4SM', [
|
38
|
-
['understands n + KM', '5KM', [
|
39
|
-
['understands n', '500', [
|
40
|
-
['understands n + compass', '500NW', [
|
41
|
-
['returns nil for unmatched', 'FUBAR', [
|
34
|
+
['understands 9999', '9999', [10_000.00, nil, :more_than]],
|
35
|
+
['understands nnnn + NDV', '0123NDV', [123.00, nil, nil]],
|
36
|
+
['understands n/nSM', '3/4SM', [1207.01, nil, nil]],
|
37
|
+
['understands 3/16SM', '3/16SM', [301.752, nil, nil]],
|
38
|
+
['understands n n/nSM', '1 1/4SM', [2011.68, nil, nil]],
|
39
|
+
['understands nSM', '5SM', [8046.72, nil, nil]],
|
40
|
+
['understands M1/4SM', 'M1/4SM', [402.34, nil, :less_than]],
|
41
|
+
['understands n + KM', '5KM', [5000.00, nil, nil]],
|
42
|
+
['understands n', '500', [500.00, nil, nil]],
|
43
|
+
['understands n + compass', '500NW', [500.00, 315.0, nil]],
|
44
|
+
['returns nil for unmatched', 'FUBAR', [nil, nil, nil]]
|
42
45
|
].each do |docstring, raw, expected|
|
43
46
|
example docstring do
|
44
47
|
expect(described_class.parse(raw)).to be_visibility(*expected)
|
@@ -57,15 +60,33 @@ describe Metar::Data::Visibility do
|
|
57
60
|
end
|
58
61
|
|
59
62
|
[
|
60
|
-
[
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
[
|
65
|
-
|
63
|
+
[
|
64
|
+
'with distance',
|
65
|
+
:en, [:set, nil, nil], '4km'
|
66
|
+
],
|
67
|
+
[
|
68
|
+
'with distance and direction',
|
69
|
+
:en, [:set, :set, nil], '4km ESE'
|
70
|
+
],
|
71
|
+
[
|
72
|
+
'with distance and comparator',
|
73
|
+
:en, [:set, nil, :less_than], 'less than 4km'
|
74
|
+
],
|
75
|
+
[
|
76
|
+
'with distance, direction and comparator',
|
77
|
+
:en, %i(set set more_than), 'more than 4km ESE'
|
78
|
+
],
|
79
|
+
[
|
80
|
+
'with distance and direction',
|
81
|
+
:it, [:set, :set, nil], '4km ESE'
|
82
|
+
],
|
83
|
+
[
|
84
|
+
'with distance, direction and comparator',
|
85
|
+
:it, %i(set set more_than), 'piú di 4km ESE'
|
86
|
+
]
|
66
87
|
].each do |docstring, locale, (distance, direction, comparator), expected|
|
67
|
-
distance = Metar::Data::Distance.new(4321) if distance
|
68
|
-
direction = M9t::Direction.new(123)
|
88
|
+
distance = Metar::Data::Distance.new(4321) if distance == :set
|
89
|
+
direction = M9t::Direction.new(123) if direction == :set
|
69
90
|
|
70
91
|
example docstring + " (#{locale})" do
|
71
92
|
I18n.locale = locale
|
@@ -1,20 +1,21 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "spec_helper"
|
3
4
|
|
4
|
-
RSpec::Matchers.define :be_weather_phenomenon do |
|
5
|
+
RSpec::Matchers.define :be_weather_phenomenon do |mod, desc, phen, recent|
|
5
6
|
match do |wp|
|
6
|
-
if wp.nil? &&
|
7
|
+
if wp.nil? && phen.nil?
|
7
8
|
true
|
8
|
-
elsif wp.nil?
|
9
|
+
elsif wp.nil? != phen.nil?
|
9
10
|
false
|
10
|
-
elsif wp.phenomenon !=
|
11
|
+
elsif wp.phenomenon != phen
|
11
12
|
false
|
12
|
-
elsif wp.modifier
|
13
|
+
elsif wp.modifier != mod
|
13
14
|
false
|
14
|
-
elsif wp.descriptor !=
|
15
|
+
elsif wp.descriptor != desc
|
15
16
|
false
|
16
17
|
else
|
17
|
-
|
18
|
+
wp.recent == recent
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -22,15 +23,46 @@ end
|
|
22
23
|
describe Metar::Data::WeatherPhenomenon do
|
23
24
|
context '.parse' do
|
24
25
|
[
|
25
|
-
[
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
[
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
[
|
26
|
+
[
|
27
|
+
'simple phenomenon', 'BR',
|
28
|
+
[nil, nil, 'mist', false]
|
29
|
+
],
|
30
|
+
[
|
31
|
+
'descriptor + phenomenon', 'BCFG',
|
32
|
+
[nil, 'patches of', 'fog', false]
|
33
|
+
],
|
34
|
+
[
|
35
|
+
'thunderstorm and rain', 'TSRA',
|
36
|
+
[nil, 'thunderstorm and', 'rain', false]
|
37
|
+
],
|
38
|
+
[
|
39
|
+
'intensity + phenomenon', '+RA',
|
40
|
+
['heavy', nil, 'rain', false]
|
41
|
+
],
|
42
|
+
[
|
43
|
+
'intensity + proximity + phenomenon', '-VCTSRA',
|
44
|
+
['nearby light', 'thunderstorm and', 'rain', false]
|
45
|
+
],
|
46
|
+
[
|
47
|
+
'2 phenomena: SN RA', 'SNRA',
|
48
|
+
[nil, nil, 'snow and rain', false]
|
49
|
+
],
|
50
|
+
[
|
51
|
+
'2 phenomena: RA DZ', 'RADZ',
|
52
|
+
[nil, nil, 'rain and drizzle', false]
|
53
|
+
],
|
54
|
+
[
|
55
|
+
'modifier + descriptor + phenomenon', 'VCDRFG',
|
56
|
+
['nearby', 'low drifting', 'fog', false]
|
57
|
+
],
|
58
|
+
[
|
59
|
+
'recent', 'RESN',
|
60
|
+
[nil, nil, 'snow', true]
|
61
|
+
],
|
62
|
+
[
|
63
|
+
'returns nil for unmatched', 'FUBAR',
|
64
|
+
[nil, nil, nil, false]
|
65
|
+
]
|
34
66
|
].each do |docstring, raw, expected|
|
35
67
|
example docstring do
|
36
68
|
expect(described_class.parse(raw)).to be_weather_phenomenon(*expected)
|
@@ -49,12 +81,36 @@ describe Metar::Data::WeatherPhenomenon do
|
|
49
81
|
end
|
50
82
|
|
51
83
|
[
|
52
|
-
[
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
[
|
84
|
+
[
|
85
|
+
'simple phenomenon', :en,
|
86
|
+
[nil, nil, 'mist'],
|
87
|
+
'mist'
|
88
|
+
],
|
89
|
+
[
|
90
|
+
'simple phenomenon', :it,
|
91
|
+
[nil, nil, 'mist'],
|
92
|
+
'foschia'
|
93
|
+
],
|
94
|
+
[
|
95
|
+
'descriptor + phenomenon', :en,
|
96
|
+
[nil, 'patches of', 'fog'],
|
97
|
+
'patches of fog'
|
98
|
+
],
|
99
|
+
[
|
100
|
+
'thunderstorm and rain', :en,
|
101
|
+
[nil, 'thunderstorm and', 'rain'],
|
102
|
+
'thunderstorm and rain'
|
103
|
+
],
|
104
|
+
[
|
105
|
+
'modifier + phenomenon', :en,
|
106
|
+
['heavy', nil, 'drizzle'],
|
107
|
+
'heavy drizzle'
|
108
|
+
],
|
109
|
+
[
|
110
|
+
'modifier + descriptor + phenomenon', :en,
|
111
|
+
%w(heavy freezing drizzle),
|
112
|
+
'heavy freezing drizzle'
|
113
|
+
]
|
58
114
|
].each do |docstring, locale, (modifier, descriptor, phenomenon), expected|
|
59
115
|
example docstring + " (#{locale})" do
|
60
116
|
I18n.locale = locale
|
@@ -67,4 +123,3 @@ describe Metar::Data::WeatherPhenomenon do
|
|
67
123
|
end
|
68
124
|
end
|
69
125
|
end
|
70
|
-
|