aixm 0.3.7 → 0.3.8
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/.github/workflows/test.yml +26 -0
 - data/.ruby-version +1 -1
 - data/CHANGELOG.md +17 -4
 - data/README.md +23 -5
 - data/lib/aixm/component/fato.rb +3 -3
 - data/lib/aixm/component/frequency.rb +1 -1
 - data/lib/aixm/component/geometry/border.rb +9 -3
 - data/lib/aixm/component/helipad.rb +1 -1
 - data/lib/aixm/component/lighting.rb +1 -1
 - data/lib/aixm/component/runway.rb +4 -7
 - data/lib/aixm/config.rb +2 -1
 - data/lib/aixm/document.rb +1 -0
 - data/lib/aixm/feature/address.rb +1 -1
 - data/lib/aixm/feature/airport.rb +13 -4
 - data/lib/aixm/feature/airspace.rb +11 -8
 - data/lib/aixm/feature/navigational_aid/designated_point.rb +1 -1
 - data/lib/aixm/feature/navigational_aid/dme.rb +1 -1
 - data/lib/aixm/feature/navigational_aid/marker.rb +1 -1
 - data/lib/aixm/feature/navigational_aid/ndb.rb +1 -1
 - data/lib/aixm/feature/navigational_aid/tacan.rb +1 -1
 - data/lib/aixm/feature/navigational_aid/vor.rb +1 -1
 - data/lib/aixm/feature/obstacle.rb +1 -1
 - data/lib/aixm/feature/obstacle_group.rb +1 -1
 - data/lib/aixm/feature/organisation.rb +1 -1
 - data/lib/aixm/feature/service.rb +1 -1
 - data/lib/aixm/feature/unit.rb +1 -1
 - data/lib/aixm/refinements.rb +39 -8
 - data/lib/aixm/version.rb +1 -1
 - data/rakefile.rb +22 -8
 - data/spec/lib/aixm/a_spec.rb +55 -55
 - data/spec/lib/aixm/component/fato_spec.rb +30 -23
 - data/spec/lib/aixm/component/frequency_spec.rb +12 -13
 - data/spec/lib/aixm/component/geometry/arc_spec.rb +7 -9
 - data/spec/lib/aixm/component/geometry/border_spec.rb +8 -3
 - data/spec/lib/aixm/component/geometry/circle_spec.rb +6 -8
 - data/spec/lib/aixm/component/geometry/point_spec.rb +2 -4
 - data/spec/lib/aixm/component/geometry_spec.rb +57 -62
 - data/spec/lib/aixm/component/helipad_spec.rb +25 -19
 - data/spec/lib/aixm/component/layer_spec.rb +17 -19
 - data/spec/lib/aixm/component/lighting_spec.rb +21 -15
 - data/spec/lib/aixm/component/runway_spec.rb +44 -37
 - data/spec/lib/aixm/component/surface_spec.rb +24 -24
 - data/spec/lib/aixm/component/timetable_spec.rb +7 -9
 - data/spec/lib/aixm/component/vertical_limits_spec.rb +9 -12
 - data/spec/lib/aixm/config_spec.rb +8 -8
 - data/spec/lib/aixm/d_spec.rb +28 -28
 - data/spec/lib/aixm/document_spec.rb +46 -37
 - data/spec/lib/aixm/errors_spec.rb +2 -2
 - data/spec/lib/aixm/f_spec.rb +16 -16
 - data/spec/lib/aixm/feature/address_spec.rb +12 -7
 - data/spec/lib/aixm/feature/airport_spec.rb +80 -74
 - data/spec/lib/aixm/feature/airspace_spec.rb +32 -28
 - data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +16 -11
 - data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +22 -16
 - data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +13 -7
 - data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +15 -9
 - data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +22 -16
 - data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +21 -15
 - data/spec/lib/aixm/feature/navigational_aid_spec.rb +6 -6
 - data/spec/lib/aixm/feature/obstacle_group_spec.rb +25 -21
 - data/spec/lib/aixm/feature/obstacle_spec.rb +47 -42
 - data/spec/lib/aixm/feature/organisation_spec.rb +16 -10
 - data/spec/lib/aixm/feature/service_spec.rb +9 -9
 - data/spec/lib/aixm/feature/unit_spec.rb +21 -13
 - data/spec/lib/aixm/feature_spec.rb +5 -5
 - data/spec/lib/aixm/p_spec.rb +37 -37
 - data/spec/lib/aixm/refinements_spec.rb +164 -115
 - data/spec/lib/aixm/version_spec.rb +1 -1
 - data/spec/lib/aixm/w_spec.rb +28 -28
 - data/spec/lib/aixm/xy_spec.rb +34 -34
 - data/spec/lib/aixm/z_spec.rb +19 -19
 - data/spec/macros/marking.rb +3 -3
 - data/spec/macros/organisation.rb +2 -2
 - data/spec/macros/remarks.rb +3 -3
 - data/spec/macros/timetable.rb +2 -2
 - data/spec/macros/xy.rb +2 -2
 - data/spec/macros/z_qnh.rb +2 -2
 - data/spec/spec_helper.rb +7 -0
 - metadata +3 -3
 - data/.travis.yml +0 -8
 
| 
         @@ -114,7 +114,7 @@ module AIXM 
     | 
|
| 
       114 
114 
     | 
    
         
             
                      ogr_uid.txtName(name)
         
     | 
| 
       115 
115 
     | 
    
         
             
                      ogr_uid.geoLat(obstacles.first.xy.lat(AIXM.schema))
         
     | 
| 
       116 
116 
     | 
    
         
             
                      ogr_uid.geoLong(obstacles.first.xy.long(AIXM.schema))
         
     | 
| 
       117 
     | 
    
         
            -
                    end
         
     | 
| 
      
 117 
     | 
    
         
            +
                    end.insert_payload_hash(region: AIXM.config.mid_region)
         
     | 
| 
       118 
118 
     | 
    
         
             
                  end
         
     | 
| 
       119 
