aixm 0.3.3 → 0.3.4
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/.travis.yml +1 -2
 - data/CHANGELOG.md +20 -0
 - data/README.md +7 -2
 - data/aixm.gemspec +2 -3
 - data/lib/aixm.rb +6 -2
 - data/lib/aixm/a.rb +151 -0
 - data/lib/aixm/component/frequency.rb +2 -2
 - data/lib/aixm/component/geometry.rb +4 -0
 - data/lib/aixm/component/geometry/point.rb +0 -4
 - data/lib/aixm/component/helipad.rb +8 -22
 - data/lib/aixm/component/runway.rb +36 -36
 - data/lib/aixm/component/surface.rb +121 -0
 - data/lib/aixm/component/timetable.rb +1 -0
 - data/lib/aixm/constants.rb +40 -0
 - data/lib/aixm/d.rb +5 -0
 - data/lib/aixm/document.rb +2 -2
 - data/lib/aixm/f.rb +6 -0
 - data/lib/aixm/feature/address.rb +100 -0
 - data/lib/aixm/feature/airport.rb +26 -7
 - data/lib/aixm/feature/airspace.rb +10 -1
 - data/lib/aixm/feature/navigational_aid.rb +1 -1
 - data/lib/aixm/feature/navigational_aid/designated_point.rb +20 -5
 - data/lib/aixm/feature/navigational_aid/dme.rb +2 -2
 - data/lib/aixm/{component → feature}/service.rb +67 -16
 - data/lib/aixm/feature/unit.rb +40 -6
 - data/lib/aixm/refinements.rb +63 -6
 - data/lib/aixm/shortcuts.rb +12 -4
 - data/lib/aixm/version.rb +1 -1
 - data/lib/aixm/xy.rb +6 -1
 - data/lib/aixm/z.rb +6 -0
 - data/schemas/ofmx/0/OFMX-DataTypes.xsd +5 -2
 - data/schemas/ofmx/0/OFMX-Features.xsd +2 -0
 - data/spec/factory.rb +32 -10
 - data/spec/lib/aixm/a_spec.rb +203 -0
 - data/spec/lib/aixm/component/helipad_spec.rb +11 -17
 - data/spec/lib/aixm/component/runway_spec.rb +46 -32
 - data/spec/lib/aixm/component/surface_spec.rb +88 -0
 - data/spec/lib/aixm/d_spec.rb +10 -0
 - data/spec/lib/aixm/document_spec.rb +104 -32
 - data/spec/lib/aixm/f_spec.rb +10 -0
 - data/spec/lib/aixm/feature/address_spec.rb +55 -0
 - data/spec/lib/aixm/feature/airport_spec.rb +73 -3
 - data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +43 -6
 - data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +2 -2
 - data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +2 -2
 - data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +2 -2
 - data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +2 -2
 - data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +6 -6
 - data/spec/lib/aixm/{component → feature}/service_spec.rb +12 -14
 - data/spec/lib/aixm/feature/unit_spec.rb +7 -4
 - data/spec/lib/aixm/refinements_spec.rb +100 -15
 - data/spec/lib/aixm/z_spec.rb +10 -0
 - metadata +17 -25
 - data/lib/aixm/h.rb +0 -87
 - data/spec/lib/aixm/h_spec.rb +0 -113
 
| 
         @@ -71,6 +71,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
     | 
|
| 
       71 
71 
     | 
    
         
             
                    </xsd:annotation>
         
     | 
| 
       72 
72 
     | 
    
         
             
                  </xsd:element>
         
     | 
| 
       73 
73 
     | 
    
         
             
                </xsd:sequence>
         
     | 
| 
      
 74 
     | 
    
         
            +
                <xsd:attribute ref="source"/>
         
     | 
| 
       74 
75 
     | 
    
         
             
              </xsd:complexType>
         
     | 
| 
       75 
76 
     | 
    
         
             
              <xsd:complexType name="AerodromeHeliportAddressUidType">
         
     | 
| 
       76 
77 
     | 
    
         
             
                <xsd:annotation>
         
     | 
| 
         @@ -4083,6 +4084,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
     | 
|
| 
       4083 
4084 
     | 
    
         
             
                    </xsd:annotation>
         
     | 
| 
       4084 
4085 
     | 
    
         
             
                  </xsd:element>
         
     | 
| 
       4085 
4086 
     | 
    
         
             
                </xsd:sequence>
         
     | 
| 
      
 4087 
     | 
    
         
            +
                <xsd:attribute ref="source"/>
         
     | 
| 
       4086 
4088 
     | 
    
         
             
              </xsd:complexType>
         
     | 
| 
       4087 
4089 
     | 
    
         
             
              <xsd:complexType name="IlsUidType">
         
     | 
| 
       4088 
4090 
     | 
    
         
             
                <xsd:annotation>
         
     | 
    
        data/spec/factory.rb
    CHANGED
    
    | 
         @@ -20,12 +20,22 @@ module AIXM 
     | 
|
| 
       20 
20 
     | 
    
         
             
                    AIXM.f(123.35, :mhz)
         
     | 
| 
       21 
21 
     | 
    
         
             
                  end
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                  def  
     | 
| 
       24 
     | 
    
         
            -
                    AIXM. 
     | 
| 
      
 23 
     | 
    
         
            +
                  def a
         
     | 
| 
      
 24 
     | 
    
         
            +
                    AIXM.a('34L')
         
     | 
| 
       25 
25 
     | 
    
         
             
                  end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                  # Components
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
                  def address
         
     | 
| 
      
 30 
     | 
    
         
            +
                    AIXM.address(
         
     | 
| 
      
 31 
     | 
    
         
            +
                      source: 'LF|GEN|0.0 FACTORY|0|0',
         
     | 
| 
      
 32 
     | 
    
         
            +
                      type: :radio_frequency,
         
     | 
| 
      
 33 
     | 
    
         
            +
                      address: "123.35"
         
     | 
| 
      
 34 
     | 
    
         
            +
                    ).tap do |address|
         
     | 
| 
      
 35 
     | 
    
         
            +
                      address.remarks = "A/A (callsign PUJAUT)"
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
       29 
