aixm 0.3.0 → 0.3.1
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/.ruby-version +1 -1
- data/CHANGELOG.md +96 -72
- data/README.md +0 -1
- data/lib/aixm/component/geometry.rb +8 -2
- data/lib/aixm/component/layer.rb +83 -2
- data/lib/aixm/document.rb +11 -2
- data/lib/aixm/errors.rb +14 -2
- data/lib/aixm/feature.rb +2 -14
- data/lib/aixm/feature/airport.rb +19 -18
- data/lib/aixm/feature/airspace.rb +19 -21
- data/lib/aixm/feature/navigational_aid.rb +2 -2
- data/lib/aixm/feature/navigational_aid/designated_point.rb +1 -2
- data/lib/aixm/feature/navigational_aid/dme.rb +25 -4
- data/lib/aixm/feature/navigational_aid/marker.rb +1 -2
- data/lib/aixm/feature/navigational_aid/ndb.rb +1 -2
- data/lib/aixm/feature/navigational_aid/tacan.rb +5 -2
- data/lib/aixm/feature/navigational_aid/vor.rb +3 -4
- data/lib/aixm/feature/organisation.rb +3 -4
- data/lib/aixm/feature/unit.rb +3 -4
- data/lib/aixm/version.rb +1 -1
- data/schemas/ofmx/0/OFMX-CSV-Obstacle.json +209 -0
- data/schemas/ofmx/0/OFMX-CSV.json +12 -0
- data/schemas/ofmx/0/OFMX-DataTypes.xsd +64 -5
- data/schemas/ofmx/0/OFMX-Features.xsd +73 -23
- data/schemas/ofmx/0/OFMX-Snapshot.xsd +7 -2
- data/spec/factory.rb +8 -18
- data/spec/lib/aixm/component/geometry_spec.rb +27 -4
- data/spec/lib/aixm/component/helipad_spec.rb +2 -2
- data/spec/lib/aixm/component/layer_spec.rb +27 -0
- data/spec/lib/aixm/component/runway_spec.rb +13 -13
- data/spec/lib/aixm/document_spec.rb +56 -42
- data/spec/lib/aixm/feature/airport_spec.rb +15 -15
- data/spec/lib/aixm/feature/airspace_spec.rb +38 -30
- data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +2 -2
- data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +24 -7
- data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +4 -4
- data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +4 -4
- data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +24 -7
- data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +14 -14
- data/spec/lib/aixm/feature/organisation_spec.rb +2 -2
- data/spec/lib/aixm/feature/unit_spec.rb +11 -11
- data/spec/lib/aixm/feature_spec.rb +0 -20
- metadata +4 -2
| @@ -9,7 +9,7 @@ describe AIXM::Feature::Airport do | |
| 9 9 | 
             
                it "sets defaults" do
         | 