119 
     | 
    
         | 
| 
       120 
120 
     | 
    
         
             
                  # @return [String] AIXM or OFMX markup
         
     | 
    
        data/lib/aixm/feature/service.rb
    CHANGED
    
    
    
        data/lib/aixm/feature/unit.rb
    CHANGED
    
    
    
        data/lib/aixm/refinements.rb
    CHANGED
    
    | 
         @@ -180,11 +180,11 @@ module AIXM 
     | 
|
| 
       180 
180 
     | 
    
         
             
                end
         
     | 
| 
       181 
181 
     | 
    
         | 
| 
       182 
182 
     | 
    
         
             
                # @!method payload_hash(region:, element:)
         
     | 
| 
       183 
     | 
    
         
            -
                #   Calculate the UUIDv3 hash of an OFMX XML string.
         
     | 
| 
      
 183 
     | 
    
         
            +
                #   Calculate the UUIDv3 hash of an AIXM/OFMX XML string.
         
     | 
| 
       184 
184 
     | 
    
         
             
                #
         
     | 
| 
       185 
185 
     | 
    
         
             
                #   A word of warning: This is a minimalistic implementation for the AIXM
         
     | 
| 
       186 
186 
     | 
    
         
             
                #   gem and won't work unless the following conditions are met:
         
     | 
| 
       187 
     | 
    
         
            -
                #   * the XML string must be OFMX
         
     | 
| 
      
 187 
     | 
    
         
            +
                #   * the XML string must be AIXM/OFMX
         
     | 
| 
       188 
188 
     | 
    
         
             
                #   * the XML string must be valid
         
     | 
| 
       189 
189 
     | 
    
         
             
                #   * the XML string must be pretty-printed
         
     | 
| 
       190 
190 
     | 
    
         
             
                #
         
     | 
| 
         @@ -194,14 +194,21 @@ module AIXM 
     | 
|
| 
       194 
194 
     | 
    
         
             
                #
         
     | 
| 
       195 
195 
     | 
    
         
             
                #   @note This is a refinement for +String+
         
     | 
| 
       196 
196 
     | 
    
         
             
                #   @param region [String] OFMX region (e.g. "LF")
         
     | 
| 
       197 
     | 
    
         
            -
                #   @param element [String] tag to calculate the payload hash for
         
     | 
| 
       198 
     | 
    
         
            -
                # 
     | 
| 
      
 197 
     | 
    
         
            +
                #   @param element [String] tag to calculate the payload hash for (default:
         
     | 
| 
      
 198 
     | 
    
         
            +
                #     first element in the string)
         
     | 
| 
      
 199 
     | 
    
         
            +
                #   @return [String] UUIDv3
         
     | 
| 
      
 200 
     | 
    
         
            +
                #   @raise [ArgumentError] if the given element is not found or no element
         
     | 
| 
      
 201 
     | 
    
         
            +
                #     at all
         
     | 
| 
       199 
202 
     | 
    
         
             
                refine String do
         
     | 
| 
       200 
     | 
    
         
            -
                  def payload_hash(region:, element:)
         
     | 
| 
       201 
     | 
    
         
            -
                     
     | 
| 
      
 203 
     | 
    
         
            +
                  def payload_hash(region:, element: nil)
         
     | 
| 
      
 204 
     | 
    
         
            +
                    element = $1 if element.nil? && match(/<([^?].*?)[\s>]/)
         
     | 
| 
      
 205 
     | 
    
         
            +
                    fail(ArgumentError, "no element found") unless element
         
     | 
| 
      
 206 
     | 
    
         
            +
                    fail(ArgumentError, "element `#{element}' not found") unless match? /<#{element}[\s>]/
         
     | 