39 
     | 
    
         
             
                  def timetable
         
     | 
| 
       30 
40 
     | 
    
         
             
                    AIXM.timetable(
         
     | 
| 
       31 
41 
     | 
    
         
             
                      code: :sunrise_to_sunset
         
     | 
| 
         @@ -119,8 +129,9 @@ module AIXM 
     | 
|
| 
       119 
129 
     | 
    
         
             
                      name: 'DESIGNATED POINT NAVAID',
         
     | 
| 
       120 
130 
     | 
    
         
             
                      xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
         
     | 
| 
       121 
131 
     | 
    
         
             
                      z: AIXM.z(500, :qnh),
         
     | 
| 
       122 
     | 
    
         
            -
                      type: : 
     | 
| 
      
 132 
     | 
    
         
            +
                      type: :vfr_reporting_point
         
     | 
| 
       123 
133 
     | 
    
         
             
                    ).tap do |designated_point|
         
     | 
| 
      
 134 
     | 
    
         
            +
                      designated_point.airport = airport
         
     | 
| 
       124 
135 
     | 
    
         
             
                      designated_point.timetable = AIXM::H24
         
     | 
| 
       125 
136 
     | 
    
         
             
                      designated_point.remarks = 'designated point navaid'
         
     | 
| 
       126 
137 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -264,14 +275,14 @@ module AIXM 
     | 
|
| 
       264 
275 
     | 
    
         
             
                      class: :icao
         
     | 
| 
       265 
276 
     | 
    
         
             
                    ).tap do |unit|
         
     | 
| 
       266 
277 
     | 
    
         
             
                      unit.airport = airport
         
     | 
| 
       267 
     | 
    
         
            -
                      unit.remarks = ' 
     | 
| 
      
 278 
     | 
    
         
            +
                      unit.remarks = 'FR only'
         
     | 
| 
       268 
279 
     | 
    
         
             
                      unit.add_service(service)
         
     | 
| 
       269 
280 
     | 
    
         
             
                    end
         
     | 
| 
       270 
281 
     | 
    
         
             
                  end
         
     | 
| 
       271 
282 
     | 
    
         | 
| 
       272 
283 
     | 
    
         
             
                  def service
         
     | 
| 
       273 
284 
     | 
    
         
             
                    AIXM.service(
         
     | 
| 
       274 
     | 
    
         
            -
                       
     | 
| 
      
 285 
     | 
    
         
            +
                      source: 'LF|GEN|0.0 FACTORY|0|0',
         
     | 
| 
       275 
286 
     | 
    
         
             
                      type: :approach_control_service
         
     | 
| 
       276 
287 
     | 
    
         
             
                    ).tap do |service|
         
     | 
| 
       277 
288 
     | 
    
         
             
                      service.timetable = AIXM::H24
         
     | 
| 
         @@ -316,6 +327,7 @@ module AIXM 
     | 
|
| 
       316 
327 
     | 
    
         
             
                        reservation_required.timetable = AIXM::H24
         
     | 
| 
       317 
328 
     | 
    
         
             
                        reservation_required.remarks = "reservation remarks"
         
     | 
| 
       318 
329 
     | 
    
         
             
                      end
         
     | 
| 
      
 330 
     | 
    
         
            +
                      airport.add_address(address)
         
     | 
| 
       319 
331 
     | 
    
         
             
                    end
         
     | 
| 
       320 
332 
     | 
    
         
             
                  end
         
     | 
| 
       321 
333 
     | 
    
         | 
| 
         @@ -323,18 +335,24 @@ module AIXM 
     | 
|
| 
       323 
335 
     | 
    
         
             
                    AIXM.runway(name: '16L/34R').tap do |runway|
         
     | 
| 
       324 
336 
     | 
    
         
             
                      runway.length = AIXM.d(650, :m)
         
     | 
| 
       325 
337 
     | 
    
         
             
                      runway.width = AIXM.d(80, :m)
         
     | 
| 
       326 
     | 
    
         
            -
                      runway.composition = : 
     | 
| 
      
 338 
     | 
    
         
            +
                      runway.surface.composition = :asphalt
         
     | 
| 
      
 339 
     | 
    
         
            +
                      runway.surface.preparation = :paved
         
     | 
| 
      
 340 
     | 
    
         
            +
                      runway.surface.condition = :good
         
     | 
| 
      
 341 
     | 
    
         
            +
                      runway.surface.pcn = "59/F/A/W/T"
         
     | 
| 
      
 342 
     | 
    
         
            +
                      runway.surface.remarks = "Paved shoulder on 2.5m on each side of the RWY."
         
     | 
| 
       327 
343 
     | 
    
         
             
                      runway.status = :closed
         
     | 
| 
       328 
344 
     | 
    
         
             
                      runway.remarks = "Markings eroded"
         
     | 
| 
       329 
