aixm 0.2.3 → 0.3.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/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.yardopts +3 -0
- data/CHANGELOG.md +34 -14
- data/Guardfile +1 -0
- data/README.md +64 -257
- data/lib/aixm.rb +16 -7
- data/lib/aixm/component.rb +6 -0
- data/lib/aixm/component/frequency.rb +135 -0
- data/lib/aixm/component/geometry.rb +34 -23
- data/lib/aixm/component/geometry/arc.rb +37 -22
- data/lib/aixm/component/geometry/border.rb +29 -20
- data/lib/aixm/component/geometry/circle.rb +39 -22
- data/lib/aixm/component/geometry/point.rb +29 -13
- data/lib/aixm/component/helipad.rb +154 -0
- data/lib/aixm/component/layer.rb +91 -0
- data/lib/aixm/component/runway.rb +294 -0
- data/lib/aixm/component/service.rb +170 -0
- data/lib/aixm/component/timetable.rb +65 -0
- data/lib/aixm/component/vertical_limits.rb +65 -29
- data/lib/aixm/config.rb +87 -0
- data/lib/aixm/document.rb +66 -42
- data/lib/aixm/errors.rb +11 -0
- data/lib/aixm/f.rb +34 -20
- data/lib/aixm/feature.rb +38 -0
- data/lib/aixm/feature/airport.rb +473 -0
- data/lib/aixm/feature/airspace.rb +145 -92
- data/lib/aixm/feature/navigational_aid.rb +94 -0
- data/lib/aixm/feature/navigational_aid/designated_point.rb +50 -54
- data/lib/aixm/feature/navigational_aid/dme.rb +48 -40
- data/lib/aixm/feature/navigational_aid/marker.rb +55 -45
- data/lib/aixm/feature/navigational_aid/ndb.rb +54 -50
- data/lib/aixm/feature/navigational_aid/tacan.rb +38 -31
- data/lib/aixm/feature/navigational_aid/vor.rb +84 -76
- data/lib/aixm/feature/organisation.rb +97 -0
- data/lib/aixm/feature/unit.rb +152 -0
- data/lib/aixm/refinements.rb +132 -47
- data/lib/aixm/shortcuts.rb +11 -6
- data/lib/aixm/version.rb +1 -1
- data/lib/aixm/xy.rb +64 -20
- data/lib/aixm/z.rb +51 -22
- data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-DataTypes.xsd +0 -0
- data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-Features.xsd +0 -0
- data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-Snapshot.xsd +0 -0
- data/schemas/ofmx/0/OFMX-DataTypes.xsd +5077 -0
- data/schemas/ofmx/0/OFMX-Features.xsd +9955 -0
- data/schemas/ofmx/0/OFMX-Snapshot.xsd +217 -0
- data/spec/factory.rb +209 -33
- data/spec/lib/aixm/component/frequency_spec.rb +75 -0
- data/spec/lib/aixm/component/geometry/arc_spec.rb +28 -22
- data/spec/lib/aixm/component/geometry/border_spec.rb +23 -20
- data/spec/lib/aixm/component/geometry/circle_spec.rb +31 -22
- data/spec/lib/aixm/component/geometry/point_spec.rb +11 -14
- data/spec/lib/aixm/component/geometry_spec.rb +150 -69
- data/spec/lib/aixm/component/helipad_spec.rb +136 -0
- data/spec/lib/aixm/component/layer_spec.rb +110 -0
- data/spec/lib/aixm/component/runway_spec.rb +402 -0
- data/spec/lib/aixm/component/service_spec.rb +61 -0
- data/spec/lib/aixm/component/timetable_spec.rb +49 -0
- data/spec/lib/aixm/component/vertical_limits_spec.rb +39 -20
- data/spec/lib/aixm/config_spec.rb +41 -0
- data/spec/lib/aixm/document_spec.rb +637 -147
- data/spec/lib/aixm/errors_spec.rb +14 -0
- data/spec/lib/aixm/f_spec.rb +17 -10
- data/spec/lib/aixm/feature/airport_spec.rb +546 -0
- data/spec/lib/aixm/feature/airspace_spec.rb +349 -226
- data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +47 -36
- data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +61 -36
- data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +61 -113
- data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +65 -79
- data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +57 -36
- data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +86 -112
- data/spec/lib/aixm/feature/navigational_aid_spec.rb +52 -0
- data/spec/lib/aixm/feature/organisation_spec.rb +77 -0
- data/spec/lib/aixm/feature/unit_spec.rb +227 -0
- data/spec/lib/aixm/feature_spec.rb +58 -0
- data/spec/lib/aixm/refinements_spec.rb +187 -178
- data/spec/lib/aixm/xy_spec.rb +45 -34
- data/spec/lib/aixm/z_spec.rb +19 -21
- data/spec/macros/organisation.rb +11 -0
- data/spec/macros/remarks.rb +12 -0
- data/spec/macros/timetable.rb +11 -0
- data/spec/macros/xy.rb +11 -0
- data/spec/macros/z_qnh.rb +11 -0
- data/spec/spec_helper.rb +26 -0
- metadata +60 -19
- data/lib/aixm/base.rb +0 -10
- data/lib/aixm/component/base.rb +0 -6
- data/lib/aixm/component/class_layer.rb +0 -46
- data/lib/aixm/component/geometry/base.rb +0 -8
- data/lib/aixm/component/schedule.rb +0 -43
- data/lib/aixm/feature/base.rb +0 -6
- data/lib/aixm/feature/navigational_aid/base.rb +0 -79
- data/spec/lib/aixm/component/class_layer_spec.rb +0 -74
- data/spec/lib/aixm/component/schedule_spec.rb +0 -33
- data/spec/lib/aixm/feature/navigational_aid/base_spec.rb +0 -41
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe AIXM::GeometryError do
|
|
4
|
+
it "must be defined" do
|
|
5
|
+
AIXM::GeometryError.wont_be_nil
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
describe AIXM::LayerError do
|
|
11
|
+
it "must be defined" do
|
|
12
|
+
AIXM::LayerError.wont_be_nil
|
|
13
|
+
end
|
|
14
|
+
end
|
data/spec/lib/aixm/f_spec.rb
CHANGED
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
require_relative '../../spec_helper'
|
|
2
2
|
|
|
3
3
|
describe AIXM::F do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
subject do
|
|
5
|
+
AIXM::Factory.f
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe :freq= do
|
|
9
|
+
it "fails on invalid values" do
|
|
10
|
+
[:foobar].wont_be_written_to subject, :freq
|
|
9
11
|
end
|
|
10
12
|
|
|
11
|
-
it "
|
|
12
|
-
|
|
13
|
+
it "converts Numeric to Float" do
|
|
14
|
+
subject.tap { |s| s.freq = 5 }.freq.must_equal 5.0
|
|
13
15
|
end
|
|
14
16
|
end
|
|
15
17
|
|
|
16
|
-
describe :
|
|
17
|
-
it "
|
|
18
|
-
|
|
18
|
+
describe :unit= do
|
|
19
|
+
it "fails on invalid values" do
|
|
20
|
+
[:foobar, 123].wont_be_written_to subject, :unit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "symbolizes and downcases values" do
|
|
24
|
+
subject.tap { |s| s.unit = "MHz" }.unit.must_equal :mhz
|
|
19
25
|
end
|
|
20
26
|
end
|
|
21
27
|
|
|
@@ -55,4 +61,5 @@ describe AIXM::F do
|
|
|
55
61
|
subject.between?(90, 95, :mhz).must_equal false
|
|
56
62
|
end
|
|
57
63
|
end
|
|
64
|
+
|
|
58
65
|
end
|
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
require_relative '../../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe AIXM::Feature::Airport do
|
|
4
|
+
subject do
|
|
5
|
+
AIXM::Factory.airport
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe :initialize do
|
|
9
|
+
it "sets defaults" do
|
|
10
|
+
subject = AIXM::Feature::Airport.new(
|
|
11
|
+
organisation: AIXM::Factory.organisation,
|
|
12
|
+
code: 'LFNT',
|
|
13
|
+
name: 'Avignon-Pujaut',
|
|
14
|
+
xy: AIXM.xy(lat: %q(43°59'46"N), long: %q(004°45'16"E))
|
|
15
|
+
)
|
|
16
|
+
subject.runways.must_equal []
|
|
17
|
+
subject.helipads.must_equal []
|
|
18
|
+
subject.usage_limitations.must_equal []
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe :organisation= do
|
|
23
|
+
it "fails on invalid values" do
|
|
24
|
+
[nil, :foobar].wont_be_written_to subject, :organisation
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe :code= do
|
|
29
|
+
it "fails on invalid values" do
|
|
30
|
+
[nil, 'A', 'AB', 'ABCDE', 'AB12345'].wont_be_written_to subject, :code
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "upcases valid values" do
|
|
34
|
+
subject.tap { |s| s.code = 'lfnt' }.code.must_equal 'LFNT'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe :name= do
|
|
39
|
+
it "fails on invalid values" do
|
|
40
|
+
[nil, 123].wont_be_written_to subject, :name
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "upcases and transcodes valid values" do
|
|
44
|
+
subject.tap { |s| s.name = 'Nîmes-Alès' }.name.must_equal 'NIMES-ALES'
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe :gps= do
|
|
49
|
+
it "fails on invalid values" do
|
|
50
|
+
[:foobar, 123].wont_be_written_to subject, :gps
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "accepts nil value" do
|
|
54
|
+
[nil].must_be_written_to subject, :gps
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "upcases valid values" do
|
|
58
|
+
subject.tap { |s| s.gps = 'Ebdeurne' }.gps.must_equal 'EBDEURNE'
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe :type= do
|
|
63
|
+
it "fails on invalid values" do
|
|
64
|
+
[nil, :foobar].wont_be_written_to subject, :type
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "fails on values derived from runways and helipads" do
|
|
68
|
+
[:aerodrome, :heliport, :aerodrome_and_heliport].wont_be_written_to subject, :type
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "looks up valid values" do
|
|
72
|
+
subject.tap { |s| s.type = :landing_site }.type.must_equal :landing_site
|
|
73
|
+
subject.tap { |s| s.type = :LS }.type.must_equal :landing_site
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "derives values from runways and helipads" do
|
|
77
|
+
subject.type.must_equal :aerodrome_and_heliport
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe :xy= do
|
|
82
|
+
macro :xy
|
|
83
|
+
|
|
84
|
+
it "fails on nil values" do
|
|
85
|
+
[nil].wont_be_written_to subject, :xy
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
describe :z= do
|
|
90
|
+
macro :z_qnh
|
|
91
|
+
|
|
92
|
+
it "accepts nil value" do
|
|
93
|
+
[nil].must_be_written_to subject, :z
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe :declination= do
|
|
98
|
+
it "fails on invalid values" do
|
|
99
|
+
[:foobar, false].wont_be_written_to subject, :declination
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "accepts nil value" do
|
|
103
|
+
[nil].must_be_written_to subject, :declination
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "converts valid values to Float" do
|
|
107
|
+
subject.tap { |s| s.declination = 10 }.declination.must_equal 10.0
|
|
108
|
+
subject.tap { |s| s.declination = 20.0 }.declination.must_equal 20.0
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe :transition_z= do
|
|
113
|
+
it "fails on invalid values" do
|
|
114
|
+
[123, AIXM.z(123, :qfe)].wont_be_written_to subject, :transition_z
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "accepts valid values" do
|
|
118
|
+
[nil, AIXM.z(123, :qnh)].must_be_written_to subject, :transition_z
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe :timetable= do
|
|
123
|
+
macro :timetable
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe :remarks= do
|
|
127
|
+
macro :remarks
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
describe :add_runway do
|
|
131
|
+
it "fails on invalid arguments" do
|
|
132
|
+
-> { subject.add_runway nil }.must_raise ArgumentError
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "adds runway to the array" do
|
|
136
|
+
count = subject.runways.count
|
|
137
|
+
subject.add_runway(AIXM.runway(name: '10'))
|
|
138
|
+
subject.runways.count.must_equal count + 1
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
describe :add_helipad do
|
|
143
|
+
it "fails on invalid arguments" do
|
|
144
|
+
-> { subject.add_helipad nil }.must_raise ArgumentError
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "adds helipad to the array" do
|
|
148
|
+
count = subject.helipads.count
|
|
149
|
+
subject.add_helipad(AIXM.helipad(name: 'H2'))
|
|
150
|
+
subject.helipads.count.must_equal count + 1
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
describe :add_usage_limitation do
|
|
155
|
+
it "fails on invalid arguments" do
|
|
156
|
+
-> { subject.add_usage_limitation(:foobar) }.must_raise ArgumentError
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
context "without block" do
|
|
160
|
+
it "accepts simple limitation" do
|
|
161
|
+
count = subject.usage_limitations.count
|
|
162
|
+
subject.add_usage_limitation(:permitted)
|
|
163
|
+
subject.usage_limitations.count.must_equal count + 1
|
|
164
|
+
subject.usage_limitations.last.type.must_equal :permitted
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
context "with block" do
|
|
169
|
+
it "accepts complex limitation" do
|
|
170
|
+
count = subject.usage_limitations.count
|
|
171
|
+
subject.add_usage_limitation(:permitted) do |permitted|
|
|
172
|
+
permitted.add_condition { |c| c.aircraft = :glider }
|
|
173
|
+
permitted.add_condition { |c| c.rule = :ifr }
|
|
174
|
+
end
|
|
175
|
+
subject.usage_limitations.count.must_equal count + 1
|
|
176
|
+
subject.usage_limitations.last.conditions.count.must_equal 2
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
describe :to_xml do
|
|
182
|
+
it "builds correct complete OFMX" do
|
|
183
|
+
AIXM.ofmx!
|
|
184
|
+
subject.to_xml.must_equal <<~END
|
|
185
|
+
<!-- Airport: LFNT AVIGNON-PUJAUT -->
|
|
186
|
+
<Ahp source="LF|GEN|0.0 FACTORY|0|0">
|
|
187
|
+
<AhpUid region="LF">
|
|
188
|
+
<codeId>LFNT</codeId>
|
|
189
|
+
</AhpUid>
|
|
190
|
+
<OrgUid region="LF">
|
|
191
|
+
<txtName>FRANCE</txtName>
|
|
192
|
+
</OrgUid>
|
|
193
|
+
<txtName>AVIGNON-PUJAUT</txtName>
|
|
194
|
+
<codeIcao>LFNT</codeIcao>
|
|
195
|
+
<codeGps>LFPUJAUT</codeGps>
|
|
196
|
+
<codeType>AH</codeType>
|
|
197
|
+
<geoLat>43.99611111N</geoLat>
|
|
198
|
+
<geoLong>004.75444444E</geoLong>
|
|
199
|
+
<codeDatum>WGE</codeDatum>
|
|
200
|
+
<valElev>146</valElev>
|
|
201
|
+
<uomDistVer>FT</uomDistVer>
|
|
202
|
+
<valMagVar>1.08</valMagVar>
|
|
203
|
+
<valTransitionAlt>10000</valTransitionAlt>
|
|
204
|
+
<uomTransitionAlt>FT</uomTransitionAlt>
|
|
205
|
+
<txtRmk>Restricted access</txtRmk>
|
|
206
|
+
</Ahp>
|
|
207
|
+
<Rwy>
|
|
208
|
+
<RwyUid>
|
|
209
|
+
<AhpUid region="LF">
|
|
210
|
+
<codeId>LFNT</codeId>
|
|
211
|
+
</AhpUid>
|
|
212
|
+
<txtDesig>16L/34R</txtDesig>
|
|
213
|
+
</RwyUid>
|
|
214
|
+
<valLen>650</valLen>
|
|
215
|
+
<valWid>80</valWid>
|
|
216
|
+
<uomDimRwy>M</uomDimRwy>
|
|
217
|
+
<codeComposition>GRADE</codeComposition>
|
|
218
|
+
<codeSts>CLSD</codeSts>
|
|
219
|
+
<txtRmk>Markings eroded</txtRmk>
|
|
220
|
+
</Rwy>
|
|
221
|
+
<Rdn>
|
|
222
|
+
<RdnUid>
|
|
223
|
+
<RwyUid>
|
|
224
|
+
<AhpUid region="LF">
|
|
225
|
+
<codeId>LFNT</codeId>
|
|
226
|
+
</AhpUid>
|
|
227
|
+
<txtDesig>16L/34R</txtDesig>
|
|
228
|
+
</RwyUid>
|
|
229
|
+
<txtDesig>16L</txtDesig>
|
|
230
|
+
</RdnUid>
|
|
231
|
+
<geoLat>44.00211944N</geoLat>
|
|
232
|
+
<geoLong>004.75216944E</geoLong>
|
|
233
|
+
<valTrueBrg>165</valTrueBrg>
|
|
234
|
+
<valMagBrg>166</valMagBrg>
|
|
235
|
+
<valElevTdz>147</valElevTdz>
|
|
236
|
+
<uomElevTdz>FT</uomElevTdz>
|
|
237
|
+
<txtRmk>forth remarks</txtRmk>
|
|
238
|
+
</Rdn>
|
|
239
|
+
<Rdd>
|
|
240
|
+
<RddUid>
|
|
241
|
+
<RdnUid>
|
|
242
|
+
<RwyUid>
|
|
243
|
+
<AhpUid region="LF">
|
|
244
|
+
<codeId>LFNT</codeId>
|
|
245
|
+
</AhpUid>
|
|
246
|
+
<txtDesig>16L/34R</txtDesig>
|
|
247
|
+
</RwyUid>
|
|
248
|
+
<txtDesig>16L</txtDesig>
|
|
249
|
+
</RdnUid>
|
|
250
|
+
<codeType>DPLM</codeType>
|
|
251
|
+
<codeDayPeriod>A</codeDayPeriod>
|
|
252
|
+
</RddUid>
|
|
253
|
+
<valDist>131</valDist>
|
|
254
|
+
<uomDist>M</uomDist>
|
|
255
|
+
<txtRmk>forth remarks</txtRmk>
|
|
256
|
+
</Rdd>
|
|
257
|
+
<Rdn>
|
|
258
|
+
<RdnUid>
|
|
259
|
+
<RwyUid>
|
|
260
|
+
<AhpUid region="LF">
|
|
261
|
+
<codeId>LFNT</codeId>
|
|
262
|
+
</AhpUid>
|
|
263
|
+
<txtDesig>16L/34R</txtDesig>
|
|
264
|
+
</RwyUid>
|
|
265
|
+
<txtDesig>34R</txtDesig>
|
|
266
|
+
</RdnUid>
|
|
267
|
+
<geoLat>43.99036389N</geoLat>
|
|
268
|
+
<geoLong>004.75645556E</geoLong>
|
|
269
|
+
<valTrueBrg>345</valTrueBrg>
|
|
270
|
+
<valMagBrg>346</valMagBrg>
|
|
271
|
+
<txtRmk>back remarks</txtRmk>
|
|
272
|
+
</Rdn>
|
|
273
|
+
<Rdd>
|
|
274
|
+
<RddUid>
|
|
275
|
+
<RdnUid>
|
|
276
|
+
<RwyUid>
|
|
277
|
+
<AhpUid region="LF">
|
|
278
|
+
<codeId>LFNT</codeId>
|
|
279
|
+
</AhpUid>
|
|
280
|
+
<txtDesig>16L/34R</txtDesig>
|
|
281
|
+
</RwyUid>
|
|
282
|
+
<txtDesig>34R</txtDesig>
|
|
283
|
+
</RdnUid>
|
|
284
|
+
<codeType>DPLM</codeType>
|
|
285
|
+
<codeDayPeriod>A</codeDayPeriod>
|
|
286
|
+
</RddUid>
|
|
287
|
+
<valDist>209</valDist>
|
|
288
|
+
<uomDist>M</uomDist>
|
|
289
|
+
<txtRmk>back remarks</txtRmk>
|
|
290
|
+
</Rdd>
|
|
291
|
+
<Tla>
|
|
292
|
+
<TlaUid>
|
|
293
|
+
<AhpUid region=\"LF\">
|
|
294
|
+
<codeId>LFNT</codeId>
|
|
295
|
+
</AhpUid>
|
|
296
|
+
<txtDesig>H1</txtDesig>
|
|
297
|
+
</TlaUid>
|
|
298
|
+
<geoLat>43.99915000N</geoLat>
|
|
299
|
+
<geoLong>004.75154444E</geoLong>
|
|
300
|
+
<codeDatum>WGE</codeDatum>
|
|
301
|
+
<valElev>141</valElev>
|
|
302
|
+
<uomDistVer>FT</uomDistVer>
|
|
303
|
+
<valLen>20</valLen>
|
|
304
|
+
<valWid>20</valWid>
|
|
305
|
+
<uomDim>M</uomDim>
|
|
306
|
+
<codeComposition>GRASS</codeComposition>
|
|
307
|
+
<codeSts>OTHER</codeSts>
|
|
308
|
+
<txtRmk>Authorizaton by AD operator required</txtRmk>
|
|
309
|
+
</Tla>
|
|
310
|
+
<Ahu>
|
|
311
|
+
<AhuUid>
|
|
312
|
+
<AhpUid region="LF">
|
|
313
|
+
<codeId>LFNT</codeId>
|
|
314
|
+
</AhpUid>
|
|
315
|
+
</AhuUid>
|
|
316
|
+
<UsageLimitation>
|
|
317
|
+
<codeUsageLimitation>PERMIT</codeUsageLimitation>
|
|
318
|
+
</UsageLimitation>
|
|
319
|
+
<UsageLimitation>
|
|
320
|
+
<codeUsageLimitation>RESERV</codeUsageLimitation>
|
|
321
|
+
<UsageCondition>
|
|
322
|
+
<AircraftClass>
|
|
323
|
+
<codeType>E</codeType>
|
|
324
|
+
</AircraftClass>
|
|
325
|
+
</UsageCondition>
|
|
326
|
+
<UsageCondition>
|
|
327
|
+
<FlightClass>
|
|
328
|
+
<codeOrigin>INTL</codeOrigin>
|
|
329
|
+
</FlightClass>
|
|
330
|
+
</UsageCondition>
|
|
331
|
+
<Timetable>
|
|
332
|
+
<codeWorkHr>H24</codeWorkHr>
|
|
333
|
+
</Timetable>
|
|
334
|
+
<txtRmk>reservation remarks</txtRmk>
|
|
335
|
+
</UsageLimitation>
|
|
336
|
+
</Ahu>
|
|
337
|
+
END
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
it "builds correct minimal OFMX" do
|
|
341
|
+
AIXM.ofmx!
|
|
342
|
+
subject.z = subject.declination = subject.transition_z = subject.remarks = nil
|
|
343
|
+
subject.instance_variable_set(:'@runways', [])
|
|
344
|
+
subject.instance_variable_set(:'@helipads', [])
|
|
345
|
+
subject.instance_variable_set(:'@usage_limitations', [])
|
|
346
|
+
subject.to_xml.must_equal <<~END
|
|
347
|
+
<!-- Airport: LFNT AVIGNON-PUJAUT -->
|
|
348
|
+
<Ahp source="LF|GEN|0.0 FACTORY|0|0">
|
|
349
|
+
<AhpUid region="LF">
|
|
350
|
+
<codeId>LFNT</codeId>
|
|
351
|
+
</AhpUid>
|
|
352
|
+
<OrgUid region="LF">
|
|
353
|
+
<txtName>FRANCE</txtName>
|
|
354
|
+
</OrgUid>
|
|
355
|
+
<txtName>AVIGNON-PUJAUT</txtName>
|
|
356
|
+
<codeIcao>LFNT</codeIcao>
|
|
357
|
+
<codeGps>LFPUJAUT</codeGps>
|
|
358
|
+
<geoLat>43.99611111N</geoLat>
|
|
359
|
+
<geoLong>004.75444444E</geoLong>
|
|
360
|
+
<codeDatum>WGE</codeDatum>
|
|
361
|
+
</Ahp>
|
|
362
|
+
END
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
describe AIXM::Feature::Airport::UsageLimitation do
|
|
368
|
+
subject do
|
|
369
|
+
AIXM::Factory.airport.usage_limitations.first
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
describe :initialize do
|
|
373
|
+
it "sets defaults" do
|
|
374
|
+
subject.conditions.must_equal []
|
|
375
|
+
end
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
describe :type= do
|
|
379
|
+
it "fails on invalid values" do
|
|
380
|
+
[nil, :foobar].wont_be_written_to subject, :type
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
it "looks up valid values" do
|
|
384
|
+
subject.tap { |s| s.type = :permitted }.type.must_equal :permitted
|
|
385
|
+
subject.tap { |s| s.type = :RESERV }.type.must_equal :reservation_required
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
describe :timetable= do
|
|
390
|
+
macro :timetable
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
describe :remarks= do
|
|
394
|
+
macro :remarks
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
describe :xml= do
|
|
398
|
+
it "builds correct complete OFMX" do
|
|
399
|
+
AIXM.ofmx!
|
|
400
|
+
subject = AIXM::Factory.airport.usage_limitations.last
|
|
401
|
+
subject.to_xml.must_equal <<~END
|
|
402
|
+
<UsageLimitation>
|
|
403
|
+
<codeUsageLimitation>RESERV</codeUsageLimitation>
|
|
404
|
+
<UsageCondition>
|
|
405
|
+
<AircraftClass>
|
|
406
|
+
<codeType>E</codeType>
|
|
407
|
+
</AircraftClass>
|
|
408
|
+
</UsageCondition>
|
|
409
|
+
<UsageCondition>
|
|
410
|
+
<FlightClass>
|
|
411
|
+
<codeOrigin>INTL</codeOrigin>
|
|
412
|
+
</FlightClass>
|
|
413
|
+
</UsageCondition>
|
|
414
|
+
<Timetable>
|
|
415
|
+
<codeWorkHr>H24</codeWorkHr>
|
|
416
|
+
</Timetable>
|
|
417
|
+
<txtRmk>reservation remarks</txtRmk>
|
|
418
|
+
</UsageLimitation>
|
|
419
|
+
END
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
it "builds correct minimal OFMX" do
|
|
423
|
+
AIXM.ofmx!
|
|
424
|
+
subject.to_xml.must_equal <<~END
|
|
425
|
+
<UsageLimitation>
|
|
426
|
+
<codeUsageLimitation>PERMIT</codeUsageLimitation>
|
|
427
|
+
</UsageLimitation>
|
|
428
|
+
END
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
describe AIXM::Feature::Airport::UsageLimitation::Condition do
|
|
434
|
+
subject do
|
|
435
|
+
AIXM::Factory.airport.usage_limitations.last.conditions.first
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
describe :aircraft= do
|
|
439
|
+
it "fails on invalid values" do
|
|
440
|
+
[:foobar, 123].wont_be_written_to subject, :aircraft
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
it "accepts nil value" do
|
|
444
|
+
[nil].must_be_written_to subject, :aircraft
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
it "looks up valid values" do
|
|
448
|
+
subject.tap { |s| s.aircraft = :glider }.aircraft.must_equal :glider
|
|
449
|
+
subject.tap { |s| s.aircraft = :H }.aircraft.must_equal :helicopter
|
|
450
|
+
end
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
describe :rule= do
|
|
454
|
+
it "fails on invalid values" do
|
|
455
|
+
[:foobar, 123].wont_be_written_to subject, :rule
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
it "accepts nil value" do
|
|
459
|
+
[nil].must_be_written_to subject, :rule
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
it "looks up valid values" do
|
|
463
|
+
subject.tap { |s| s.rule = :ifr }.rule.must_equal :ifr
|
|
464
|
+
subject.tap { |s| s.rule = :IV }.rule.must_equal :ifr_and_vfr
|
|
465
|
+
end
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
describe :realm= do
|
|
469
|
+
it "fails on invalid values" do
|
|
470
|
+
[:foobar, 123].wont_be_written_to subject, :realm
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
it "accepts nil value" do
|
|
474
|
+
[nil].must_be_written_to subject, :realm
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
it "looks up valid values" do
|
|
478
|
+
subject.tap { |s| s.realm = :civilian }.realm.must_equal :civilian
|
|
479
|
+
subject.tap { |s| s.realm = :MIL }.realm.must_equal :military
|
|
480
|
+
end
|
|
481
|
+
end
|
|
482
|
+
|
|
483
|
+
describe :origin= do
|
|
484
|
+
it "fails on invalid values" do
|
|
485
|
+
[:foobar, 123].wont_be_written_to subject, :origin
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
it "accepts nil value" do
|
|
489
|
+
[nil].must_be_written_to subject, :origin
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
it "looks up valid values" do
|
|
493
|
+
subject.tap { |s| s.origin = :international }.origin.must_equal :international
|
|
494
|
+
subject.tap { |s| s.origin = :NTL }.origin.must_equal :national
|
|
495
|
+
end
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
describe :purpose= do
|
|
499
|
+
it "fails on invalid values" do
|
|
500
|
+
[:foobar, 123].wont_be_written_to subject, :purpose
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
it "accepts nil value" do
|
|
504
|
+
[nil].must_be_written_to subject, :purpose
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
it "looks up valid values" do
|
|
508
|
+
subject.tap { |s| s.purpose = :private }.purpose.must_equal :private
|
|
509
|
+
subject.tap { |s| s.purpose = :TRG }.purpose.must_equal :school_or_training
|
|
510
|
+
end
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
describe :xml= do
|
|
514
|
+
it "builds correct complete OFMX" do
|
|
515
|
+
subject.rule = :vfr
|
|
516
|
+
subject.realm = :military
|
|
517
|
+
subject.origin = :international
|
|
518
|
+
subject.purpose = :school_or_training
|
|
519
|
+
AIXM.ofmx!
|
|
520
|
+
subject.to_xml.must_equal <<~END
|
|
521
|
+
<UsageCondition>
|
|
522
|
+
<AircraftClass>
|
|
523
|
+
<codeType>E</codeType>
|
|
524
|
+
</AircraftClass>
|
|
525
|
+
<FlightClass>
|
|
526
|
+
<codeRule>V</codeRule>
|
|
527
|
+
<codeMil>MIL</codeMil>
|
|
528
|
+
<codeOrigin>INTL</codeOrigin>
|
|
529
|
+
<codePurpose>TRG</codePurpose>
|
|
530
|
+
</FlightClass>
|
|
531
|
+
</UsageCondition>
|
|
532
|
+
END
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
it "builds correct minimal OFMX" do
|
|
536
|
+
AIXM.ofmx!
|
|
537
|
+
subject.to_xml.must_equal <<~END
|
|
538
|
+
<UsageCondition>
|
|
539
|
+
<AircraftClass>
|
|
540
|
+
<codeType>E</codeType>
|
|
541
|
+
</AircraftClass>
|
|
542
|
+
</UsageCondition>
|
|
543
|
+
END
|
|
544
|
+
end
|
|
545
|
+
end
|
|
546
|
+
end
|