aixm 0.3.8 → 0.3.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +33 -3
  5. data/README.md +166 -56
  6. data/exe/ckmid +14 -0
  7. data/exe/mkmid +14 -0
  8. data/lib/aixm.rb +16 -6
  9. data/lib/aixm/association.rb +369 -0
  10. data/lib/aixm/classes.rb +43 -0
  11. data/lib/aixm/component/fato.rb +45 -53
  12. data/lib/aixm/component/frequency.rb +11 -12
  13. data/lib/aixm/component/geometry.rb +36 -38
  14. data/lib/aixm/component/geometry/arc.rb +2 -2
  15. data/lib/aixm/component/geometry/border.rb +6 -3
  16. data/lib/aixm/component/geometry/circle.rb +8 -2
  17. data/lib/aixm/component/geometry/point.rb +8 -2
  18. data/lib/aixm/component/helipad.rb +30 -38
  19. data/lib/aixm/component/layer.rb +28 -19
  20. data/lib/aixm/component/lighting.rb +12 -13
  21. data/lib/aixm/component/runway.rb +44 -48
  22. data/lib/aixm/{feature → component}/service.rb +37 -36
  23. data/lib/aixm/component/surface.rb +3 -3
  24. data/lib/aixm/component/timetable.rb +2 -2
  25. data/lib/aixm/component/{vertical_limits.rb → vertical_limit.rb} +12 -6
  26. data/lib/aixm/config.rb +2 -1
  27. data/lib/aixm/document.rb +27 -50
  28. data/lib/aixm/executables.rb +85 -0
  29. data/lib/aixm/feature.rb +13 -3
  30. data/lib/aixm/feature/address.rb +12 -13
  31. data/lib/aixm/feature/airport.rb +103 -128
  32. data/lib/aixm/feature/airspace.rb +44 -17
  33. data/lib/aixm/feature/navigational_aid.rb +7 -9
  34. data/lib/aixm/feature/navigational_aid/designated_point.rb +13 -15
  35. data/lib/aixm/feature/navigational_aid/dme.rb +11 -12
  36. data/lib/aixm/feature/navigational_aid/marker.rb +7 -3
  37. data/lib/aixm/feature/navigational_aid/ndb.rb +7 -3
  38. data/lib/aixm/feature/navigational_aid/tacan.rb +7 -3
  39. data/lib/aixm/feature/navigational_aid/vor.rb +23 -15
  40. data/lib/aixm/feature/obstacle.rb +29 -43
  41. data/lib/aixm/feature/obstacle_group.rb +37 -34
  42. data/lib/aixm/feature/organisation.rb +21 -5
  43. data/lib/aixm/feature/unit.rb +36 -46
  44. data/lib/aixm/memoize.rb +89 -0
  45. data/lib/aixm/object.rb +9 -0
  46. data/lib/aixm/payload_hash.rb +114 -0
  47. data/lib/aixm/refinements.rb +29 -76
  48. data/lib/aixm/shortcuts.rb +5 -42
  49. data/lib/aixm/version.rb +1 -1
  50. data/lib/aixm/xy.rb +1 -1
  51. data/schemas/ofmx/0/OFMX-Features.xsd +152 -20
  52. data/schemas/ofmx/0/OFMX-Snapshot.xsd +0 -5
  53. metadata +107 -156
  54. metadata.gz.sig +2 -0
  55. data/.github/workflows/test.yml +0 -26
  56. data/.gitignore +0 -6
  57. data/.ruby-version +0 -1
  58. data/.yardopts +0 -3
  59. data/Guardfile +0 -8
  60. data/aixm.gemspec +0 -35
  61. data/gems.rb +0 -3
  62. data/lib/aixm/component.rb +0 -6
  63. data/rakefile.rb +0 -36
  64. data/spec/factory.rb +0 -559
  65. data/spec/lib/aixm/a_spec.rb +0 -203
  66. data/spec/lib/aixm/component/fato_spec.rb +0 -267
  67. data/spec/lib/aixm/component/frequency_spec.rb +0 -74
  68. data/spec/lib/aixm/component/geometry/arc_spec.rb +0 -73
  69. data/spec/lib/aixm/component/geometry/border_spec.rb +0 -38
  70. data/spec/lib/aixm/component/geometry/circle_spec.rb +0 -68
  71. data/spec/lib/aixm/component/geometry/point_spec.rb +0 -37
  72. data/spec/lib/aixm/component/geometry_spec.rb +0 -316
  73. data/spec/lib/aixm/component/helipad_spec.rb +0 -193
  74. data/spec/lib/aixm/component/layer_spec.rb +0 -135
  75. data/spec/lib/aixm/component/lighting_spec.rb +0 -94
  76. data/spec/lib/aixm/component/runway_spec.rb +0 -479
  77. data/spec/lib/aixm/component/surface_spec.rb +0 -124
  78. data/spec/lib/aixm/component/timetable_spec.rb +0 -47
  79. data/spec/lib/aixm/component/vertical_limits_spec.rb +0 -94
  80. data/spec/lib/aixm/config_spec.rb +0 -41
  81. data/spec/lib/aixm/d_spec.rb +0 -150
  82. data/spec/lib/aixm/document_spec.rb +0 -1884
  83. data/spec/lib/aixm/errors_spec.rb +0 -14
  84. data/spec/lib/aixm/f_spec.rb +0 -85
  85. data/spec/lib/aixm/feature/address_spec.rb +0 -60
  86. data/spec/lib/aixm/feature/airport_spec.rb +0 -776
  87. data/spec/lib/aixm/feature/airspace_spec.rb +0 -394
  88. data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +0 -103
  89. data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +0 -98
  90. data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +0 -85
  91. data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +0 -95
  92. data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +0 -94
  93. data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +0 -251
  94. data/spec/lib/aixm/feature/navigational_aid_spec.rb +0 -52
  95. data/spec/lib/aixm/feature/obstacle_group_spec.rb +0 -330
  96. data/spec/lib/aixm/feature/obstacle_spec.rb +0 -284
  97. data/spec/lib/aixm/feature/organisation_spec.rb +0 -83
  98. data/spec/lib/aixm/feature/service_spec.rb +0 -59
  99. data/spec/lib/aixm/feature/unit_spec.rb +0 -238
  100. data/spec/lib/aixm/feature_spec.rb +0 -38
  101. data/spec/lib/aixm/p_spec.rb +0 -189
  102. data/spec/lib/aixm/refinements_spec.rb +0 -430
  103. data/spec/lib/aixm/version_spec.rb +0 -7
  104. data/spec/lib/aixm/w_spec.rb +0 -150
  105. data/spec/lib/aixm/xy_spec.rb +0 -180
  106. data/spec/lib/aixm/z_spec.rb +0 -94
  107. data/spec/macros/marking.rb +0 -12
  108. data/spec/macros/organisation.rb +0 -11
  109. data/spec/macros/remarks.rb +0 -12
  110. data/spec/macros/timetable.rb +0 -11
  111. data/spec/macros/xy.rb +0 -11
  112. data/spec/macros/z_qnh.rb +0 -11
  113. data/spec/sounds/failure.mp3 +0 -0
  114. data/spec/sounds/success.mp3 +0 -0
  115. data/spec/spec_helper.rb +0 -62