| 
      
 207 
     | 
    
         
            +
                    gsub(%r((?:mid|source)="[^"]*"), '').   # remove existing mid and source attributes
         
     | 
| 
       202 
208 
     | 
    
         
             
                      sub(%r(\A.*?(?=<#{element}))m, '').   # remove everything before first <element>
         
     | 
| 
       203 
     | 
    
         
            -
                      sub(%r(</#{element}>.*\z)m, '').   # remove everything after first </element>
         
     | 
| 
       204 
     | 
    
         
            -
                       
     | 
| 
      
 209 
     | 
    
         
            +
                      sub(%r(</#{element}>.*\z)m, '').   # remove everything after and including first </element>
         
     | 
| 
      
 210 
     | 
    
         
            +
                      sub(%r(\A(<\w+Uid)\w+), '\1').   # remove Uid name extension
         
     | 
| 
      
 211 
     | 
    
         
            +
                      scan(%r(<([\w-]+)([^>]*)>([^<]*))).each_with_object([region.upcase]) do |(e, a, t), m|
         
     | 
| 
       205 
212 
     | 
    
         
             
                        m << e << a.scan(%r(([\w-]+)="([^"]*)")).sort.flatten << t
         
     | 
| 
       206 
213 
     | 
    
         
             
                      end.
         
     | 
| 
       207 
214 
     | 
    
         
             
                      flatten.
         
     | 
| 
         @@ -211,6 +218,30 @@ module AIXM 
     | 
|
| 
       211 
218 
     | 
    
         
             
                  end
         
     | 
| 
       212 
219 
     | 
    
         
             
                end
         
     | 
| 
       213 
220 
     | 
    
         | 
| 
      
 221 
     | 
    
         
            +
                # @!method insert_payload_hash(region:, element:)
         
     | 
| 
      
 222 
     | 
    
         
            +
                #   Calculate the UUIDv3 hash of an AIXM/OFMX XML string and insert it into
         
     | 
| 
      
 223 
     | 
    
         
            +
                #   the AIXM/OFMX XML string as an mid attribute.
         
     | 
| 
      
 224 
     | 
    
         
            +
                #
         
     | 
| 
      
 225 
     | 
    
         
            +
                #   If the region is explicitly set to +nil+ or false, the AIXM/OFMX string
         
     | 
| 
      
 226 
     | 
    
         
            +
                #   is returned unchanged.
         
     | 
| 
      
 227 
     | 
    
         
            +
                #
         
     | 
| 
      
 228 
     | 
    
         
            +
                #   @note This is a refinement for +String+
         
     | 
| 
      
 229 
     | 
    
         
            +
                #   @see String#payload_hash
         
     | 
| 
      
 230 
     | 
    
         
            +
                #   @param region [String] OFMX region (e.g. "LF")
         
     | 
| 
      
 231 
     | 
    
         
            +
                #   @param element [String] tag to calculate the payload hash for (default:
         
     | 
| 
      
 232 
     | 
    
         
            +
                #     first element in the string)
         
     | 
| 
      
 233 
     | 
    
         
            +
                #   @return [String] AIXM/OFMX XML with UUIDv3 inserted as mid attribute
         
     | 
| 
      
 234 
     | 
    
         
            +
                #   @raise [ArgumentError] if the given element is not found or no element
         
     | 
| 
      
 235 
     | 
    
         
            +
                #     at all
         
     | 
| 
      
 236 
     | 
    
         
            +
                refine String do
         
     | 
| 
      
 237 
     | 
    
         
            +
                  def insert_payload_hash(region:, element: nil)
         
     | 
| 
      
 238 
     | 
    
         
            +
                    return self unless region
         
     | 
| 
      
 239 
     | 
    
         
            +
                    element = $1 if element.nil? && match(/<([^?].*?)[\s>]/)
         
     | 
| 
      
 240 
     | 
    
         
            +
                    hash = payload_hash(region: region, element: element)
         
     | 
| 
      
 241 
     | 
    
         
            +
                    sub(/(<#{element})([^>]*?)(\s+mid=".*?")?/, %Q(\\1 mid="#{hash}"\\2))
         
     | 
| 
      
 242 
     | 
    
         
            +
                  end
         
     | 
| 
      
 243 
     | 
    
         
            +
                end
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
       214 
245 
     | 
    
         
             
                # @!method to_dd
         
     | 
| 
       215 
246 
     | 
    
         
             
                #   Convert DMS angle to DD or +nil+ if the notation is not recognized.
         
     | 
| 
       216 
247 
     | 
    
         
             
                #
         
     | 
    
        data/lib/aixm/version.rb
    CHANGED
    
    
    
        data/rakefile.rb
    CHANGED
    
    | 
         @@ -9,14 +9,28 @@ Rake::TestTask.new do |t| 
     | 
|
| 
       9 
9 
     | 
    
         
             
              t.warning = true
         
     | 
| 
       10 
10 
     | 
    
         
             
            end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
               
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                 
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
            namespace :schema do
         
     | 
| 
      
 13 
     | 
    
         
            +
              desc "Update OFMX schema"
         
     | 
| 
      
 14 
     | 
    
         
            +
              task :update do
         
     | 
| 
      
 15 
     | 
    
         
            +
                `rm -rf schemas/ofmx/0/*`
         
     | 
| 
      
 16 
     | 
    
         
            +
                `wget http://schema.openflightmaps.org/0/OFMX-CSV-Obstacle.json -P schemas/ofmx/0/ -q --show-progress`
         
     | 
| 
      
 17 
     | 
    
         
            +
             	  `wget http://schema.openflightmaps.org/0/OFMX-CSV.json -P schemas/ofmx/0/ -q --show-progress`
         
     | 
| 
      
 18 
     | 
    
         
            +
             	  `wget http://schema.openflightmaps.org/0/OFMX-DataTypes.xsd -P schemas/ofmx/0/ -q --show-progress`
         
     | 
| 
      
 19 
     | 
    
         
            +
             	  `wget http://schema.openflightmaps.org/0/OFMX-Features.xsd -P schemas/ofmx/0/ -q --show-progress`
         
     | 
| 
      
 20 
     | 
    
         
            +
             	  `wget http://schema.openflightmaps.org/0/OFMX-Snapshot.xsd -P schemas/ofmx/0/ -q --show-progress`
         
     | 
| 
       18 
21 
     | 
    
         
             
              end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            namespace :yard do
         
     | 
| 
      
 25 
     | 
    
         
            +
              desc "Run local YARD documentation server"
         
     | 
| 
      
 26 
     | 
    
         
            +
              task :server do
         
     | 
| 
      
 27 
     | 
    
         
            +
                `rm -rf ./.yardoc`
         
     | 
| 
      
 28 
     | 
    
         
            +
                Thread.new do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  sleep 2
         
     | 
| 
      
 30 
     | 
    
         
            +
                  `open http://localhost:8808`
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
                `yard server -r`
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
       21 
35 
     | 
    
         | 
| 
       22 
36 
     | 
    
         
             
            task default: :test
         
     | 
    
        data/spec/lib/aixm/a_spec.rb
    CHANGED
    
    | 
         @@ -11,22 +11,22 @@ describe AIXM::A do 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              describe :initialize do
         
     | 
| 
       13 
13 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       14 
     | 
    
         
            -
                   
     | 
| 
      
 14 
     | 
    
         
            +
                  _{ AIXM.a('foobar') }.must_raise ArgumentError
         
     | 
| 
       15 
15 
     | 
    
         
             
                end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                it "parses String as angle with precision=2" do
         
     | 
| 
       18 
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
         
     | 
| 
      
 19 
     | 
    
         
            +
                    _(h.deg).must_equal 340
         
     | 
| 
      
 20 
     | 
    
         
            +
                    _(h.precision).must_equal 2
         
     | 
| 
      
 21 
     | 
    
         
            +
                    _(h.suffix).must_equal :L
         
     | 
| 
       22 
22 
     | 
    
         
             
                  end
         
     | 
| 
       23 
23 
     | 
    
         
             
                end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                it "parses Numeric as angle with precision=3" do
         
     | 
| 
       26 
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?
         
     | 
| 
      
 27 
     | 
    
         
            +
                    _(h.deg).must_equal 12
         
     | 
| 
      
 28 
     | 
    
         
            +
                    _(h.precision).must_equal 3
         
     | 
| 
      
 29 
     | 
    
         
            +
                    _(h.suffix).must_be :nil?
         
     | 
| 
       30 
30 
     | 
    
         
             
                  end
         
     | 
| 
       31 
31 
     | 
    
         
             
                end
         
     | 
| 
       32 
32 
     | 
    
         
             
              end
         
     | 
| 
         @@ -34,43 +34,43 @@ describe AIXM::A do 
     | 
|
| 
       34 
34 
     | 
    
         
             
              describe :to_s do
         
     | 
| 
       35 
35 
     | 
    
         
             
                context "precision=2" do
         
     | 
| 
       36 
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'
         
     | 
| 
      
 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 
40 
     | 
    
         
             
                  end
         
     | 
| 
       41 
41 
     | 
    
         
             
                end
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                context "precition=3" do
         
     | 
| 
       44 
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'
         
     | 
| 
      
 45 
     | 
    
         
            +
                    _(AIXM.a(5).to_s).must_equal '005'
         
     | 
| 
      
 46 
     | 
    
         
            +
                    _(AIXM.a(5).tap { |a| a.deg = 0 }.to_s).must_equal '000'
         
     | 
| 
       47 
47 
     | 
    
         
             
                  end
         
     | 
| 
       48 
48 
     | 
    
         
             
                end
         
     | 
| 
       49 
49 
     | 
    
         
             
              end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
51 
     | 
    
         
             
              describe :deg= do
         
     | 
| 
       52 
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
         
     | 
| 
      
 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 
55 
     | 
    
         
             
                end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
                context "precision=2" do
         
     | 
| 
       58 
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
         
     | 
| 
      
 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 
64 
     | 
    
         
             
                  end
         
     | 
| 
       65 
65 
     | 
    
         
             
                end
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
                context "precision=3" do
         
     | 
| 
       68 
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
         
     | 
| 
      
 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 
74 
     | 
    
         
             
                  end
         
     | 
| 
       75 
75 
     | 
    
         
             
                end
         
     | 
| 
       76 
76 
     | 
    
         
             
              end
         
     | 
| 
         @@ -78,21 +78,21 @@ describe AIXM::A do 
     | 
|
| 
       78 
78 
     | 
    
         
             
              describe :suffix= do
         
     | 
| 
       79 
79 
     | 
    
         
             
                context "precision=2" do
         
     | 
| 
       80 
80 
     | 
    
         
             
                  it "fails on invalid values" do
         
     | 
| 
       81 
     | 
    
         
            -
                    [123, 'r'].wont_be_written_to subject_2, :suffix
         
     | 
| 
      
 81 
     | 
    
         
            +
                    _([123, 'r']).wont_be_written_to subject_2, :suffix
         
     | 
| 
       82 
82 
     | 
    
         
             
                  end
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
84 
     | 
    
         
             
                  it "accepts nil value" do
         
     | 
| 
       85 
     | 
    
         
            -
                    [nil].must_be_written_to subject_2, :suffix
         
     | 
| 
      
 85 
     | 
    
         
            +
                    _([nil]).must_be_written_to subject_2, :suffix
         
     | 
| 
       86 
86 
     | 
    
         
             
                  end
         
     | 
| 
       87 
87 
     | 
    
         | 
| 
       88 
88 
     | 
    
         
             
                  it "symbolizes valid values" do
         
     | 
| 
       89 
     | 
    
         
            -
                    subject_2.tap { |s| s.suffix = 'Z' }.suffix.must_equal :Z
         
     | 
| 
      
 89 
     | 
    
         
            +
                    _(subject_2.tap { |s| s.suffix = 'Z' }.suffix).must_equal :Z
         
     | 
| 
       90 
90 
     | 
    
         
             
                  end
         
     | 
| 
       91 
91 
     | 
    
         
             
                end
         
     | 
| 
       92 
92 
     | 
    
         | 
| 
       93 
93 
     | 
    
         
             
                context "precision=3" do
         
     | 
| 
       94 
94 
     | 
    
         
             
                  it "always fails" do
         
     | 
| 
       95 
     | 
    
         
            -
                     
     | 
| 
      
 95 
     | 
    
         
            +
                    _{ subject_3.tap { |s| s.suffix = 'Z' } }.must_raise RuntimeError
         
     | 
| 
       96 
96 
     | 
    
         
             
                  end
         
     | 
| 
       97 
97 
     | 
    
         
             
                end
         
     | 
| 
       98 
98 
     | 
    
         
             
              end
         
     | 
| 
         @@ -100,47 +100,47 @@ describe AIXM::A do 
     | 
|
| 
       100 
100 
     | 
    
         
             
              describe :invert do
         
     | 
| 
       101 
101 
     | 
    
         
             
                it "must calculate inverse deg correctly" do
         
     | 
| 
       102 
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
         
     | 
| 
      
 103 
     | 
    
         
            +
                    _(AIXM.a(from).invert.deg).must_equal to
         
     | 
| 
       104 
104 
     | 
    
         
             
                  end
         
     | 
| 
       105 
105 
     | 
    
         
             
                end
         
     | 
| 
       106 
106 
     | 
    
         | 
| 
       107 
107 
     | 
    
         
             
                it "must invert left/right suffix" do
         
     | 
| 
       108 
     | 
    
         
            -
                  AIXM.a('34L').invert.suffix.must_equal :R
         
     | 
| 
      
 108 
     | 
    
         
            +
                  _(AIXM.a('34L').invert.suffix).must_equal :R
         
     | 
| 
       109 
109 
     | 
    
         
             
                end
         
     | 
| 
       110 
110 
     | 
    
         | 
| 
       111 
111 
     | 
    
         
             
                it "must leave other suffixes untouched" do
         
     | 
| 
       112 
     | 
    
         
            -
                  AIXM.a('35X').invert.suffix.must_equal :X
         
     | 
| 
      
 112 
     | 
    
         
            +
                  _(AIXM.a('35X').invert.suffix).must_equal :X
         
     | 
| 
       113 
113 
     | 
    
         
             
                end
         
     | 
| 
       114 
114 
     | 
    
         
             
              end
         
     | 
| 
       115 
115 
     | 
    
         | 
| 
       116 
116 
     | 
    
         
             
              describe :inverse_of? do
         
     | 
| 
       117 
117 
     | 
    
         
             
                it "must return true for inverse pairs" do
         
     | 
| 
       118 
     | 
    
         
            -
                  AIXM.a('34L').inverse_of?(AIXM.a('16R')).must_equal true
         
     | 
| 
      
 118 
     | 
    
         
            +
                  _(AIXM.a('34L').inverse_of?(AIXM.a('16R'))).must_equal true
         
     | 
| 
       119 
119 
     | 
    
         
             
                end
         
     | 
| 
       120 
120 
     | 
    
         | 
| 
       121 
121 
     | 
    
         
             
                it "must return false for non-inverse pairs" do
         
     | 
| 
       122 
     | 
    
         
            -
                  AIXM.a('34L').inverse_of?(AIXM.a('12L')).must_equal false
         
     | 
| 
      
 122 
     | 
    
         
            +
                  _(AIXM.a('34L').inverse_of?(AIXM.a('12L'))).must_equal false
         
     | 
| 
       123 
123 
     | 
    
         
             
                end
         
     | 
| 
       124 
124 
     | 
    
         
             
              end
         
     | 
| 
       125 
125 
     | 
    
         | 
| 
       126 
126 
     | 
    
         
             
              describe :+ do
         
     | 
| 
       127 
127 
     | 
    
         
             
                context "precision=2" do
         
     | 
| 
       128 
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')
         
     | 
| 
      
 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 
133 
     | 
    
         
             
                  end
         
     | 
| 
       134 
134 
     | 
    
         | 
| 
       135 
135 
     | 
    
         
             
                  it "adds another angle" do
         
     | 
| 
       136 
     | 
    
         
            -
                    (AIXM.a('10') + AIXM.a('08')).must_equal AIXM.a('18')
         
     | 
| 
      
 136 
     | 
    
         
            +
                    _((AIXM.a('10') + AIXM.a('08'))).must_equal AIXM.a('18')
         
     | 
| 
       137 
137 
     | 
    
         
             
                  end
         
     | 
| 
       138 
138 
     | 
    
         
             
                end
         
     | 
| 
       139 
139 
     | 
    
         | 
| 
       140 
140 
     | 
    
         
             
                context "precision=3" do
         
     | 
| 
       141 
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)
         
     | 
| 
      
 142 
     | 
    
         
            +
                    _((subject_3 + 15)).must_equal AIXM.a(15)
         
     | 
| 
      
 143 
     | 
    
         
            +
                    _((subject_3 + 370)).must_equal AIXM.a(10)
         
     | 
| 
       144 
144 
     | 
    
         
             
                  end
         
     | 
| 
       145 
145 
     | 
    
         
             
                end
         
     | 
| 
       146 
146 
     | 
    
         
             
              end
         
     | 
| 
         @@ -148,56 +148,56 @@ describe AIXM::A do 
     | 
|
| 
       148 
148 
     | 
    
         
             
              describe :- do
         
     | 
| 
       149 
149 
     | 
    
         
             
                context "precision=2" do
         
     | 
| 
       150 
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')
         
     | 
| 
      
 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 
155 
     | 
    
         
             
                  end
         
     | 
| 
       156 
156 
     | 
    
         | 
| 
       157 
157 
     | 
    
         
             
                  it "subtracts another angle" do
         
     | 
| 
       158 
     | 
    
         
            -
                    (AIXM.a('10') - AIXM.a('08')).must_equal AIXM.a('02')
         
     | 
| 
      
 158 
     | 
    
         
            +
                    _((AIXM.a('10') - AIXM.a('08'))).must_equal AIXM.a('02')
         
     | 
| 
       159 
159 
     | 
    
         
             
                  end
         
     | 
| 
       160 
160 
     | 
    
         
             
                end
         
     | 
| 
       161 
161 
     | 
    
         | 
| 
       162 
162 
     | 
    
         
             
                context "precision=3" do
         
     | 
| 
       163 
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)
         
     | 
| 
      
 164 
     | 
    
         
            +
                    _((subject_3 - 15)).must_equal AIXM.a(345)
         
     | 
| 
      
 165 
     | 
    
         
            +
                    _((AIXM.a(55) - 20)).must_equal AIXM.a(35)
         
     | 
| 
       166 
166 
     | 
    
         
             
                  end
         
     | 
| 
       167 
167 
     | 
    
         
             
                end
         
     | 
| 
       168 
168 
     | 
    
         
             
              end
         
     | 
| 
       169 
169 
     | 
    
         | 
| 
       170 
170 
     | 
    
         
             
              describe :== do
         
     | 
| 
       171 
171 
     | 
    
         
             
                it "recognizes angles with identical deg and suffix as equal" do
         
     | 
| 
       172 
     | 
    
         
            -
                  AIXM.a('34L').must_equal AIXM.a('34L')
         
     | 
| 
      
 172 
     | 
    
         
            +
                  _(AIXM.a('34L')).must_equal AIXM.a('34L')
         
     | 
| 
       173 
173 
     | 
    
         
             
                end
         
     | 
| 
       174 
174 
     | 
    
         | 
| 
       175 
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')
         
     | 
| 
      
 176 
     | 
    
         
            +
                  _(AIXM.a('34L')).wont_equal AIXM.a('35L')
         
     | 
| 
      
 177 
     | 
    
         
            +
                  _(AIXM.a('34L')).wont_equal AIXM.a('34R')
         
     | 
| 
       178 
178 
     | 
    
         
             
                end
         
     | 
| 
       179 
179 
     | 
    
         | 
| 
       180 
180 
     | 
    
         
             
                it "recognizes angles with different precision as unequal" do
         
     | 
| 
       181 
     | 
    
         
            -
                  AIXM.a('34').wont_equal AIXM.a(340)
         
     | 
| 
      
 181 
     | 
    
         
            +
                  _(AIXM.a('34')).wont_equal AIXM.a(340)
         
     | 
| 
       182 
182 
     | 
    
         
             
                end
         
     | 
| 
       183 
183 
     | 
    
         | 
| 
       184 
184 
     | 
    
         
             
                it "recognizes objects of different class as unequal" do
         
     | 
| 
       185 
     | 
    
         
            -
                  subject_2.wont_equal :oggy
         
     | 
| 
      
 185 
     | 
    
         
            +
                  _(subject_2).wont_equal :oggy
         
     | 
| 
       186 
186 
     | 
    
         
             
                end
         
     | 
| 
       187 
187 
     | 
    
         
             
              end
         
     | 
| 
       188 
188 
     | 
    
         | 
| 
       189 
189 
     | 
    
         
             
              describe :hash do
         
     | 
| 
       190 
190 
     | 
    
         
             
                it "returns an integer" do
         
     | 
| 
       191 
     | 
    
         
            -
                  subject_2.hash.must_be_instance_of Integer
         
     | 
| 
      
 191 
     | 
    
         
            +
                  _(subject_2.hash).must_be_instance_of Integer
         
     | 
| 
       192 
192 
     | 
    
         
             
                end
         
     | 
| 
       193 
193 
     | 
    
         | 
| 
       194 
194 
     | 
    
         
             
                it "returns different hashes for different precisions" do
         
     | 
| 
       195 
     | 
    
         
            -
                  subject_2.hash.wont_equal subject_3.hash
         
     | 
| 
      
 195 
     | 
    
         
            +
                  _(subject_2.hash).wont_equal subject_3.hash
         
     | 
| 
       196 
196 
     | 
    
         
             
                end
         
     | 
| 
       197 
197 
     | 
    
         | 
| 
       198 
198 
     | 
    
         
             
                it "allows for the use of instances as hash keys" do
         
     | 
| 
       199 
199 
     | 
    
         
             
                  dupe = subject_2.dup
         
     | 
| 
       200 
     | 
    
         
            -
                  { subject_2 => true }[dupe].must_equal true
         
     | 
| 
      
 200 
     | 
    
         
            +
                  _({ subject_2 => true }[dupe]).must_equal true
         
     | 
| 
       201 
201 
     | 
    
         
             
                end
         
     | 
| 
       202 
202 
     | 
    
         
             
              end
         
     | 
| 
       203 
203 
     | 
    
         
             
            end
         
     | 
| 
         @@ -7,31 +7,31 @@ describe AIXM::Component::FATO do 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              describe :name= do
         
     | 
| 
       9 
9 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       10 
     | 
    
         
            -
                  [nil, :foobar, 123].wont_be_written_to subject, :name
         
     | 
| 
      
 10 
     | 
    
         
            +
                  _([nil, :foobar, 123]).wont_be_written_to subject, :name
         
     | 
| 
       11 
11 
     | 
    
         
             
                end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                it "upcases and transcodes valid values" do
         
     | 
| 
       14 
     | 
    
         
            -
                  subject.tap { |s| s.name = 'h1' }.name.must_equal 'H1'
         
     | 
| 
      
 14 
     | 
    
         
            +
                  _(subject.tap { |s| s.name = 'h1' }.name).must_equal 'H1'
         
     | 
| 
       15 
15 
     | 
    
         
             
                end
         
     | 
| 
       16 
16 
     | 
    
         
             
              end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
              describe :length= do
         
     | 
| 
       19 
19 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       20 
     | 
    
         
            -
                  [:foobar, 0, 1, AIXM.d(0, :m)].wont_be_written_to subject, :length
         
     | 
| 
      
 20 
     | 
    
         
            +
                  _([:foobar, 0, 1, AIXM.d(0, :m)]).wont_be_written_to subject, :length
         
     | 
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                it "accepts nil value" do
         
     | 
| 
       24 
     | 
    
         
            -
                  [nil].must_be_written_to subject, :length
         
     | 
| 
      
 24 
     | 
    
         
            +
                  _([nil]).must_be_written_to subject, :length
         
     | 
| 
       25 
25 
     | 
    
         
             
                end
         
     | 
| 
       26 
26 
     | 
    
         
             
              end
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
              describe :width= do
         
     | 
| 
       29 
29 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       30 
     | 
    
         
            -
                  [:foobar, 0, 1, AIXM.d(0, :m)].wont_be_written_to subject, :width
         
     | 
| 
      
 30 
     | 
    
         
            +
                  _([:foobar, 0, 1, AIXM.d(0, :m)]).wont_be_written_to subject, :width
         
     | 
| 
       31 
31 
     | 
    
         
             
                end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                it "accepts nil value" do
         
     | 
| 
       34 
     | 
    
         
            -
                  [nil].must_be_written_to subject, :width
         
     | 
| 
      
 34 
     | 
    
         
            +
                  _([nil]).must_be_written_to subject, :width
         
     | 
| 
       35 
35 
     | 
    
         
             
                end
         
     | 
| 
       36 
36 
     | 
    
         
             
              end
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
         @@ -41,27 +41,27 @@ describe AIXM::Component::FATO do 
     | 
|
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
              describe :profile= do
         
     | 
| 
       43 
43 
     | 
    
         
             
                it "accepts nil value" do
         
     | 
| 
       44 
     | 
    
         
            -
                  [nil].must_be_written_to subject, :profile
         
     | 
| 
      
 44 
     | 
    
         
            +
                  _([nil]).must_be_written_to subject, :profile
         
     | 
| 
       45 
45 
     | 
    
         
             
                end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                it "stringifies valid values" do
         
     | 
| 
       48 
     | 
    
         
            -
                  subject.tap { |s| s.profile = 'foobar' }.profile.must_equal 'foobar'
         
     | 
| 
       49 
     | 
    
         
            -
                  subject.tap { |s| s.profile = 123 }.profile.must_equal '123'
         
     | 
| 
      
 48 
     | 
    
         
            +
                  _(subject.tap { |s| s.profile = 'foobar' }.profile).must_equal 'foobar'
         
     | 
| 
      
 49 
     | 
    
         
            +
                  _(subject.tap { |s| s.profile = 123 }.profile).must_equal '123'
         
     | 
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
       51 
51 
     | 
    
         
             
              end
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
       53 
53 
     | 
    
         
             
              describe :status= do
         
     | 
| 
       54 
54 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       55 
     | 
    
         
            -
                  [:foobar, 123].wont_be_written_to subject, :status
         
     | 
| 
      
 55 
     | 
    
         
            +
                  _([:foobar, 123]).wont_be_written_to subject, :status
         
     | 
| 
       56 
56 
     | 
    
         
             
                end
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
                it "accepts nil value" do
         
     | 
| 
       59 
     | 
    
         
            -
                  [nil].must_be_written_to subject, :status
         
     | 
| 
      
 59 
     | 
    
         
            +
                  _([nil]).must_be_written_to subject, :status
         
     | 
| 
       60 
60 
     | 
    
         
             
                end
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
62 
     | 
    
         
             
                it "looks up valid values" do
         
     | 
| 
       63 
     | 
    
         
            -
                  subject.tap { |s| s.status = :closed }.status.must_equal :closed
         
     | 
| 
       64 
     | 
    
         
            -
                  subject.tap { |s| s.status = :SPOWER }.status.must_equal :secondary_power
         
     | 
| 
      
 63 
     | 
    
         
            +
                  _(subject.tap { |s| s.status = :closed }.status).must_equal :closed
         
     | 
| 
      
 64 
     | 
    
         
            +
                  _(subject.tap { |s| s.status = :SPOWER }.status).must_equal :secondary_power
         
     | 
| 
       65 
65 
     | 
    
         
             
                end
         
     | 
| 
       66 
66 
     | 
    
         
             
              end
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
         @@ -72,7 +72,7 @@ describe AIXM::Component::FATO do 
     | 
|
| 
       72 
72 
     | 
    
         
             
              describe :xml= do
         
     | 
| 
       73 
73 
     | 
    
         
             
                it "builds correct complete OFMX" do
         
     | 
| 
       74 
74 
     | 
    
         
             
                  AIXM.ofmx!
         
     | 
| 
       75 
     | 
    
         
            -
                  subject.to_xml.must_equal <<~END
         
     | 
| 
      
 75 
     | 
    
         
            +
                  _(subject.to_xml).must_equal <<~END
         
     | 
| 
       76 
76 
     | 
    
         
             
                    <Fto>
         
     | 
| 
       77 
77 
     | 
    
         
             
                      <FtoUid>
         
     | 
| 
       78 
78 
     | 
    
         
             
                        <AhpUid>
         
     | 
| 
         @@ -114,7 +114,7 @@ describe AIXM::Component::FATO do 
     | 
|
| 
       114 
114 
     | 
    
         
             
                        <txtDesig>35</txtDesig>
         
     | 
| 
       115 
115 
     | 
    
         
             
                      </FdnUid>
         
     | 
| 
       116 
116 
     | 
    
         
             
                      <valTrueBrg>355</valTrueBrg>
         
     | 
| 
       117 
     | 
    
         
            -
                      <valMagBrg> 
     | 
| 
      
 117 
     | 
    
         
            +
                      <valMagBrg>354</valMagBrg>
         
     | 
| 
       118 
118 
     | 
    
         
             
                      <txtRmk>Avoid flight over residental area</txtRmk>
         
     | 
| 
       119 
119 
     | 
    
         
             
                    </Fdn>
         
     | 
| 
       120 
120 
     | 
    
         
             
                    <Fls>
         
     | 
| 
         @@ -143,7 +143,7 @@ describe AIXM::Component::FATO do 
     | 
|
| 
       143 
143 
     | 
    
         
             
                  %i(length width profile marking status remarks).each { |a| subject.send(:"#{a}=", nil) }
         
     | 
| 
       144 
144 
     | 
    
         
             
                  %i(composition preparation condition pcn siwl_weight siwl_tire_pressure auw_weight remarks).each { |a| subject.surface.send(:"#{a}=", nil) }
         
     | 
| 
       145 
145 
     | 
    
         
             
                  subject.directions['35'].instance_eval { @lightings.clear }
         
     | 
| 
       146 
     | 
    
         
            -
                  subject.to_xml.must_equal <<~END
         
     | 
| 
      
 146 
     | 
    
         
            +
                  _(subject.to_xml).must_equal <<~END
         
     | 
| 
       147 
147 
     | 
    
         
             
                    <Fto>
         
     | 
| 
       148 
148 
     | 
    
         
             
                      <FtoUid>
         
     | 
| 
       149 
149 
     | 
    
         
             
                        <AhpUid>
         
     | 
| 
         @@ -163,11 +163,18 @@ describe AIXM::Component::FATO do 
     | 
|
| 
       163 
163 
     | 
    
         
             
                        <txtDesig>35</txtDesig>
         
     | 
| 
       164 
164 
     | 
    
         
             
                      </FdnUid>
         
     | 
| 
       165 
165 
     | 
    
         
             
                      <valTrueBrg>355</valTrueBrg>
         
     | 
| 
       166 
     | 
    
         
            -
                      <valMagBrg> 
     | 
| 
      
 166 
     | 
    
         
            +
                      <valMagBrg>354</valMagBrg>
         
     | 
| 
       167 
167 
     | 
    
         
             
                      <txtRmk>Avoid flight over residental area</txtRmk>
         
     | 
| 
       168 
168 
     | 
    
         
             
                    </Fdn>
         
     | 
| 
       169 
169 
     | 
    
         
             
                  END
         
     | 
| 
       170 
170 
     | 
    
         
             
                end
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                it "builds OFMX with mid" do
         
     | 
| 
      
 173 
     | 
    
         
            +
                  AIXM.ofmx!
         
     | 
| 
      
 174 
     | 
    
         
            +
                  AIXM.config.mid_region = 'LF'
         
     | 
| 
      
 175 
     | 
    
         
            +
                  _(subject.to_xml).must_match /<FtoUid mid="9753290e-774e-2600-9b16-f7f951e06e9d">/
         
     | 
| 
      
 176 
     | 
    
         
            +
                  _(subject.to_xml).must_match /<FdnUid mid="ac550e74-73e2-4feb-4934-d0b4aafccfe6">/
         
     | 
| 
      
 177 
     | 
    
         
            +
                end
         
     | 
| 
       171 
178 
     | 
    
         
             
              end
         
     | 
| 
       172 
179 
     | 
    
         
             
            end
         
     | 
| 
       173 
180 
     | 
    
         | 
| 
         @@ -178,13 +185,13 @@ describe AIXM::Component::FATO::Direction do 
     | 
|
| 
       178 
185 
     | 
    
         | 
| 
       179 
186 
     | 
    
         
             
              describe :name= do
         
     | 
| 
       180 
187 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       181 
     | 
    
         
            -
                  [nil, :foobar, 'OGGY'].wont_be_written_to subject, :name
         
     | 
| 
      
 188 
     | 
    
         
            +
                  _([nil, :foobar, 'OGGY']).wont_be_written_to subject, :name
         
     | 
| 
       182 
189 
     | 
    
         
             
                end
         
     | 
| 
       183 
190 
     | 
    
         
             
              end
         
     | 
| 
       184 
191 
     | 
    
         | 
| 
       185 
192 
     | 
    
         
             
              describe :geographic_orientation= do
         
     | 
| 
       186 
193 
     | 
    
         
             
                it "fails on invalid values" do
         
     | 
| 
       187 
     | 
    
         
            -
                  [:foobar, -1, 10].wont_be_written_to subject, :geographic_orientation
         
     | 
| 
      
 194 
     | 
    
         
            +
                  _([:foobar, -1, 10]).wont_be_written_to subject, :geographic_orientation
         
     | 
| 
       188 
195 
     | 
    
         
             
                end
         
     | 
| 
       189 
196 
     | 
    
         
             
              end
         
     | 
| 
       190 
197 
     | 
    
         | 
| 
         @@ -195,14 +202,14 @@ describe AIXM::Component::FATO::Direction do 
     | 
|
| 
       195 
202 
     | 
    
         
             
              describe :magnetic_orientation do
         
     | 
| 
       196 
203 
     | 
    
         
             
                it "is calculated correctly" do
         
     | 
| 
       197 
204 
     | 
    
         
             
                  subject.geographic_orientation = AIXM.a(16)
         
     | 
| 
       198 
     | 
    
         
            -
                  subject.magnetic_orientation.must_equal AIXM.a( 
     | 
| 
      
 205 
     | 
    
         
            +
                  _(subject.magnetic_orientation).must_equal AIXM.a(15)
         
     | 
| 
       199 
206 
     | 
    
         
             
                end
         
     | 
| 
       200 
207 
     | 
    
         
             
              end
         
     | 
| 
       201 
208 
     | 
    
         | 
| 
       202 
209 
     | 
    
         
             
              describe :xml= do
         
     | 
| 
       203 
210 
     | 
    
         
             
                it "builds correct complete OFMX" do
         
     | 
| 
       204 
211 
     | 
    
         
             
                  AIXM.ofmx!
         
     | 
| 
       205 
     | 
    
         
            -
                  subject.to_xml.must_equal <<~END
         
     | 
| 
      
 212 
     | 
    
         
            +
                  _(subject.to_xml).must_equal <<~END
         
     | 
| 
       206 
213 
     | 
    
         
             
                    <Fdn>
         
     | 
| 
       207 
214 
     | 
    
         
             
                      <FdnUid>
         
     | 
| 
       208 
215 
     | 
    
         
             
                        <FtoUid>
         
     | 
| 
         @@ -214,7 +221,7 @@ describe AIXM::Component::FATO::Direction do 
     | 
|
| 
       214 
221 
     | 
    
         
             
                        <txtDesig>35</txtDesig>
         
     | 
| 
       215 
222 
     | 
    
         
             
                      </FdnUid>
         
     | 
| 
       216 
223 
     | 
    
         
             
                      <valTrueBrg>355</valTrueBrg>
         
     | 
| 
       217 
     | 
    
         
            -
                      <valMagBrg> 
     | 
| 
      
 224 
     | 
    
         
            +
                      <valMagBrg>354</valMagBrg>
         
     | 
| 
       218 
225 
     | 
    
         
             
                      <txtRmk>Avoid flight over residental area</txtRmk>
         
     | 
| 
       219 
226 
     | 
    
         
             
                    </Fdn>
         
     | 
| 
       220 
227 
     | 
    
         
             
                    <Fls>
         
     | 
| 
         @@ -242,7 +249,7 @@ describe AIXM::Component::FATO::Direction do 
     | 
|
| 
       242 
249 
     | 
    
         
             
                  AIXM.ofmx!
         
     | 
| 
       243 
250 
     | 
    
         
             
                  %i(geographic_orientation remarks).each { |a| subject.send(:"#{a}=", nil) }
         
     | 
| 
       244 
251 
     | 
    
         
             
                  subject.instance_eval { @lightings.clear }
         
     | 
| 
       245 
     | 
    
         
            -
                  subject.to_xml.must_equal <<~END
         
     | 
| 
      
 252 
     | 
    
         
            +
                  _(subject.to_xml).must_equal <<~END
         
     | 
| 
       246 
253 
     | 
    
         
             
                  <Fdn>
         
     | 
| 
       247 
254 
     | 
    
         
             
                    <FdnUid>
         
     | 
| 
       248 
255 
     | 
    
         
             
                      <FtoUid>
         
     |