| 10 10 | 
             
                  subject = AIXM::Feature::Airport.new(
         | 
| 11 11 | 
             
                    organisation: AIXM::Factory.organisation,
         | 
| 12 | 
            -
                     | 
| 12 | 
            +
                    id: 'LFNT',
         | 
| 13 13 | 
             
                    name: 'Avignon-Pujaut',
         | 
| 14 14 | 
             
                    xy: AIXM.xy(lat: %q(43°59'46"N), long: %q(004°45'16"E))
         | 
| 15 15 | 
             
                  )
         | 
| @@ -25,13 +25,13 @@ describe AIXM::Feature::Airport do | |
| 25 25 | 
             
                end
         | 
| 26 26 | 
             
              end
         | 
| 27 27 |  | 
| 28 | 
            -
              describe : | 
| 28 | 
            +
              describe :id= do
         | 
| 29 29 | 
             
                it "fails on invalid values" do
         | 
| 30 | 
            -
                  [nil, 'A', 'AB', 'ABCDE', ' | 
| 30 | 
            +
                  [nil, 'A', 'AB', 'ABCDE', 'AB 1234'].wont_be_written_to subject, :id
         | 
| 31 31 | 
             
                end
         | 
| 32 32 |  | 
| 33 33 | 
             
                it "upcases valid values" do
         | 
| 34 | 
            -
                  subject.tap { |s| s. | 
| 34 | 
            +
                  subject.tap { |s| s.id = 'lfnt' }.id.must_equal 'LFNT'
         | 
| 35 35 | 
             
                end
         | 
| 36 36 | 
             
              end
         | 
| 37 37 |  | 
| @@ -184,10 +184,10 @@ describe AIXM::Feature::Airport do | |
| 184 184 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 185 185 | 
             
                    <!-- Airport: LFNT AVIGNON-PUJAUT -->
         | 
| 186 186 | 
             
                    <Ahp source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 187 | 
            -
                      <AhpUid | 
| 187 | 
            +
                      <AhpUid>
         | 
| 188 188 | 
             
                        <codeId>LFNT</codeId>
         | 
| 189 189 | 
             
                      </AhpUid>
         | 
| 190 | 
            -
                      <OrgUid | 
| 190 | 
            +
                      <OrgUid>
         | 
| 191 191 | 
             
                        <txtName>FRANCE</txtName>
         | 
| 192 192 | 
             
                      </OrgUid>
         | 
| 193 193 | 
             
                      <txtName>AVIGNON-PUJAUT</txtName>
         | 
| @@ -206,7 +206,7 @@ describe AIXM::Feature::Airport do | |
| 206 206 | 
             
                    </Ahp>
         | 
| 207 207 | 
             
                    <Rwy>
         | 
| 208 208 | 
             
                      <RwyUid>
         | 
| 209 | 
            -
                        <AhpUid | 
| 209 | 
            +
                        <AhpUid>
         | 
| 210 210 | 
             
                          <codeId>LFNT</codeId>
         | 
| 211 211 | 
             
                        </AhpUid>
         | 
| 212 212 | 
             
                        <txtDesig>16L/34R</txtDesig>
         | 
| @@ -221,7 +221,7 @@ describe AIXM::Feature::Airport do | |
| 221 221 | 
             
                    <Rdn>
         | 
| 222 222 | 
             
                      <RdnUid>
         | 
| 223 223 | 
             
                        <RwyUid>
         | 
| 224 | 
            -
                          <AhpUid | 
| 224 | 
            +
                          <AhpUid>
         | 
| 225 225 | 
             
                            <codeId>LFNT</codeId>
         | 
| 226 226 | 
             
                          </AhpUid>
         | 
| 227 227 | 
             
                          <txtDesig>16L/34R</txtDesig>
         | 
| @@ -240,7 +240,7 @@ describe AIXM::Feature::Airport do | |
| 240 240 | 
             
                      <RddUid>
         | 
| 241 241 | 
             
                        <RdnUid>
         | 
| 242 242 | 
             
                          <RwyUid>
         | 
| 243 | 
            -
                            <AhpUid | 
| 243 | 
            +
                            <AhpUid>
         | 
| 244 244 | 
             
                              <codeId>LFNT</codeId>
         | 
| 245 245 | 
             
                            </AhpUid>
         | 
| 246 246 | 
             
                            <txtDesig>16L/34R</txtDesig>
         | 
| @@ -257,7 +257,7 @@ describe AIXM::Feature::Airport do | |
| 257 257 | 
             
                    <Rdn>
         | 
| 258 258 | 
             
                      <RdnUid>
         | 
| 259 259 | 
             
                        <RwyUid>
         | 
| 260 | 
            -
                          <AhpUid | 
| 260 | 
            +
                          <AhpUid>
         | 
| 261 261 | 
             
                            <codeId>LFNT</codeId>
         | 
| 262 262 | 
             
                          </AhpUid>
         | 
| 263 263 | 
             
                          <txtDesig>16L/34R</txtDesig>
         | 
| @@ -274,7 +274,7 @@ describe AIXM::Feature::Airport do | |
| 274 274 | 
             
                      <RddUid>
         | 
| 275 275 | 
             
                        <RdnUid>
         | 
| 276 276 | 
             
                          <RwyUid>
         | 
| 277 | 
            -
                            <AhpUid | 
| 277 | 
            +
                            <AhpUid>
         | 
| 278 278 | 
             
                              <codeId>LFNT</codeId>
         | 
| 279 279 | 
             
                            </AhpUid>
         | 
| 280 280 | 
             
                            <txtDesig>16L/34R</txtDesig>
         | 
| @@ -290,7 +290,7 @@ describe AIXM::Feature::Airport do | |
| 290 290 | 
             
                    </Rdd>
         | 
| 291 291 | 
             
                    <Tla>
         | 
| 292 292 | 
             
                      <TlaUid>
         | 
| 293 | 
            -
                        <AhpUid | 
| 293 | 
            +
                        <AhpUid>
         | 
| 294 294 | 
             
                          <codeId>LFNT</codeId>
         | 
| 295 295 | 
             
                        </AhpUid>
         | 
| 296 296 | 
             
                        <txtDesig>H1</txtDesig>
         | 
| @@ -309,7 +309,7 @@ describe AIXM::Feature::Airport do | |
| 309 309 | 
             
                    </Tla>
         | 
| 310 310 | 
             
                    <Ahu>
         | 
| 311 311 | 
             
                      <AhuUid>
         | 
| 312 | 
            -
                        <AhpUid | 
| 312 | 
            +
                        <AhpUid>
         | 
| 313 313 | 
             
                          <codeId>LFNT</codeId>
         | 
| 314 314 | 
             
                        </AhpUid>
         | 
| 315 315 | 
             
                      </AhuUid>
         | 
| @@ -346,10 +346,10 @@ describe AIXM::Feature::Airport do | |
| 346 346 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 347 347 | 
             
                    <!-- Airport: LFNT AVIGNON-PUJAUT -->
         | 
| 348 348 | 
             
                    <Ahp source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 349 | 
            -
                      <AhpUid | 
| 349 | 
            +
                      <AhpUid>
         | 
| 350 350 | 
             
                        <codeId>LFNT</codeId>
         | 
| 351 351 | 
             
                      </AhpUid>
         | 
| 352 | 
            -
                      <OrgUid | 
| 352 | 
            +
                      <OrgUid>
         | 
| 353 353 | 
             
                        <txtName>FRANCE</txtName>
         | 
| 354 354 | 
             
                      </OrgUid>
         | 
| 355 355 | 
             
                      <txtName>AVIGNON-PUJAUT</txtName>
         | 
| @@ -9,7 +9,7 @@ describe AIXM::Feature::Airspace do | |
| 9 9 |  | 
| 10 10 | 
             
                describe :initialize do
         | 
| 11 11 | 
             
                  it "sets defaults" do
         | 
| 12 | 
            -
                    subject.id.must_equal ' | 
| 12 | 
            +
                    subject.id.must_equal 'C55466EC'
         | 
| 13 13 | 
             
                    subject.layers.must_equal []
         | 
| 14 14 | 
             
                    subject.geometry.must_be_instance_of AIXM::Component::Geometry
         | 
| 15 15 | 
             
                  end
         | 
| @@ -20,8 +20,8 @@ describe AIXM::Feature::Airspace do | |
| 20 20 | 
             
                    [:foobar, 123].wont_be_written_to subject, :id
         | 
| 21 21 | 
             
                  end
         | 
| 22 22 |  | 
| 23 | 
            -
                  it "falls back to id derived from digest of  | 
| 24 | 
            -
                    subject.tap { |s| s.id = nil }.id.must_equal ' | 
| 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 25 | 
             
                  end
         | 
| 26 26 |  | 
| 27 27 | 
             
                  it "upcases value" do
         | 
| @@ -40,31 +40,31 @@ describe AIXM::Feature::Airspace do | |
| 40 40 | 
             
                  end
         | 
| 41 41 | 
             
                end
         | 
| 42 42 |  | 
| 43 | 
            -
                describe : | 
| 43 | 
            +
                describe :local_type= do
         | 
| 44 44 | 
             
                  it "fails on invalid values" do
         | 
| 45 | 
            -
                    [:foobar, 123].wont_be_written_to subject, : | 
| 45 | 
            +
                    [:foobar, 123].wont_be_written_to subject, :local_type
         | 
| 46 46 | 
             
                  end
         | 
| 47 47 |  | 
| 48 48 | 
             
                  it "accepts nil value" do
         | 
| 49 | 
            -
                    [nil].must_be_written_to subject, : | 
| 49 | 
            +
                    [nil].must_be_written_to subject, :local_type
         | 
| 50 50 | 
             
                  end
         | 
| 51 51 |  | 
| 52 52 | 
             
                  it "upcases value" do
         | 
| 53 | 
            -
                    subject.tap { |s| s. | 
| 53 | 
            +
                    subject.tap { |s| s.local_type = 'löl' }.local_type.must_equal 'LOEL'
         | 
| 54 54 | 
             
                  end
         | 
| 55 55 | 
             
                end
         | 
| 56 56 |  | 
| 57 | 
            -
                describe : | 
| 57 | 
            +
                describe :name= do
         | 
| 58 58 | 
             
                  it "fails on invalid values" do
         | 
| 59 | 
            -
                    [:foobar, 123].wont_be_written_to subject, : | 
| 59 | 
            +
                    [:foobar, 123].wont_be_written_to subject, :name
         | 
| 60 60 | 
             
                  end
         | 
| 61 61 |  | 
| 62 62 | 
             
                  it "accepts nil value" do
         | 
| 63 | 
            -
                    [nil].must_be_written_to subject, : | 
| 63 | 
            +
                    [nil].must_be_written_to subject, :name
         | 
| 64 64 | 
             
                  end
         | 
| 65 65 |  | 
| 66 66 | 
             
                  it "upcases value" do
         | 
| 67 | 
            -
                    subject.tap { |s| s. | 
| 67 | 
            +
                    subject.tap { |s| s.name = 'löl' }.name.must_equal 'LOEL'
         | 
| 68 68 | 
             
                  end
         | 
| 69 69 | 
             
                end
         | 
| 70 70 |  | 
| @@ -99,7 +99,7 @@ describe AIXM::Feature::Airspace do | |
| 99 99 | 
             
                describe :to_xml do
         | 
| 100 100 | 
             
                  it "builds correct AIXM without id" do
         | 
| 101 101 | 
             
                    AIXM.aixm!
         | 
| 102 | 
            -
                    subject.to_xml.must_match(%r{<codeId> | 
| 102 | 
            +
                    subject.to_xml.must_match(%r{<codeId>C55466EC</codeId>})
         | 
| 103 103 | 
             
                  end
         | 
| 104 104 |  | 
| 105 105 | 
             
                  it "builds correct AIXM without short name" do
         | 
| @@ -125,13 +125,15 @@ describe AIXM::Feature::Airspace do | |
| 125 125 | 
             
                    subject.to_xml.must_equal <<~"END"
         | 
| 126 126 | 
             
                      <!-- Airspace: [D] POLYGON AIRSPACE -->
         | 
| 127 127 | 
             
                      <Ase source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 128 | 
            -
                        <AseUid | 
| 128 | 
            +
                        <AseUid>
         | 
| 129 129 | 
             
                          <codeType>D</codeType>
         | 
| 130 130 | 
             
                          <codeId>PA</codeId>
         | 
| 131 131 | 
             
                        </AseUid>
         | 
| 132 132 | 
             
                        <txtLocalType>POLYGON</txtLocalType>
         | 
| 133 133 | 
             
                        <txtName>POLYGON AIRSPACE</txtName>
         | 
| 134 134 | 
             
                        <codeClass>C</codeClass>
         | 
| 135 | 
            +
                        <codeLocInd>XXXX</codeLocInd>
         | 
| 136 | 
            +
                        <codeActivity>TFC-AD</codeActivity>
         | 
| 135 137 | 
             
                        <codeDistVerUpper>STD</codeDistVerUpper>
         | 
| 136 138 | 
             
                        <valDistVerUpper>65</valDistVerUpper>
         | 
| 137 139 | 
             
                        <uomDistVerUpper>FL</uomDistVerUpper>
         | 
| @@ -152,7 +154,7 @@ describe AIXM::Feature::Airspace do | |
| 152 154 | 
             
                      </Ase>
         | 
| 153 155 | 
             
                      <Abd>
         | 
| 154 156 | 
             
                        <AbdUid>
         | 
| 155 | 
            -
                          <AseUid | 
| 157 | 
            +
                          <AseUid>
         | 
| 156 158 | 
             
                            <codeType>D</codeType>
         | 
| 157 159 | 
             
                            <codeId>PA</codeId>
         | 
| 158 160 | 
             
                          </AseUid>
         | 
| @@ -186,15 +188,17 @@ describe AIXM::Feature::Airspace do | |
| 186 188 |  | 
| 187 189 | 
             
                  it "builds correct minimal OFMX" do
         | 
| 188 190 | 
             
                    AIXM.ofmx!
         | 
| 189 | 
            -
                    subject. | 
| 191 | 
            +
                    subject.local_type = subject.name = nil
         | 
| 190 192 | 
             
                    subject.to_xml.must_equal <<~"END"
         | 
| 191 193 | 
             
                      <!-- Airspace: [D] UNNAMED -->
         | 
| 192 194 | 
             
                      <Ase source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 193 | 
            -
                        <AseUid | 
| 195 | 
            +
                        <AseUid>
         | 
| 194 196 | 
             
                          <codeType>D</codeType>
         | 
| 195 197 | 
             
                          <codeId>PA</codeId>
         | 
| 196 198 | 
             
                        </AseUid>
         | 
| 197 199 | 
             
                        <codeClass>C</codeClass>
         | 
| 200 | 
            +
                        <codeLocInd>XXXX</codeLocInd>
         | 
| 201 | 
            +
                        <codeActivity>TFC-AD</codeActivity>
         | 
| 198 202 | 
             
                        <codeDistVerUpper>STD</codeDistVerUpper>
         | 
| 199 203 | 
             
                        <valDistVerUpper>65</valDistVerUpper>
         | 
| 200 204 | 
             
                        <uomDistVerUpper>FL</uomDistVerUpper>
         | 
| @@ -215,7 +219,7 @@ describe AIXM::Feature::Airspace do | |
| 215 219 | 
             
                      </Ase>
         | 
| 216 220 | 
             
                      <Abd>
         | 
| 217 221 | 
             
                        <AbdUid>
         | 
| 218 | 
            -
                          <AseUid | 
| 222 | 
            +
                          <AseUid>
         | 
| 219 223 | 
             
                            <codeType>D</codeType>
         | 
| 220 224 | 
             
                            <codeId>PA</codeId>
         | 
| 221 225 | 
             
                          </AseUid>
         | 
| @@ -261,8 +265,8 @@ describe AIXM::Feature::Airspace do | |
| 261 265 | 
             
                    AIXM.ofmx!
         | 
| 262 266 | 
             
                    subject.to_xml.must_equal <<~"END"
         | 
| 263 267 | 
             
                      <!-- Airspace: [D] POLYGON AIRSPACE -->
         | 
| 264 | 
            -
                      <Ase source="LF|GEN|0.0 FACTORY|0|0" | 
| 265 | 
            -
                        <AseUid | 
| 268 | 
            +
                      <Ase source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 269 | 
            +
                        <AseUid>
         | 
| 266 270 | 
             
                          <codeType>D</codeType>
         | 
| 267 271 | 
             
                          <codeId>PA</codeId>
         | 
| 268 272 | 
             
                        </AseUid>
         | 
| @@ -271,7 +275,7 @@ describe AIXM::Feature::Airspace do | |
| 271 275 | 
             
                      </Ase>
         | 
| 272 276 | 
             
                      <Abd>
         | 
| 273 277 | 
             
                        <AbdUid>
         | 
| 274 | 
            -
                          <AseUid | 
| 278 | 
            +
                          <AseUid>
         | 
| 275 279 | 
             
                            <codeType>D</codeType>
         | 
| 276 280 | 
             
                            <codeId>PA</codeId>
         | 
| 277 281 | 
             
                          </AseUid>
         | 
| @@ -301,12 +305,14 @@ describe AIXM::Feature::Airspace do | |
| 301 305 | 
             
                        </Avx>
         | 
| 302 306 | 
             
                      </Abd>
         | 
| 303 307 | 
             
                      <Ase>
         | 
| 304 | 
            -
                        <AseUid | 
| 308 | 
            +
                        <AseUid>
         | 
| 305 309 | 
             
                          <codeType>CLASS</codeType>
         | 
| 306 | 
            -
                          <codeId> | 
| 310 | 
            +
                          <codeId>B794588D</codeId>
         | 
| 307 311 | 
             
                        </AseUid>
         | 
| 308 312 | 
             
                        <txtName>POLYGON AIRSPACE LAYER 1</txtName>
         | 
| 309 313 | 
             
                        <codeClass>C</codeClass>
         | 
| 314 | 
            +
                        <codeLocInd>XXXX</codeLocInd>
         | 
| 315 | 
            +
                        <codeActivity>TFC-AD</codeActivity>
         | 
| 310 316 | 
             
                        <codeDistVerUpper>STD</codeDistVerUpper>
         | 
| 311 317 | 
             
                        <valDistVerUpper>65</valDistVerUpper>
         | 
| 312 318 | 
             
                        <uomDistVerUpper>FL</uomDistVerUpper>
         | 
| @@ -327,23 +333,25 @@ describe AIXM::Feature::Airspace do | |
| 327 333 | 
             
                      </Ase>
         | 
| 328 334 | 
             
                      <Adg>
         | 
| 329 335 | 
             
                        <AdgUid>
         | 
| 330 | 
            -
                          <AseUid | 
| 336 | 
            +
                          <AseUid>
         | 
| 331 337 | 
             
                            <codeType>CLASS</codeType>
         | 
| 332 | 
            -
                            <codeId> | 
| 338 | 
            +
                            <codeId>B794588D</codeId>
         | 
| 333 339 | 
             
                          </AseUid>
         | 
| 334 340 | 
             
                        </AdgUid>
         | 
| 335 | 
            -
                        <AseUidSameExtent | 
| 341 | 
            +
                        <AseUidSameExtent>
         | 
| 336 342 | 
             
                          <codeType>D</codeType>
         | 
| 337 343 | 
             
                          <codeId>PA</codeId>
         | 
| 338 344 | 
             
                        </AseUidSameExtent>
         | 
| 339 345 | 
             
                      </Adg>
         | 
| 340 346 | 
             
                      <Ase>
         | 
| 341 | 
            -
                        <AseUid | 
| 347 | 
            +
                        <AseUid>
         | 
| 342 348 | 
             
                          <codeType>CLASS</codeType>
         | 
| 343 | 
            -
                          <codeId> | 
| 349 | 
            +
                          <codeId>64589EAF</codeId>
         | 
| 344 350 | 
             
                        </AseUid>
         | 
| 345 351 | 
             
                        <txtName>POLYGON AIRSPACE LAYER 2</txtName>
         | 
| 346 352 | 
             
                        <codeClass>C</codeClass>
         | 
| 353 | 
            +
                        <codeLocInd>XXXX</codeLocInd>
         | 
| 354 | 
            +
                        <codeActivity>TFC-AD</codeActivity>
         | 
| 347 355 | 
             
                        <codeDistVerUpper>STD</codeDistVerUpper>
         | 
| 348 356 | 
             
                        <valDistVerUpper>65</valDistVerUpper>
         | 
| 349 357 | 
             
                        <uomDistVerUpper>FL</uomDistVerUpper>
         | 
| @@ -364,12 +372,12 @@ describe AIXM::Feature::Airspace do | |
| 364 372 | 
             
                      </Ase>
         | 
| 365 373 | 
             
                      <Adg>
         | 
| 366 374 | 
             
                        <AdgUid>
         | 
| 367 | 
            -
                          <AseUid | 
| 375 | 
            +
                          <AseUid>
         | 
| 368 376 | 
             
                            <codeType>CLASS</codeType>
         | 
| 369 | 
            -
                            <codeId> | 
| 377 | 
            +
                            <codeId>64589EAF</codeId>
         | 
| 370 378 | 
             
                          </AseUid>
         | 
| 371 379 | 
             
                        </AdgUid>
         | 
| 372 | 
            -
                        <AseUidSameExtent | 
| 380 | 
            +
                        <AseUidSameExtent>
         | 
| 373 381 | 
             
                          <codeType>D</codeType>
         | 
| 374 382 | 
             
                          <codeId>PA</codeId>
         | 
| 375 383 | 
             
                        </AseUidSameExtent>
         | 
| @@ -28,7 +28,7 @@ describe AIXM::Feature::NavigationalAid::DesignatedPoint do | |
| 28 28 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 29 29 | 
             
                    <!-- NavigationalAid: [DesignatedPoint:ICAO] DESIGNATED POINT NAVAID -->
         | 
| 30 30 | 
             
                    <Dpn source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 31 | 
            -
                      <DpnUid | 
| 31 | 
            +
                      <DpnUid>
         | 
| 32 32 | 
             
                        <codeId>DDD</codeId>
         | 
| 33 33 | 
             
                        <geoLat>47.85916667N</geoLat>
         | 
| 34 34 | 
             
                        <geoLong>007.56000000E</geoLong>
         | 
| @@ -47,7 +47,7 @@ describe AIXM::Feature::NavigationalAid::DesignatedPoint do | |
| 47 47 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 48 48 | 
             
                    <!-- NavigationalAid: [DesignatedPoint:ICAO] UNNAMED -->
         | 
| 49 49 | 
             
                    <Dpn source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 50 | 
            -
                      <DpnUid | 
| 50 | 
            +
                      <DpnUid>
         | 
| 51 51 | 
             
                        <codeId>DDD</codeId>
         | 
| 52 52 | 
             
                        <geoLat>47.85916667N</geoLat>
         | 
| 53 53 | 
             
                        <geoLong>007.56000000E</geoLong>
         | 
| @@ -11,11 +11,24 @@ describe AIXM::Feature::NavigationalAid::DME do | |
| 11 11 |  | 
| 12 12 | 
             
              describe :channel= do
         | 
| 13 13 | 
             
                it "fails on invalid values" do
         | 
| 14 | 
            -
                  [nil, :foobar, 123].wont_be_written_to subject, :channel
         | 
| 14 | 
            +
                  [nil, :foobar, 123, '0X', '127Y', '12Z'].wont_be_written_to subject, :channel
         | 
| 15 15 | 
             
                end
         | 
| 16 | 
            +
              end
         | 
| 16 17 |  | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 18 | 
            +
              describe :ghost_f do
         | 
| 19 | 
            +
                it "must be derived from the channel" do
         | 
| 20 | 
            +
                  subject.tap { |s| s.channel = '1X' }.ghost_f.freq.must_equal 134.4
         | 
| 21 | 
            +
                  subject.tap { |s| s.channel = '12Y' }.ghost_f.freq.must_equal 135.55
         | 
| 22 | 
            +
                  subject.tap { |s| s.channel = '16Y' }.ghost_f.freq.must_equal 135.95
         | 
| 23 | 
            +
                  subject.tap { |s| s.channel = '17X' }.ghost_f.freq.must_equal 108
         | 
| 24 | 
            +
                  subject.tap { |s| s.channel = '30X' }.ghost_f.freq.must_equal 109.3
         | 
| 25 | 
            +
                  subject.tap { |s| s.channel = '59Y' }.ghost_f.freq.must_equal 112.25
         | 
| 26 | 
            +
                  subject.tap { |s| s.channel = '60X' }.ghost_f.freq.must_equal 133.3
         | 
| 27 | 
            +
                  subject.tap { |s| s.channel = '64Y' }.ghost_f.freq.must_equal 133.75
         | 
| 28 | 
            +
                  subject.tap { |s| s.channel = '69Y' }.ghost_f.freq.must_equal 134.25
         | 
| 29 | 
            +
                  subject.tap { |s| s.channel = '70X' }.ghost_f.freq.must_equal 112.30
         | 
| 30 | 
            +
                  subject.tap { |s| s.channel = '100X' }.ghost_f.freq.must_equal 115.3
         | 
| 31 | 
            +
                  subject.tap { |s| s.channel = '126Y' }.ghost_f.freq.must_equal 117.95
         | 
| 19 32 | 
             
                end
         | 
| 20 33 | 
             
              end
         | 
| 21 34 |  | 
| @@ -31,16 +44,18 @@ describe AIXM::Feature::NavigationalAid::DME do | |
| 31 44 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 32 45 | 
             
                    <!-- NavigationalAid: [DME] DME NAVAID -->
         | 
| 33 46 | 
             
                    <Dme source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 34 | 
            -
                      <DmeUid | 
| 47 | 
            +
                      <DmeUid>
         | 
| 35 48 | 
             
                        <codeId>MMM</codeId>
         | 
| 36 49 | 
             
                        <geoLat>47.85916667N</geoLat>
         | 
| 37 50 | 
             
                        <geoLong>007.56000000E</geoLong>
         | 
| 38 51 | 
             
                      </DmeUid>
         | 
| 39 | 
            -
                      <OrgUid | 
| 52 | 
            +
                      <OrgUid>
         | 
| 40 53 | 
             
                        <txtName>FRANCE</txtName>
         | 
| 41 54 | 
             
                      </OrgUid>
         | 
| 42 55 | 
             
                      <txtName>DME NAVAID</txtName>
         | 
| 43 56 | 
             
                      <codeChannel>95X</codeChannel>
         | 
| 57 | 
            +
                      <valGhostFreq>114.8</valGhostFreq>
         | 
| 58 | 
            +
                      <uomGhostFreq>MHZ</uomGhostFreq>
         | 
| 44 59 | 
             
                      <codeDatum>WGE</codeDatum>
         | 
| 45 60 | 
             
                      <valElev>500</valElev>
         | 
| 46 61 | 
             
                      <uomDistVer>FT</uomDistVer>
         | 
| @@ -58,15 +73,17 @@ describe AIXM::Feature::NavigationalAid::DME do | |
| 58 73 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 59 74 | 
             
                    <!-- NavigationalAid: [DME] UNNAMED -->
         | 
| 60 75 | 
             
                    <Dme source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 61 | 
            -
                      <DmeUid | 
| 76 | 
            +
                      <DmeUid>
         | 
| 62 77 | 
             
                        <codeId>MMM</codeId>
         | 
| 63 78 | 
             
                        <geoLat>47.85916667N</geoLat>
         | 
| 64 79 | 
             
                        <geoLong>007.56000000E</geoLong>
         | 
| 65 80 | 
             
                      </DmeUid>
         | 
| 66 | 
            -
                      <OrgUid | 
| 81 | 
            +
                      <OrgUid>
         | 
| 67 82 | 
             
                        <txtName>FRANCE</txtName>
         | 
| 68 83 | 
             
                      </OrgUid>
         | 
| 69 84 | 
             
                      <codeChannel>95X</codeChannel>
         | 
| 85 | 
            +
                      <valGhostFreq>114.8</valGhostFreq>
         | 
| 86 | 
            +
                      <uomGhostFreq>MHZ</uomGhostFreq>
         | 
| 70 87 | 
             
                      <codeDatum>WGE</codeDatum>
         | 
| 71 88 | 
             
                    </Dme>
         | 
| 72 89 | 
             
                  END
         | 
| @@ -32,12 +32,12 @@ describe AIXM::Feature::NavigationalAid::Marker do | |
| 32 32 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 33 33 | 
             
                    <!-- NavigationalAid: [Marker:O] MARKER NAVAID -->
         | 
| 34 34 | 
             
                    <Mkr source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 35 | 
            -
                      <MkrUid | 
| 35 | 
            +
                      <MkrUid>
         | 
| 36 36 | 
             
                        <codeId>---</codeId>
         | 
| 37 37 | 
             
                        <geoLat>47.85916667N</geoLat>
         | 
| 38 38 | 
             
                        <geoLong>007.56000000E</geoLong>
         | 
| 39 39 | 
             
                      </MkrUid>
         | 
| 40 | 
            -
                      <OrgUid | 
| 40 | 
            +
                      <OrgUid>
         | 
| 41 41 | 
             
                        <txtName>FRANCE</txtName>
         | 
| 42 42 | 
             
                      </OrgUid>
         | 
| 43 43 | 
             
                      <codePsnIls>O</codePsnIls>
         | 
| @@ -61,12 +61,12 @@ describe AIXM::Feature::NavigationalAid::Marker do | |
| 61 61 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 62 62 | 
             
                    <!-- NavigationalAid: [Marker] UNNAMED -->
         | 
| 63 63 | 
             
                    <Mkr source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 64 | 
            -
                      <MkrUid | 
| 64 | 
            +
                      <MkrUid>
         | 
| 65 65 | 
             
                        <codeId>---</codeId>
         | 
| 66 66 | 
             
                        <geoLat>47.85916667N</geoLat>
         | 
| 67 67 | 
             
                        <geoLong>007.56000000E</geoLong>
         | 
| 68 68 | 
             
                      </MkrUid>
         | 
| 69 | 
            -
                      <OrgUid | 
| 69 | 
            +
                      <OrgUid>
         | 
| 70 70 | 
             
                        <txtName>FRANCE</txtName>
         | 
| 71 71 | 
             
                      </OrgUid>
         | 
| 72 72 | 
             
                      <valFreq>75</valFreq>
         | 
| @@ -42,12 +42,12 @@ describe AIXM::Feature::NavigationalAid::NDB do | |
| 42 42 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 43 43 | 
             
                    <!-- NavigationalAid: [NDB:B] NDB NAVAID -->
         | 
| 44 44 | 
             
                    <Ndb source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 45 | 
            -
                      <NdbUid | 
| 45 | 
            +
                      <NdbUid>
         | 
| 46 46 | 
             
                        <codeId>NNN</codeId>
         | 
| 47 47 | 
             
                        <geoLat>47.85916667N</geoLat>
         | 
| 48 48 | 
             
                        <geoLong>007.56000000E</geoLong>
         | 
| 49 49 | 
             
                      </NdbUid>
         | 
| 50 | 
            -
                      <OrgUid | 
| 50 | 
            +
                      <OrgUid>
         | 
| 51 51 | 
             
                        <txtName>FRANCE</txtName>
         | 
| 52 52 | 
             
                      </OrgUid>
         | 
| 53 53 | 
             
                      <txtName>NDB NAVAID</txtName>
         | 
| @@ -71,12 +71,12 @@ describe AIXM::Feature::NavigationalAid::NDB do | |
| 71 71 | 
             
                  subject.to_xml.must_equal <<~END
         | 
| 72 72 | 
             
                    <!-- NavigationalAid: [NDB] UNNAMED -->
         | 
| 73 73 | 
             
                    <Ndb source="LF|GEN|0.0 FACTORY|0|0">
         | 
| 74 | 
            -
                      <NdbUid | 
| 74 | 
            +
                      <NdbUid>
         | 
| 75 75 | 
             
                        <codeId>NNN</codeId>
         | 
| 76 76 | 
             
                        <geoLat>47.85916667N</geoLat>
         | 
| 77 77 | 
             
                        <geoLong>007.56000000E</geoLong>
         | 
| 78 78 | 
             
                      </NdbUid>
         | 
| 79 | 
            -
                      <OrgUid | 
| 79 | 
            +
                      <OrgUid>
         | 
| 80 80 | 
             
                        <txtName>FRANCE</txtName>
         | 
| 81 81 | 
             
                      </OrgUid>
         | 
| 82 82 | 
             
                      <valFreq>555</valFreq>
         |