345 
     | 
    
         
             
                      runway.forth.xy = AIXM.xy(lat: %q(44°00'07.63"N), long: %q(004°45'07.81"E))
         
     | 
| 
       330 
346 
     | 
    
         
             
                      runway.forth.z = AIXM.z(145, :qnh)
         
     | 
| 
       331 
347 
     | 
    
         
             
                      runway.forth.displaced_threshold = AIXM.xy(lat: %q(44°00'03.54"N), long: %q(004°45'09.30"E))
         
     | 
| 
       332 
     | 
    
         
            -
                      runway.forth.geographic_orientation = 165
         
     | 
| 
      
 348 
     | 
    
         
            +
                      runway.forth.geographic_orientation = AIXM.a(165)
         
     | 
| 
      
 349 
     | 
    
         
            +
                      runway.forth.vfr_pattern = :left_or_right
         
     | 
| 
       333 
350 
     | 
    
         
             
                      runway.forth.remarks = "forth remarks"
         
     | 
| 
       334 
351 
     | 
    
         
             
                      runway.back.xy = AIXM.xy(lat: %q(43°59'25.31"N), long: %q(004°45'23.24"E))
         
     | 
| 
       335 
     | 
    
         
            -
                      runway. 
     | 
| 
      
 352 
     | 
    
         
            +
                      runway.back.z = AIXM.z(147, :qnh)
         
     | 
| 
       336 
353 
     | 
    
         
             
                      runway.back.displaced_threshold = AIXM.xy(lat: %q(43°59'31.84"N), long: %q(004°45'20.85"E))
         
     | 
| 
       337 
     | 
    
         
            -
                      runway.back.geographic_orientation = 345
         
     | 
| 
      
 354 
     | 
    
         
            +
                      runway.back.geographic_orientation = AIXM.a(345)
         
     | 
| 
      
 355 
     | 
    
         
            +
                      runway.back.vfr_pattern = :left
         
     | 
| 
       338 
356 
     | 
    
         
             
                      runway.back.remarks = "back remarks"
         
     | 
| 
       339 
357 
     | 
    
         
             
                    end
         
     | 
| 
       340 
358 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -345,7 +363,11 @@ module AIXM 
     | 
|
| 
       345 
363 
     | 
    
         
             
                      helipad.z = AIXM.z(141, :qnh)
         
     | 
| 
       346 
364 
     | 
    
         
             
                      helipad.length = AIXM.d(20, :m)
         
     | 
| 
       347 
365 
     | 
    
         
             
                      helipad.width = AIXM.d(20, :m)
         
     | 
| 
       348 
     | 
    
         
            -
                      helipad.composition = : 
     | 
| 
      
 366 
     | 
    
         
            +
                      helipad.surface.composition = :concrete
         
     | 
| 
      
 367 
     | 
    
         
            +
                      helipad.surface.preparation = :paved
         
     | 
| 
      
 368 
     | 
    
         
            +
                      helipad.surface.condition = :fair
         
     | 
| 
      
 369 
     | 
    
         
            +
                      helipad.surface.pcn = "30/F/A/W/U"
         
     | 
| 
      
 370 
     | 
    
         
            +
                      helipad.surface.remarks = "Cracks near the center."
         
     | 
| 
       349 
371 
     | 
    
         
             
                      helipad.status = :other
         
     | 
| 
       350 
372 
     | 
    
         
             
                      helipad.remarks = "Authorizaton by AD operator required"
         
     | 
| 
       351 
373 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -0,0 +1,203 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative '../../spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe AIXM::A do
         
     | 
| 
      
 4 
     | 
    
         
            +
              let :subject_2 do
         
     | 
| 
      
 5 
     | 
    
         
            +
                AIXM.a('0')
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              let :subject_3 do
         
     | 
| 
      
 9 
     | 
    
         
            +
                AIXM.a(0)
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              describe :initialize do
         
     | 
| 
      
 13 
     | 
    
         
            +
                it "fails on invalid values" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                  -> { AIXM.a('foobar') }.must_raise ArgumentError
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                it "parses String as angle with precision=2" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  AIXM.a('34L').tap do |h|
         
     | 
| 
      
 19 
     | 
    
         
            +
                    h.deg.must_equal 340
         
     | 
| 
      
 20 
     | 
    
         
            +
                    h.precision.must_equal 2
         
     | 
| 
      
 21 
     | 
    
         
            +
                    h.suffix.must_equal :L
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                it "parses Numeric as angle with precision=3" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  AIXM.a(12).tap do |h|
         
     | 
| 
      
 27 
     | 
    
         
            +
                    h.deg.must_equal 12
         
     | 
| 
      
 28 
     | 
    
         
            +
                    h.precision.must_equal 3
         
     | 
| 
      
 29 
     | 
    
         
            +
                    h.suffix.must_be :nil?
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              describe :to_s do
         
     | 
| 
      
 35 
     | 
    
         
            +
                context "precision=2" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                  it "rounds and zero-pad deg to length 2 and concats suffix" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                    AIXM.a('05').to_s.must_equal '05'
         
     | 
| 
      
 38 
     | 
    
         
            +
                    AIXM.a('05').tap { |a| a.suffix = :L }.to_s.must_equal '05L'
         
     | 
| 
      
 39 
     | 
    
         
            +
                    AIXM.a('05').tap { |a| a.deg = 0 }.to_s.must_equal '36'
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                context "precition=3" do
         
     | 
| 
      
 44 
     | 
    
         
            +
                  it "rounds and zero-pad deg to length 3" do
         
     | 
| 
      
 45 
     | 
    
         
            +
                    AIXM.a(5).to_s.must_equal '005'
         
     | 
| 
      
 46 
     | 
    
         
            +
                    AIXM.a(5).tap { |a| a.deg = 0 }.to_s.must_equal '000'
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              describe :deg= do
         
     | 
| 
      
 52 
     | 
    
         
            +
                it "fails on invalid values" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  [:foobar, '1', -1, 361].wont_be_written_to subject_2, :deg
         
     | 
| 
      
 54 
     | 
    
         
            +
                  [:foobar, '1', -1, 361].wont_be_written_to subject_3, :deg
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                context "precision=2" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  it "rounds to 10 degree steps" do
         
     | 
| 
      
 59 
     | 
    
         
            +
                    subject_2.tap { |s| s.deg = 0 }.deg.must_equal 0
         
     | 
| 
      
 60 
     | 
    
         
            +
                    subject_2.tap { |s| s.deg = 5 }.deg.must_equal 10
         
     | 
| 
      
 61 
     | 
    
         
            +
                    subject_2.tap { |s| s.deg = 154 }.deg.must_equal 150
         
     | 
| 
      
 62 
     | 
    
         
            +
                    subject_2.tap { |s| s.deg = 359 }.deg.must_equal 0
         
     | 
| 
      
 63 
     | 
    
         
            +
                    subject_2.tap { |s| s.deg = 360 }.deg.must_equal 0
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                context "precision=3" do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  it "accepts 1 degree steps" do
         
     | 
| 
      
 69 
     | 
    
         
            +
                    subject_3.tap { |s| s.deg = 0 }.deg.must_equal 0
         
     | 
| 
      
 70 
     | 
    
         
            +
                    subject_3.tap { |s| s.deg = 5 }.deg.must_equal 5
         
     | 
| 
      
 71 
     | 
    
         
            +
                    subject_3.tap { |s| s.deg = 154 }.deg.must_equal 154
         
     | 
| 
      
 72 
     | 
    
         
            +
                    subject_3.tap { |s| s.deg = 359 }.deg.must_equal 359
         
     | 
| 
      
 73 
     | 
    
         
            +
                    subject_3.tap { |s| s.deg = 360 }.deg.must_equal 0
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              describe :suffix= do
         
     | 
| 
      
 79 
     | 
    
         
            +
                context "precision=2" do
         
     | 
| 
      
 80 
     | 
    
         
            +
                  it "fails on invalid values" do
         
     | 
| 
      
 81 
     | 
    
         
            +
                    [123, 'r'].wont_be_written_to subject_2, :suffix
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  it "accepts nil value" do
         
     | 
| 
      
 85 
     | 
    
         
            +
                    [nil].must_be_written_to subject_2, :suffix
         
     | 
| 
      
 86 
     | 
    
         
            +
                  end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                  it "symbolizes valid values" do
         
     | 
| 
      
 89 
     | 
    
         
            +
                    subject_2.tap { |s| s.suffix = 'Z' }.suffix.must_equal :Z
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                context "precision=3" do
         
     | 
| 
      
 94 
     | 
    
         
            +
                  it "always fails" do
         
     | 
| 
      
 95 
     | 
    
         
            +
                    -> { subject_3.tap { |s| s.suffix = 'Z' } }.must_raise RuntimeError
         
     | 
| 
      
 96 
     | 
    
         
            +
                  end
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
              end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
              describe :invert do
         
     | 
| 
      
 101 
     | 
    
         
            +
                it "must calculate inverse deg correctly" do
         
     | 
| 
      
 102 
     | 
    
         
            +
                  { 0 => 180, 90 => 270, 179 => 359, 180 => 0, 270 => 90, 359 => 179, 360 => 180 }.each do |from, to|
         
     | 
| 
      
 103 
     | 
    
         
            +
                    AIXM.a(from).invert.deg.must_equal to
         
     | 
| 
      
 104 
     | 
    
         
            +
                  end
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                it "must invert left/right suffix" do
         
     | 
| 
      
 108 
     | 
    
         
            +
                  AIXM.a('34L').invert.suffix.must_equal :R
         
     | 
| 
      
 109 
     | 
    
         
            +
                end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                it "must leave other suffixes untouched" do
         
     | 
| 
      
 112 
     | 
    
         
            +
                  AIXM.a('35X').invert.suffix.must_equal :X
         
     | 
| 
      
 113 
     | 
    
         
            +
                end
         
     | 
| 
      
 114 
     | 
    
         
            +
              end
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
              describe :inverse_of? do
         
     | 
| 
      
 117 
     | 
    
         
            +
                it "must return true for inverse pairs" do
         
     | 
| 
      
 118 
     | 
    
         
            +
                  AIXM.a('34L').inverse_of?(AIXM.a('16R')).must_equal true
         
     | 
| 
      
 119 
     | 
    
         
            +
                end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                it "must return false for non-inverse pairs" do
         
     | 
| 
      
 122 
     | 
    
         
            +
                  AIXM.a('34L').inverse_of?(AIXM.a('12L')).must_equal false
         
     | 
| 
      
 123 
     | 
    
         
            +
                end
         
     | 
| 
      
 124 
     | 
    
         
            +
              end
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
              describe :+ do
         
     | 
| 
      
 127 
     | 
    
         
            +
                context "precision=2" do
         
     | 
| 
      
 128 
     | 
    
         
            +
                  it "adds degrees as Integer" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                    (subject_2 + 14).must_equal AIXM.a('01')
         
     | 
| 
      
 130 
     | 
    
         
            +
                    (subject_2 + 16).must_equal AIXM.a('02')
         
     | 
| 
      
 131 
     | 
    
         
            +
                    (subject_2 + 370).must_equal AIXM.a('01')
         
     | 
| 
      
 132 
     | 
    
         
            +
                    (AIXM.a('05L') + 20).must_equal AIXM.a('07L')
         
     | 
| 
      
 133 
     | 
    
         
            +
                  end
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                  it "adds another angle" do
         
     | 
| 
      
 136 
     | 
    
         
            +
                    (AIXM.a('10') + AIXM.a('08')).must_equal AIXM.a('18')
         
     | 
| 
      
 137 
     | 
    
         
            +
                  end
         
     | 
| 
      
 138 
     | 
    
         
            +
                end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                context "precision=3" do
         
     | 
| 
      
 141 
     | 
    
         
            +
                  it "adds degrees as Integer" do
         
     | 
| 
      
 142 
     | 
    
         
            +
                    (subject_3 + 15).must_equal AIXM.a(15)
         
     | 
| 
      
 143 
     | 
    
         
            +
                    (subject_3 + 370).must_equal AIXM.a(10)
         
     | 
| 
      
 144 
     | 
    
         
            +
                  end
         
     | 
| 
      
 145 
     | 
    
         
            +
                end
         
     | 
| 
      
 146 
     | 
    
         
            +
              end
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
              describe :- do
         
     | 
| 
      
 149 
     | 
    
         
            +
                context "precision=2" do
         
     | 
| 
      
 150 
     | 
    
         
            +
                  it "subtracts degrees as Integer" do
         
     | 
| 
      
 151 
     | 
    
         
            +
                    (subject_2 - 14).must_equal AIXM.a('35')
         
     | 
| 
      
 152 
     | 
    
         
            +
                    (subject_2 - 16).must_equal AIXM.a('34')
         
     | 
| 
      
 153 
     | 
    
         
            +
                    (AIXM.a('05') - 20).must_equal AIXM.a('03')
         
     | 
| 
      
 154 
     | 
    
         
            +
                    (AIXM.a('05L') - 20).must_equal AIXM.a('03L')
         
     | 
| 
      
 155 
     | 
    
         
            +
                  end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                  it "subtracts another angle" do
         
     | 
| 
      
 158 
     | 
    
         
            +
                    (AIXM.a('10') - AIXM.a('08')).must_equal AIXM.a('02')
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
                end
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                context "precision=3" do
         
     | 
| 
      
 163 
     | 
    
         
            +
                  it "subtracts degrees as Integer" do
         
     | 
| 
      
 164 
     | 
    
         
            +
                    (subject_3 - 15).must_equal AIXM.a(345)
         
     | 
| 
      
 165 
     | 
    
         
            +
                    (AIXM.a(55) - 20).must_equal AIXM.a(35)
         
     | 
| 
      
 166 
     | 
    
         
            +
                  end
         
     | 
| 
      
 167 
     | 
    
         
            +
                end
         
     | 
| 
      
 168 
     | 
    
         
            +
              end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
              describe :== do
         
     | 
| 
      
 171 
     | 
    
         
            +
                it "recognizes angles with identical deg and suffix as equal" do
         
     | 
| 
      
 172 
     | 
    
         
            +
                  AIXM.a('34L').must_equal AIXM.a('34L')
         
     | 
| 
      
 173 
     | 
    
         
            +
                end
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
                it "recognizes angles with different deg or suffix as unequal" do
         
     | 
| 
      
 176 
     | 
    
         
            +
                  AIXM.a('34L').wont_equal AIXM.a('35L')
         
     | 
| 
      
 177 
     | 
    
         
            +
                  AIXM.a('34L').wont_equal AIXM.a('34R')
         
     | 
| 
      
 178 
     | 
    
         
            +
                end
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                it "recognizes angles with different precision as unequal" do
         
     | 
| 
      
 181 
     | 
    
         
            +
                  AIXM.a('34').wont_equal AIXM.a(340)
         
     | 
| 
      
 182 
     | 
    
         
            +
                end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                it "recognizes objects of different class as unequal" do
         
     | 
| 
      
 185 
     | 
    
         
            +
                  subject_2.wont_equal :oggy
         
     | 
| 
      
 186 
     | 
    
         
            +
                end
         
     | 
| 
      
 187 
     | 
    
         
            +
              end
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
              describe :hash do
         
     | 
| 
      
 190 
     | 
    
         
            +
                it "returns an integer" do
         
     | 
| 
      
 191 
     | 
    
         
            +
                  subject_2.hash.must_be_instance_of Integer
         
     | 
| 
      
 192 
     | 
    
         
            +
                end
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                it "returns different hashes for different precisions" do
         
     | 
| 
      
 195 
     | 
    
         
            +
                  subject_2.hash.wont_equal subject_3.hash
         
     | 
| 
      
 196 
     | 
    
         
            +
                end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
                it "allows for the use of instances as hash keys" do
         
     | 
| 
      
 199 
     | 
    
         
            +
                  dupe = subject_2.dup
         
     | 
| 
      
 200 
     | 
    
         
            +
                  { subject_2 => true }[dupe].must_equal true
         
     | 
| 
      
 201 
     | 
    
         
            +
                end
         
     | 
| 
      
 202 
     | 
    
         
            +
              end
         
     | 
| 
      
 203 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -47,21 +47,6 @@ describe AIXM::Component::Helipad do 
     | 
|
| 
       47 
47 
     | 
    
         
             
                end
         
     | 
| 
       48 
48 
     | 
    
         
             
              end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
              describe :composition= do
         
     | 
| 
       51 
     | 
    
         
            -
                it "fails on invalid values" do
         
     | 
| 
       52 
     | 
    
         
            -
                  [:foobar, 123].wont_be_written_to subject, :composition
         
     | 
| 
       53 
     | 
    
         
            -
                end
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                it "accepts nil value" do
         
     | 
| 
       56 
     | 
    
         
            -
                  [nil].must_be_written_to subject, :composition
         
     | 
| 
       57 
     | 
    
         
            -
                end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                it "looks up valid values" do
         
     | 
| 
       60 
     | 
    
         
            -
                  subject.tap { |s| s.composition = :macadam }.composition.must_equal :macadam
         
     | 
| 
       61 
     | 
    
         
            -
                  subject.tap { |s| s.composition = :GRADE }.composition.must_equal :graded_earth
         
     | 
| 
       62 
     | 
    
         
            -
                end
         
     | 
| 
       63 
     | 
    
         
            -
              end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
50 
     | 
    
         
             
              describe :status= do
         
     | 
| 
       66 
51 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       67 
52 
     | 
    
         
             
                  [:foobar, 123].wont_be_written_to subject, :status
         
     | 
| 
         @@ -100,7 +85,15 @@ describe AIXM::Component::Helipad do 
     | 
|
| 
       100 
85 
     | 
    
         
             
                      <valLen>20</valLen>
         
     | 
| 
       101 
86 
     | 
    
         
             
                      <valWid>20</valWid>
         
     | 
| 
       102 
87 
     | 
    
         
             
                      <uomDim>M</uomDim>
         
     | 
| 
       103 
     | 
    
         
            -
                      <codeComposition> 
     | 
| 
      
 88 
     | 
    
         
            +
                      <codeComposition>CONC</codeComposition>
         
     | 
| 
      
 89 
     | 
    
         
            +
                      <codePreparation>PAVED</codePreparation>
         
     | 
| 
      
 90 
     | 
    
         
            +
                      <codeCondSfc>FAIR</codeCondSfc>
         
     | 
| 
      
 91 
     | 
    
         
            +
                      <valPcnClass>30</valPcnClass>
         
     | 
| 
      
 92 
     | 
    
         
            +
                      <codePcnPavementType>F</codePcnPavementType>
         
     | 
| 
      
 93 
     | 
    
         
            +
                      <codePcnPavementSubgrade>A</codePcnPavementSubgrade>
         
     | 
| 
      
 94 
     | 
    
         
            +
                      <codePcnMaxTirePressure>W</codePcnMaxTirePressure>
         
     | 
| 
      
 95 
     | 
    
         
            +
                      <codePcnEvalMethod>U</codePcnEvalMethod>
         
     | 
| 
      
 96 
     | 
    
         
            +
                      <txtPcnNote>Cracks near the center.</txtPcnNote>
         
     | 
| 
       104 
97 
     | 
    
         
             
                      <codeSts>OTHER</codeSts>
         
     | 
| 
       105 
98 
     | 
    
         
             
                      <txtRmk>Authorizaton by AD operator required</txtRmk>
         
     | 
| 
       106 
99 
     | 
    
         
             
                    </Tla>
         
     | 
| 
         @@ -109,7 +102,8 @@ describe AIXM::Component::Helipad do 
     | 
|
| 
       109 
102 
     | 
    
         | 
| 
       110 
103 
     | 
    
         
             
                it "builds correct minimal OFMX" do
         
     | 
| 
       111 
104 
     | 
    
         
             
                  AIXM.ofmx!
         
     | 
| 
       112 
     | 
    
         
            -
                   
     | 
| 
      
 105 
     | 
    
         
            +
                  %i(z length width status remarks).each { |a| subject.send(:"#{a}=", nil) }
         
     | 
| 
      
 106 
     | 
    
         
            +
                  %i(composition preparation condition pcn remarks).each { |a| subject.surface.send(:"#{a}=", nil) }
         
     | 
| 
       113 
107 
     | 
    
         
             
                  subject.to_xml.must_equal <<~END
         
     | 
| 
       114 
108 
     | 
    
         
             
                    <Tla>
         
     | 
| 
       115 
109 
     | 
    
         
             
                      <TlaUid>
         
     | 
| 
         @@ -7,13 +7,13 @@ describe AIXM::Component::Runway do 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              describe :initialize do
         
     | 
| 
       9 
9 
     | 
    
         
             
                it "sets defaults for bidirectional runways" do
         
     | 
| 
       10 
     | 
    
         
            -
                  subject.forth.name.must_equal AIXM. 
     | 
| 
       11 
     | 
    
         
            -
                  subject.back.name.must_equal AIXM. 
     | 
| 
      
 10 
     | 
    
         
            +
                  subject.forth.name.must_equal AIXM.a('16L')
         
     | 
| 
      
 11 
     | 
    
         
            +
                  subject.back.name.must_equal AIXM.a('34R')
         
     | 
| 
       12 
12 
     | 
    
         
             
                end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                it "sets defaults for unidirectional runways" do
         
     | 
| 
       15 
15 
     | 
    
         
             
                  subject = AIXM::Component::Runway.new(name: '30')
         
     | 
| 
       16 
     | 
    
         
            -
                  subject.forth.name.must_equal AIXM. 
     | 
| 
      
 16 
     | 
    
         
            +
                  subject.forth.name.must_equal AIXM.a('30')
         
     | 
| 
       17 
17 
     | 
    
         
             
                  subject.back.must_be_nil
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
         @@ -52,21 +52,6 @@ describe AIXM::Component::Runway do 
     | 
|
| 
       52 
52 
     | 
    
         
             
                end
         
     | 
| 
       53 
53 
     | 
    
         
             
              end
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
              describe :composition= do
         
     | 
| 
       56 
     | 
    
         
            -
                it "fails on invalid values" do
         
     | 
| 
       57 
     | 
    
         
            -
                  [:foobar, 123].wont_be_written_to subject, :composition
         
     | 
| 
       58 
     | 
    
         
            -
                end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                it "accepts nil value" do
         
     | 
| 
       61 
     | 
    
         
            -
                  [nil].must_be_written_to subject, :composition
         
     | 
| 
       62 
     | 
    
         
            -
                end
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                it "looks up valid values" do
         
     | 
| 
       65 
     | 
    
         
            -
                  subject.tap { |s| s.composition = :macadam }.composition.must_equal :macadam
         
     | 
| 
       66 
     | 
    
         
            -
                  subject.tap { |s| s.composition = :GRADE }.composition.must_equal :graded_earth
         
     | 
| 
       67 
     | 
    
         
            -
                end
         
     | 
| 
       68 
     | 
    
         
            -
              end
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
55 
     | 
    
         
             
              describe :status= do
         
     | 
| 
       71 
56 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       72 
57 
     | 
    
         
             
                  [:foobar, 123].wont_be_written_to subject, :status
         
     | 
| 
         @@ -100,7 +85,15 @@ describe AIXM::Component::Runway do 
     | 
|
| 
       100 
85 
     | 
    
         
             
                      <valLen>650</valLen>
         
     | 
| 
       101 
86 
     | 
    
         
             
                      <valWid>80</valWid>
         
     | 
| 
       102 
87 
     | 
    
         
             
                      <uomDimRwy>M</uomDimRwy>
         
     | 
| 
       103 
     | 
    
         
            -
                      <codeComposition> 
     | 
| 
      
 88 
     | 
    
         
            +
                      <codeComposition>ASPH</codeComposition>
         
     | 
| 
      
 89 
     | 
    
         
            +
                      <codePreparation>PAVED</codePreparation>
         
     | 
| 
      
 90 
     | 
    
         
            +
                      <codeCondSfc>GOOD</codeCondSfc>
         
     | 
| 
      
 91 
     | 
    
         
            +
                      <valPcnClass>59</valPcnClass>
         
     | 
| 
      
 92 
     | 
    
         
            +
                      <codePcnPavementType>F</codePcnPavementType>
         
     | 
| 
      
 93 
     | 
    
         
            +
                      <codePcnPavementSubgrade>A</codePcnPavementSubgrade>
         
     | 
| 
      
 94 
     | 
    
         
            +
                      <codePcnMaxTirePressure>W</codePcnMaxTirePressure>
         
     | 
| 
      
 95 
     | 
    
         
            +
                      <codePcnEvalMethod>T</codePcnEvalMethod>
         
     | 
| 
      
 96 
     | 
    
         
            +
                      <txtPcnNote>Paved shoulder on 2.5m on each side of the RWY.</txtPcnNote>
         
     | 
| 
       104 
97 
     | 
    
         
             
                      <codeSts>CLSD</codeSts>
         
     | 
| 
       105 
98 
     | 
    
         
             
                      <txtRmk>Markings eroded</txtRmk>
         
     | 
| 
       106 
99 
     | 
    
         
             
                    </Rwy>
         
     | 
| 
         @@ -118,8 +111,9 @@ describe AIXM::Component::Runway do 
     | 
|
| 
       118 
111 
     | 
    
         
             
                      <geoLong>004.75216944E</geoLong>
         
     | 
| 
       119 
112 
     | 
    
         
             
                      <valTrueBrg>165</valTrueBrg>
         
     | 
| 
       120 
113 
     | 
    
         
             
                      <valMagBrg>166</valMagBrg>
         
     | 
| 
       121 
     | 
    
         
            -
                      <valElevTdz> 
     | 
| 
      
 114 
     | 
    
         
            +
                      <valElevTdz>145</valElevTdz>
         
     | 
| 
       122 
115 
     | 
    
         
             
                      <uomElevTdz>FT</uomElevTdz>
         
     | 
| 
      
 116 
     | 
    
         
            +
                      <codeVfrPattern>E</codeVfrPattern>
         
     | 
| 
       123 
117 
     | 
    
         
             
                      <txtRmk>forth remarks</txtRmk>
         
     | 
| 
       124 
118 
     | 
    
         
             
                    </Rdn>
         
     | 
| 
       125 
119 
     | 
    
         
             
                    <Rdd>
         
     | 
| 
         @@ -154,6 +148,9 @@ describe AIXM::Component::Runway do 
     | 
|
| 
       154 
148 
     | 
    
         
             
                      <geoLong>004.75645556E</geoLong>
         
     | 
| 
       155 
149 
     | 
    
         
             
                      <valTrueBrg>345</valTrueBrg>
         
     | 
| 
       156 
150 
     | 
    
         
             
                      <valMagBrg>346</valMagBrg>
         
     | 
| 
      
 151 
     | 
    
         
            +
                      <valElevTdz>147</valElevTdz>
         
     | 
| 
      
 152 
     | 
    
         
            +
                      <uomElevTdz>FT</uomElevTdz>
         
     | 
| 
      
 153 
     | 
    
         
            +
                      <codeVfrPattern>L</codeVfrPattern>
         
     | 
| 
       157 
154 
     | 
    
         
             
                      <txtRmk>back remarks</txtRmk>
         
     | 
| 
       158 
155 
     | 
    
         
             
                    </Rdn>
         
     | 
| 
       159 
156 
     | 
    
         
             
                    <Rdd>
         
     | 
| 
         @@ -179,7 +176,8 @@ describe AIXM::Component::Runway do 
     | 
|
| 
       179 
176 
     | 
    
         | 
| 
       180 
177 
     | 
    
         
             
                it "builds correct minimal OFMX" do
         
     | 
| 
       181 
178 
     | 
    
         
             
                  AIXM.ofmx!
         
     | 
| 
       182 
     | 
    
         
            -
                  %i(length width  
     | 
| 
      
 179 
     | 
    
         
            +
                  %i(length width status remarks).each { |a| subject.send(:"#{a}=", nil) }
         
     | 
| 
      
 180 
     | 
    
         
            +
                  %i(composition preparation condition pcn remarks).each { |a| subject.surface.send(:"#{a}=", nil) }
         
     | 
| 
       183 
181 
     | 
    
         
             
                  subject.to_xml.must_equal <<~END
         
     | 
| 
       184 
182 
     | 
    
         
             
                    <Rwy>
         
     | 
| 
       185 
183 
     | 
    
         
             
                      <RwyUid>
         
     | 
| 
         @@ -203,8 +201,9 @@ describe AIXM::Component::Runway do 
     | 
|
| 
       203 
201 
     | 
    
         
             
                      <geoLong>004.75216944E</geoLong>
         
     | 
| 
       204 
202 
     | 
    
         
             
                      <valTrueBrg>165</valTrueBrg>
         
     | 
| 
       205 
203 
     | 
    
         
             
                      <valMagBrg>166</valMagBrg>
         
     | 
| 
       206 
     | 
    
         
            -
                      <valElevTdz> 
     | 
| 
      
 204 
     | 
    
         
            +
                      <valElevTdz>145</valElevTdz>
         
     | 
| 
       207 
205 
     | 
    
         
             
                      <uomElevTdz>FT</uomElevTdz>
         
     | 
| 
      
 206 
     | 
    
         
            +
                      <codeVfrPattern>E</codeVfrPattern>
         
     | 
| 
       208 
207 
     | 
    
         
             
                      <txtRmk>forth remarks</txtRmk>
         
     | 
| 
       209 
208 
     | 
    
         
             
                    </Rdn>
         
     | 
| 
       210 
209 
     | 
    
         
             
                    <Rdd>
         
     | 
| 
         @@ -239,6 +238,9 @@ describe AIXM::Component::Runway do 
     | 
|
| 
       239 
238 
     | 
    
         
             
                      <geoLong>004.75645556E</geoLong>
         
     | 
| 
       240 
239 
     | 
    
         
             
                      <valTrueBrg>345</valTrueBrg>
         
     | 
| 
       241 
240 
     | 
    
         
             
                      <valMagBrg>346</valMagBrg>
         
     | 
| 
      
 241 
     | 
    
         
            +
                      <valElevTdz>147</valElevTdz>
         
     | 
| 
      
 242 
     | 
    
         
            +
                      <uomElevTdz>FT</uomElevTdz>
         
     | 
| 
      
 243 
     | 
    
         
            +
                      <codeVfrPattern>L</codeVfrPattern>
         
     | 
| 
       242 
244 
     | 
    
         
             
                      <txtRmk>back remarks</txtRmk>
         
     | 
| 
       243 
245 
     | 
    
         
             
                    </Rdn>
         
     | 
| 
       244 
246 
     | 
    
         
             
                    <Rdd>
         
     | 
| 
         @@ -277,18 +279,14 @@ describe AIXM::Component::Runway::Direction do 
     | 
|
| 
       277 
279 
     | 
    
         | 
| 
       278 
280 
     | 
    
         
             
                it "overwrites preset name" do
         
     | 
| 
       279 
281 
     | 
    
         
             
                  subject.name.to_s.must_equal '16L'
         
     | 
| 
       280 
     | 
    
         
            -
                  subject.name = AIXM. 
     | 
| 
      
 282 
     | 
    
         
            +
                  subject.name = AIXM.a('34L')
         
     | 
| 
       281 
283 
     | 
    
         
             
                  subject.name.to_s.must_equal '34L'
         
     | 
| 
       282 
284 
     | 
    
         
             
                end
         
     | 
| 
       283 
285 
     | 
    
         
             
              end
         
     | 
| 
       284 
286 
     | 
    
         | 
| 
       285 
287 
     | 
    
         
             
              describe :geographic_orientation= do
         
     | 
| 
       286 
288 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       287 
     | 
    
         
            -
                  [:foobar, -1,  
     | 
| 
       288 
     | 
    
         
            -
                end
         
     | 
| 
       289 
     | 
    
         
            -
             
     | 
| 
       290 
     | 
    
         
            -
                it "converts valid Numeric values to integer" do
         
     | 
| 
       291 
     | 
    
         
            -
                  subject.tap { |s| s.geographic_orientation = 100.5 }.geographic_orientation.must_equal 100
         
     | 
| 
      
 289 
     | 
    
         
            +
                  [:foobar, -1, 10].wont_be_written_to subject, :geographic_orientation
         
     | 
| 
       292 
290 
     | 
    
         
             
                end
         
     | 
| 
       293 
291 
     | 
    
         
             
              end
         
     | 
| 
       294 
292 
     | 
    
         | 
| 
         @@ -320,14 +318,29 @@ describe AIXM::Component::Runway::Direction do 
     | 
|
| 
       320 
318 
     | 
    
         
             
                end
         
     | 
| 
       321 
319 
     | 
    
         
             
              end
         
     | 
| 
       322 
320 
     | 
    
         | 
| 
      
 321 
     | 
    
         
            +
              describe :vfr_pattern= do
         
     | 
| 
      
 322 
     | 
    
         
            +
                it "fails on invalid values" do
         
     | 
| 
      
 323 
     | 
    
         
            +
                  [:foobar, 123].wont_be_written_to subject, :vfr_pattern
         
     | 
| 
      
 324 
     | 
    
         
            +
                end
         
     | 
| 
      
 325 
     | 
    
         
            +
             
     | 
| 
      
 326 
     | 
    
         
            +
                it "accepts nil value" do
         
     | 
| 
      
 327 
     | 
    
         
            +
                  [nil].must_be_written_to subject, :vfr_pattern
         
     | 
| 
      
 328 
     | 
    
         
            +
                end
         
     | 
| 
      
 329 
     | 
    
         
            +
             
     | 
| 
      
 330 
     | 
    
         
            +
                it "looks up valid values" do
         
     | 
| 
      
 331 
     | 
    
         
            +
                  subject.tap { |s| s.vfr_pattern = :left }.vfr_pattern.must_equal :left
         
     | 
| 
      
 332 
     | 
    
         
            +
                  subject.tap { |s| s.vfr_pattern = :E }.vfr_pattern.must_equal :left_or_right
         
     | 
| 
      
 333 
     | 
    
         
            +
                end
         
     | 
| 
      
 334 
     | 
    
         
            +
              end
         
     | 
| 
      
 335 
     | 
    
         
            +
             
     | 
| 
       323 
336 
     | 
    
         
             
              describe :remarks= do
         
     | 
| 
       324 
337 
     | 
    
         
             
                macro :remarks
         
     | 
| 
       325 
338 
     | 
    
         
             
              end
         
     | 
| 
       326 
339 
     | 
    
         | 
| 
       327 
340 
     | 
    
         
             
              describe :magnetic_orientation do
         
     | 
| 
       328 
341 
     | 
    
         
             
                it "is calculated correctly" do
         
     | 
| 
       329 
     | 
    
         
            -
                  subject.geographic_orientation = 16
         
     | 
| 
       330 
     | 
    
         
            -
                  subject.magnetic_orientation.must_equal 17
         
     | 
| 
      
 342 
     | 
    
         
            +
                  subject.geographic_orientation = AIXM.a(16)
         
     | 
| 
      
 343 
     | 
    
         
            +
                  subject.magnetic_orientation.must_equal AIXM.a(17)
         
     | 
| 
       331 
344 
     | 
    
         
             
                end
         
     | 
| 
       332 
345 
     | 
    
         
             
              end
         
     | 
| 
       333 
346 
     | 
    
         | 
| 
         @@ -349,8 +362,9 @@ describe AIXM::Component::Runway::Direction do 
     | 
|
| 
       349 
362 
     | 
    
         
             
                      <geoLong>004.75216944E</geoLong>
         
     | 
| 
       350 
363 
     | 
    
         
             
                      <valTrueBrg>165</valTrueBrg>
         
     | 
| 
       351 
364 
     | 
    
         
             
                      <valMagBrg>166</valMagBrg>
         
     | 
| 
       352 
     | 
    
         
            -
                      <valElevTdz> 
     | 
| 
      
 365 
     | 
    
         
            +
                      <valElevTdz>145</valElevTdz>
         
     | 
| 
       353 
366 
     | 
    
         
             
                      <uomElevTdz>FT</uomElevTdz>
         
     | 
| 
      
 367 
     | 
    
         
            +
                      <codeVfrPattern>E</codeVfrPattern>
         
     | 
| 
       354 
368 
     | 
    
         
             
                      <txtRmk>forth remarks</txtRmk>
         
     | 
| 
       355 
369 
     | 
    
         
             
                    </Rdn>
         
     | 
| 
       356 
370 
     | 
    
         
             
                    <Rdd>
         
     | 
| 
         @@ -376,7 +390,7 @@ describe AIXM::Component::Runway::Direction do 
     | 
|
| 
       376 
390 
     | 
    
         | 
| 
       377 
391 
     | 
    
         
             
                it "builds correct minimal OFMX" do
         
     | 
| 
       378 
392 
     | 
    
         
             
                  AIXM.ofmx!
         
     | 
| 
       379 
     | 
    
         
            -
                  %i(geographic_orientation z displaced_threshold remarks).each { |a| subject.send(:"#{a}=", nil) }
         
     | 
| 
      
 393 
     | 
    
         
            +
                  %i(geographic_orientation z displaced_threshold vfr_pattern remarks).each { |a| subject.send(:"#{a}=", nil) }
         
     | 
| 
       380 
394 
     | 
    
         
             
                  subject.to_xml.must_equal <<~END
         
     | 
| 
       381 
395 
     | 
    
         
             
                    <Rdn>
         
     | 
| 
       382 
396 
     | 
    
         
             
                      <RdnUid>
         
     |