@@ -1,394 +0,0 @@
1
- require_relative '../../../spec_helper'
2
-
3
- describe AIXM::Feature::Airspace do
4
-
5
- context "only required attributes set" do
6
- subject do
7
- AIXM.airspace(type: "TMA", name: "Test TMA")
8
- end
9
-
10
- describe :initialize do
11
- it "sets defaults" do
12
- _(subject.id).must_equal 'C55466EC'
13
- _(subject.layers).must_equal []
14
- _(subject.geometry).must_be_instance_of AIXM::Component::Geometry
15
- end
16
- end
17
-
18
- describe :id= do
19
- it "fails on invalid values" do
20
- _([:foobar, 123]).wont_be_written_to subject, :id
21
- end
22
-
23
- it "falls back to id derived from digest of type, local_type and name" do
24
- _(subject.tap { |s| s.id = nil }.id).must_equal 'C55466EC'
25
- end
26
-
27
- it "upcases value" do
28
- _(subject.tap { |s| s.id = 'löl' }.id).must_equal 'LOEL'
29
- end
30
- end
31
-
32
- describe :type= do
33
- it "fails on invalid values" do
34
- _([nil, :foobar, 123]).wont_be_written_to subject, :type
35
- end
36
-
37
- it "looks up valid values" do
38
- _(subject.tap { |s| s.type = :danger_area }.type).must_equal :danger_area
39
- _(subject.tap { |s| s.type = :P }.type).must_equal :prohibited_area
40
- end
41
- end
42
-
43
- describe :local_type= do
44
- it "fails on invalid values" do
45
- _([:foobar, 123]).wont_be_written_to subject, :local_type
46
- end
47
-
48
- it "accepts nil value" do
49
- _([nil]).must_be_written_to subject, :local_type
50
- end
51
-
52
- it "upcases value" do
53
- _(subject.tap { |s| s.local_type = 'löl' }.local_type).must_equal 'LOEL'
54
- end
55
- end
56
-
57
- describe :name= do
58
- it "fails on invalid values" do
59
- _([:foobar, 123]).wont_be_written_to subject, :name
60
- end
61
-
62
- it "accepts nil value" do
63
- _([nil]).must_be_written_to subject, :name
64
- end
65
-
66
- it "upcases value" do
67
- _(subject.tap { |s| s.name = 'löl' }.name).must_equal 'LOEL'
68
- end
69
- end
70
-
71
- describe :to_uid do
72
- it "builds with arbitrary tag" do
73
- _(subject.to_uid).must_match(/<AseUid>/)
74
- _(subject.to_uid(as: :FooBar)).must_match(/<FooBar>/)
75
- end
76
- end
77
-
78
- describe :to_xml do
79
- it "fails to build AIXM since geometry is not closed" do
80
- subject.layers << AIXM::Factory.layer
81
- _{ subject.to_xml }.must_raise AIXM::GeometryError
82
- end
83
-
84
- it "fails to build AIXM since layers are not defined" do
85
- subject.geometry = AIXM::Factory.circle_geometry
86
- _{ subject.to_xml }.must_raise AIXM::LayerError
87
- end
88
- end
89
- end
90
-
91
- context "only required attributes, geometry and layers set" do
92
- subject do
93
- AIXM.airspace(type: "TMA", name: "Test TMA").tap do |airspace|
94
- airspace.geometry = AIXM::Factory.circle_geometry
95
- airspace.layers << AIXM::Factory.layer
96
- end
97
- end
98
-
99
- describe :to_xml do
100
- it "builds correct AIXM without id" do
101
- _(subject.to_xml).must_match(%r{<codeId>C55466EC</codeId>})
102
- end
103
-
104
- it "builds correct AIXM without short name" do
105
- _(subject.to_xml).wont_match(/<txtLocalType>/)
106
- end
107
-
108
- it "builds correct AIXM with identical name and short name" do
109
- _(subject.to_xml).wont_match(/<txtLocalType>/)
110
- end
111
- end
112
- end
113
-
114
- context "with one layer" do
115
- subject do
116
- AIXM::Factory.polygon_airspace
117
- end
118
-
119
- describe :to_xml do
120
- it "builds correct complete OFMX" do
121
- AIXM.ofmx!
122
- _(subject.to_xml).must_equal <<~"END"
123
- <!-- Airspace: [D] POLYGON AIRSPACE -->
124
- <Ase source="LF|GEN|0.0 FACTORY|0|0">
125
- <AseUid>
126
- <codeType>D</codeType>
127
- <codeId>PA</codeId>
128
- </AseUid>
129
- <txtLocalType>POLYGON</txtLocalType>
130
- <txtName>POLYGON AIRSPACE</txtName>
131
- <codeClass>C</codeClass>
132
- <codeLocInd>XXXX</codeLocInd>
133
- <codeActivity>TFC-AD</codeActivity>
134
- <codeDistVerUpper>STD</codeDistVerUpper>
135
- <valDistVerUpper>65</valDistVerUpper>
136
- <uomDistVerUpper>FL</uomDistVerUpper>
137
- <codeDistVerLower>STD</codeDistVerLower>
138
- <valDistVerLower>45</valDistVerLower>
139
- <uomDistVerLower>FL</uomDistVerLower>
140
- <codeDistVerMax>ALT</codeDistVerMax>
141
- <valDistVerMax>6000</valDistVerMax>
142
- <uomDistVerMax>FT</uomDistVerMax>
143
- <codeDistVerMnm>HEI</codeDistVerMnm>
144
- <valDistVerMnm>3000</valDistVerMnm>
145
- <uomDistVerMnm>FT</uomDistVerMnm>
146
- <Att>
147
- <codeWorkHr>H24</codeWorkHr>
148
- </Att>
149
- <codeSelAvbl>Y</codeSelAvbl>
150
- <txtRmk>airspace layer</txtRmk>
151
- </Ase>
152
- <Abd>
153
- <AbdUid>
154
- <AseUid>
155
- <codeType>D</codeType>
156
- <codeId>PA</codeId>
157
- </AseUid>
158
- </AbdUid>
159
- <Avx>
160
- <codeType>CWA</codeType>
161
- <geoLat>47.85916667N</geoLat>
162
- <geoLong>007.56000000E</geoLong>
163
- <codeDatum>WGE</codeDatum>
164
- <geoLatArc>47.90416667N</geoLatArc>
165
- <geoLongArc>007.56333333E</geoLongArc>
166
- </Avx>
167
- <Avx>
168
- <GbrUid>
169
- <txtName>FRANCE_GERMANY</txtName>
170
- </GbrUid>
171
- <codeType>FNT</codeType>
172
- <geoLat>47.94361111N</geoLat>
173
- <geoLong>007.59583333E</geoLong>
174
- <codeDatum>WGE</codeDatum>
175
- </Avx>
176
- <Avx>
177
- <codeType>GRC</codeType>
178
- <geoLat>47.85916667N</geoLat>
179
- <geoLong>007.56000000E</geoLong>
180
- <codeDatum>WGE</codeDatum>
181
- </Avx>
182
- </Abd>
183
- END
184
- end
185
-
186
- it "builds correct minimal OFMX" do
187
- AIXM.ofmx!
188
- subject.local_type = subject.name = nil
189
- _(subject.to_xml).must_equal <<~"END"
190
- <!-- Airspace: [D] UNNAMED -->
191
- <Ase source="LF|GEN|0.0 FACTORY|0|0">
192
- <AseUid>
193
- <codeType>D</codeType>
194
- <codeId>PA</codeId>
195
- </AseUid>
196
- <codeClass>C</codeClass>
197
- <codeLocInd>XXXX</codeLocInd>
198
- <codeActivity>TFC-AD</codeActivity>
199
- <codeDistVerUpper>STD</codeDistVerUpper>
200
- <valDistVerUpper>65</valDistVerUpper>
201
- <uomDistVerUpper>FL</uomDistVerUpper>
202
- <codeDistVerLower>STD</codeDistVerLower>
203
- <valDistVerLower>45</valDistVerLower>
204
- <uomDistVerLower>FL</uomDistVerLower>
205
- <codeDistVerMax>ALT</codeDistVerMax>
206
- <valDistVerMax>6000</valDistVerMax>
207
- <uomDistVerMax>FT</uomDistVerMax>
208
- <codeDistVerMnm>HEI</codeDistVerMnm>
209
- <valDistVerMnm>3000</valDistVerMnm>
210
- <uomDistVerMnm>FT</uomDistVerMnm>
211
- <Att>
212
- <codeWorkHr>H24</codeWorkHr>
213
- </Att>
214
- <codeSelAvbl>Y</codeSelAvbl>
215
- <txtRmk>airspace layer</txtRmk>
216
- </Ase>
217
- <Abd>
218
- <AbdUid>
219
- <AseUid>
220
- <codeType>D</codeType>
221
- <codeId>PA</codeId>
222
- </AseUid>
223
- </AbdUid>
224
- <Avx>
225
- <codeType>CWA</codeType>
226
- <geoLat>47.85916667N</geoLat>
227
- <geoLong>007.56000000E</geoLong>
228
- <codeDatum>WGE</codeDatum>
229
- <geoLatArc>47.90416667N</geoLatArc>
230
- <geoLongArc>007.56333333E</geoLongArc>
231
- </Avx>
232
- <Avx>
233
- <GbrUid>
234
- <txtName>FRANCE_GERMANY</txtName>
235
- </GbrUid>
236
- <codeType>FNT</codeType>
237
- <geoLat>47.94361111N</geoLat>
238
- <geoLong>007.59583333E</geoLong>
239
- <codeDatum>WGE</codeDatum>
240
- </Avx>
241
- <Avx>
242
- <codeType>GRC</codeType>
243
- <geoLat>47.85916667N</geoLat>
244
- <geoLong>007.56000000E</geoLong>
245
- <codeDatum>WGE</codeDatum>
246
- </Avx>
247
- </Abd>
248
- END
249
- end
250
- end
251
-
252
- it "builds OFMX with mid" do
253
- AIXM.ofmx!
254
- AIXM.config.mid_region = 'LF'
255
- _(subject.to_xml).must_match /<AseUid mid="8894c821-b486-8128-48f2-a47c2e9f4c13">/
256
- # _(subject.to_xml).must_match /<AbdUid mid="">/
257
- end
258
- end
259
-
260
- context "with two layers" do
261
- subject do
262
- AIXM::Factory.polygon_airspace.tap do |airspace|
263
- airspace.layers << AIXM::Factory.layer
264
- end
265
- end
266
-
267
- describe :to_xml do
268
- it "builds correct OFMX" do
269
- AIXM.ofmx!
270
- _(subject.to_xml).must_equal <<~"END"
271
- <!-- Airspace: [D] POLYGON AIRSPACE -->
272
- <Ase source="LF|GEN|0.0 FACTORY|0|0">
273
- <AseUid>
274
- <codeType>D</codeType>
275
- <codeId>PA</codeId>
276
- </AseUid>
277
- <txtLocalType>POLYGON</txtLocalType>
278
- <txtName>POLYGON AIRSPACE</txtName>
279
- </Ase>
280
- <Abd>
281
- <AbdUid>
282
- <AseUid>
283
- <codeType>D</codeType>
284
- <codeId>PA</codeId>
285
- </AseUid>
286
- </AbdUid>
287
- <Avx>
288
- <codeType>CWA</codeType>
289
- <geoLat>47.85916667N</geoLat>
290
- <geoLong>007.56000000E</geoLong>
291
- <codeDatum>WGE</codeDatum>
292
- <geoLatArc>47.90416667N</geoLatArc>
293
- <geoLongArc>007.56333333E</geoLongArc>
294
- </Avx>
295
- <Avx>
296
- <GbrUid>
297
- <txtName>FRANCE_GERMANY</txtName>
298
- </GbrUid>
299
- <codeType>FNT</codeType>
300
- <geoLat>47.94361111N</geoLat>
301
- <geoLong>007.59583333E</geoLong>
302
- <codeDatum>WGE</codeDatum>
303
- </Avx>
304
- <Avx>
305
- <codeType>GRC</codeType>
306
- <geoLat>47.85916667N</geoLat>
307
- <geoLong>007.56000000E</geoLong>
308
- <codeDatum>WGE</codeDatum>
309
- </Avx>
310
- </Abd>
311
- <Ase>
312
- <AseUid>
313
- <codeType>CLASS</codeType>
314
- <codeId>B794588D</codeId>
315
- </AseUid>
316
- <txtName>POLYGON AIRSPACE LAYER 1</txtName>
317
- <codeClass>C</codeClass>
318
- <codeLocInd>XXXX</codeLocInd>
319
- <codeActivity>TFC-AD</codeActivity>
320
- <codeDistVerUpper>STD</codeDistVerUpper>
321
- <valDistVerUpper>65</valDistVerUpper>
322
- <uomDistVerUpper>FL</uomDistVerUpper>
323
- <codeDistVerLower>STD</codeDistVerLower>
324
- <valDistVerLower>45</valDistVerLower>
325
- <uomDistVerLower>FL</uomDistVerLower>
326
- <codeDistVerMax>ALT</codeDistVerMax>
327
- <valDistVerMax>6000</valDistVerMax>
328
- <uomDistVerMax>FT</uomDistVerMax>
329
- <codeDistVerMnm>HEI</codeDistVerMnm>
330
- <valDistVerMnm>3000</valDistVerMnm>
331
- <uomDistVerMnm>FT</uomDistVerMnm>
332
- <Att>
333
- <codeWorkHr>H24</codeWorkHr>
334
- </Att>
335
- <codeSelAvbl>Y</codeSelAvbl>
336
- <txtRmk>airspace layer</txtRmk>
337
- </Ase>
338
- <Adg>
339
- <AdgUid>
340
- <AseUid>
341
- <codeType>CLASS</codeType>
342
- <codeId>B794588D</codeId>
343
- </AseUid>
344
- </AdgUid>
345
- <AseUidSameExtent>
346
- <codeType>D</codeType>
347
- <codeId>PA</codeId>
348
- </AseUidSameExtent>
349
- </Adg>
350
- <Ase>
351
- <AseUid>
352
- <codeType>CLASS</codeType>
353
- <codeId>64589EAF</codeId>
354
- </AseUid>
355
- <txtName>POLYGON AIRSPACE LAYER 2</txtName>
356
- <codeClass>C</codeClass>
357
- <codeLocInd>XXXX</codeLocInd>
358
- <codeActivity>TFC-AD</codeActivity>
359
- <codeDistVerUpper>STD</codeDistVerUpper>
360
- <valDistVerUpper>65</valDistVerUpper>
361
- <uomDistVerUpper>FL</uomDistVerUpper>
362
- <codeDistVerLower>STD</codeDistVerLower>
363
- <valDistVerLower>45</valDistVerLower>
364
- <uomDistVerLower>FL</uomDistVerLower>
365
- <codeDistVerMax>ALT</codeDistVerMax>
366
- <valDistVerMax>6000</valDistVerMax>
367
- <uomDistVerMax>FT</uomDistVerMax>
368
- <codeDistVerMnm>HEI</codeDistVerMnm>
369
- <valDistVerMnm>3000</valDistVerMnm>
370
- <uomDistVerMnm>FT</uomDistVerMnm>
371
- <Att>
372
- <codeWorkHr>H24</codeWorkHr>
373
- </Att>
374
- <codeSelAvbl>Y</codeSelAvbl>
375
- <txtRmk>airspace layer</txtRmk>
376
- </Ase>
377
- <Adg>
378
- <AdgUid>
379
- <AseUid>
380
- <codeType>CLASS</codeType>
381
- <codeId>64589EAF</codeId>
382
- </AseUid>
383
- </AdgUid>
384
- <AseUidSameExtent>
385
- <codeType>D</codeType>
386
- <codeId>PA</codeId>
387
- </AseUidSameExtent>
388
- </Adg>
389
- END
390
- end
391
- end
392
- end
393
-
394
- end
@@ -1,103 +0,0 @@
1
- require_relative '../../../../spec_helper'
2
-
3
- describe AIXM::Feature::NavigationalAid::DesignatedPoint do
4
- subject do
5
- AIXM::Factory.designated_point
6
- end
7
-
8
- describe :type= do
9
- it "fails on invalid values" do
10
- _([nil, :foobar, 123]).wont_be_written_to subject, :type
11
- end
12
-
13
- it "looks up valid values" do
14
- _(subject.tap { |s| s.type = :icao }.type).must_equal :icao
15
- _(subject.tap { |s| s.type = :'VFR-RP' }.type).must_equal :vfr_reporting_point
16
- end
17
- end
18
-
19
- describe :airport= do
20
- it "fails on invalid values" do
21
- _([:foobar, 123]).wont_be_written_to subject, :airport
22
- end
23
-
24
- it "accepts valid values" do
25
- _([nil, AIXM::Factory.airport]).must_be_written_to subject, :airport
26
- end
27
- end
28
-
29
- describe :kind do
30
- it "must return class/type combo" do
31
- _(subject.kind).must_equal "DesignatedPoint:VFR-RP"
32
- end
33
- end
34
-
35
- describe :to_xml do
36
- it "builds correct complete OFMX" do
37
- AIXM.ofmx!
38
- _(subject.to_xml).must_equal <<~END
39
- <!-- NavigationalAid: [DesignatedPoint:VFR-RP] DDD / DESIGNATED POINT NAVAID -->
40
- <Dpn source="LF|GEN|0.0 FACTORY|0|0">
41
- <DpnUid>
42
- <codeId>DDD</codeId>
43
- <geoLat>47.85916667N</geoLat>
44
- <geoLong>007.56000000E</geoLong>
45
- </DpnUid>
46
- <AhpUidAssoc>
47
- <codeId>LFNT</codeId>
48
- </AhpUidAssoc>
49
- <codeDatum>WGE</codeDatum>
50
- <codeType>VFR-RP</codeType>
51
- <txtName>DESIGNATED POINT NAVAID</txtName>
52
- <txtRmk>designated point navaid</txtRmk>
53
- </Dpn>
54
- END
55
- end
56
-
57
- it "builds correct minimal OFMX" do
58
- AIXM.ofmx!
59
- subject.name = subject.remarks = nil
60
- _(subject.to_xml).must_equal <<~END
61
- <!-- NavigationalAid: [DesignatedPoint:VFR-RP] DDD -->
62
- <Dpn source="LF|GEN|0.0 FACTORY|0|0">
63
- <DpnUid>
64
- <codeId>DDD</codeId>
65
- <geoLat>47.85916667N</geoLat>
66
- <geoLong>007.56000000E</geoLong>
67
- </DpnUid>
68
- <AhpUidAssoc>
69
- <codeId>LFNT</codeId>
70
- </AhpUidAssoc>
71
- <codeDatum>WGE</codeDatum>
72
- <codeType>VFR-RP</codeType>
73
- </Dpn>
74
- END
75
- end
76
-
77
- it "builds OFMX with mid" do
78
- AIXM.ofmx!
79
- AIXM.config.mid_region = 'LF'
80
- _(subject.to_xml).must_match /<DpnUid mid="b2977fe4-c591-0e72-8a5f-2e30d80f92d6">/
81
- end
82
-
83
- it "builds correct complete AIXM" do
84
- _(subject.to_xml).must_equal <<~END
85
- <!-- NavigationalAid: [DesignatedPoint:VFR-RP] DDD / DESIGNATED POINT NAVAID -->
86
- <Dpn>
87
- <DpnUid>
88
- <codeId>DDD</codeId>
89
- <geoLat>475133.00N</geoLat>
90
- <geoLong>0073336.00E</geoLong>
91
- </DpnUid>
92
- <AhpUidAssoc>
93
- <codeId>LFNT</codeId>
94
- </AhpUidAssoc>
95
- <codeDatum>WGE</codeDatum>
96
- <codeType>OTHER</codeType>
97
- <txtName>DESIGNATED POINT NAVAID</txtName>
98
- <txtRmk>designated point navaid</txtRmk>
99
- </Dpn>
100
- END
101
- end
102
- end
103
- end