aixm 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +14 -3
- data/README.md +30 -2
- data/exe/ckmid +1 -7
- data/exe/mkmid +1 -7
- data/lib/aixm/classes.rb +2 -1
- data/lib/aixm/component/address.rb +12 -15
- data/lib/aixm/component/approach_lighting.rb +11 -16
- data/lib/aixm/component/fato.rb +22 -34
- data/lib/aixm/component/frequency.rb +10 -15
- data/lib/aixm/component/geometry/arc.rb +2 -3
- data/lib/aixm/component/geometry/border.rb +6 -10
- data/lib/aixm/component/geometry/circle.rb +4 -4
- data/lib/aixm/component/geometry/point.rb +4 -4
- data/lib/aixm/component/geometry/rhumb_line.rb +4 -4
- data/lib/aixm/component/geometry.rb +4 -4
- data/lib/aixm/component/helipad.rb +13 -20
- data/lib/aixm/component/layer.rb +6 -8
- data/lib/aixm/component/lighting.rb +12 -17
- data/lib/aixm/component/runway.rb +26 -38
- data/lib/aixm/component/service.rb +12 -16
- data/lib/aixm/component/surface.rb +8 -10
- data/lib/aixm/component/timesheet.rb +9 -10
- data/lib/aixm/component/timetable.rb +6 -7
- data/lib/aixm/component/vasis.rb +6 -8
- data/lib/aixm/component/vertical_limit.rb +8 -8
- data/lib/aixm/component.rb +3 -2
- data/lib/aixm/concerns/association.rb +381 -0
- data/lib/aixm/concerns/memoize.rb +107 -0
- data/lib/aixm/concerns/xml_builder.rb +34 -0
- data/lib/aixm/document.rb +52 -21
- data/lib/aixm/feature/airport.rb +44 -47
- data/lib/aixm/feature/airspace.rb +27 -34
- data/lib/aixm/feature/generic.rb +67 -0
- data/lib/aixm/feature/navigational_aid/designated_point.rb +11 -13
- data/lib/aixm/feature/navigational_aid/dme.rb +12 -15
- data/lib/aixm/feature/navigational_aid/marker.rb +12 -15
- data/lib/aixm/feature/navigational_aid/ndb.rb +13 -16
- data/lib/aixm/feature/navigational_aid/tacan.rb +15 -17
- data/lib/aixm/feature/navigational_aid/vor.rb +16 -19
- data/lib/aixm/feature/navigational_aid.rb +7 -7
- data/lib/aixm/feature/obstacle.rb +20 -21
- data/lib/aixm/feature/obstacle_group.rb +19 -20
- data/lib/aixm/feature/organisation.rb +11 -12
- data/lib/aixm/feature/unit.rb +16 -18
- data/lib/aixm/feature.rb +26 -7
- data/lib/aixm/object.rb +1 -1
- data/lib/aixm/refinements.rb +57 -0
- data/lib/aixm/version.rb +1 -1
- data/lib/aixm.rb +4 -3
- data/schemas/ofmx/0.1/OFMX-Snapshot.xsd +6 -1
- data.tar.gz.sig +3 -3
- metadata +7 -19
- metadata.gz.sig +0 -0
- data/lib/aixm/association.rb +0 -378
- data/lib/aixm/memoize.rb +0 -105
@@ -20,33 +20,32 @@ module AIXM
|
|
20
20
|
# channel: String # either set channel directly
|
21
21
|
# ghost_f: AIXM.f # or set channel via VOR ghost frequency
|
22
22
|
# )
|
23
|
-
#
|
24
|
-
#
|
23
|
+
# tacan.timetable = AIXM.timetable or nil
|
24
|
+
# tacan.remarks = String or nil
|
25
|
+
# tacan.comment = Object or nil
|
25
26
|
#
|
26
27
|
# @see https://gitlab.com/openflightmaps/ofmx/wikis/Navigational-aid#tcn-tacan
|
27
28
|
class TACAN < DME
|
28
|
-
include AIXM::Memoize
|
29
|
-
|
30
29
|
public_class_method :new
|
31
30
|
|
32
|
-
#
|
33
|
-
def
|
34
|
-
builder = Builder::XmlMarkup.new(indent: 2)
|
31
|
+
# @!visibility private
|
32
|
+
def add_uid_to(builder)
|
35
33
|
builder.TcnUid({ region: (region if AIXM.ofmx?) }.compact) do |tcn_uid|
|
36
34
|
tcn_uid.codeId(id)
|
37
35
|
tcn_uid.geoLat(xy.lat(AIXM.schema))
|
38
36
|
tcn_uid.geoLong(xy.long(AIXM.schema))
|
39
37
|
end
|
40
38
|
end
|
41
|
-
memoize :to_uid
|
42
39
|
|
43
|
-
#
|
44
|
-
def
|
45
|
-
builder
|
40
|
+
# @!visibility private
|
41
|
+
def add_to(builder)
|
42
|
+
builder.comment "NavigationalAid: [#{kind}] #{[id, name].compact.join(' / ')}".dress
|
43
|
+
builder.text "\n"
|
46
44
|
builder.Tcn({ source: (source if AIXM.ofmx?) }.compact) do |tcn|
|
47
|
-
tcn
|
48
|
-
tcn
|
49
|
-
|
45
|
+
tcn.comment(indented_comment) if comment
|
46
|
+
add_uid_to(tcn)
|
47
|
+
organisation.add_uid_to(tcn)
|
48
|
+
vor.add_uid_to(tcn) if vor
|
50
49
|
tcn.txtName(name) if name
|
51
50
|
tcn.codeChannel(channel)
|
52
51
|
if !vor && AIXM.ofmx?
|
@@ -56,11 +55,10 @@ module AIXM
|
|
56
55
|
tcn.codeDatum('WGE')
|
57
56
|
if z
|
58
57
|
tcn.valElev(z.alt)
|
59
|
-
tcn.uomDistVer(z.unit.upcase
|
58
|
+
tcn.uomDistVer(z.unit.upcase)
|
60
59
|
end
|
61
|
-
|
60
|
+
timetable.add_to(tcn, as: :Ttt) if timetable
|
62
61
|
tcn.txtRmk(remarks) if remarks
|
63
|
-
tcn.target!
|
64
62
|
end
|
65
63
|
end
|
66
64
|
end
|
@@ -23,13 +23,12 @@ module AIXM
|
|
23
23
|
# )
|
24
24
|
# vor.timetable = AIXM.timetable or nil
|
25
25
|
# vor.remarks = String or nil
|
26
|
+
# vor.comment = Object or nil
|
26
27
|
# vor.associate_dme # turns the VOR into a VOR/DME
|
27
28
|
# vor.associate_tacan # turns the VOR into a VORTAC
|
28
29
|
#
|
29
30
|
# @see https://gitlab.com/openflightmaps/ofmx/wikis/Navigational-aid#vor-vor
|
30
31
|
class VOR < NavigationalAid
|
31
|
-
include AIXM::Memoize
|
32
|
-
|
33
32
|
public_class_method :new
|
34
33
|
|
35
34
|
TYPES = {
|
@@ -132,39 +131,37 @@ module AIXM
|
|
132
131
|
end
|
133
132
|
end
|
134
133
|
|
135
|
-
#
|
136
|
-
def
|
137
|
-
builder = Builder::XmlMarkup.new(indent: 2)
|
134
|
+
# @!visibility private
|
135
|
+
def add_uid_to(builder)
|
138
136
|
builder.VorUid({ region: (region if AIXM.ofmx?) }.compact) do |vor_uid|
|
139
137
|
vor_uid.codeId(id)
|
140
138
|
vor_uid.geoLat(xy.lat(AIXM.schema))
|
141
139
|
vor_uid.geoLong(xy.long(AIXM.schema))
|
142
140
|
end
|
143
141
|
end
|
144
|
-
memoize :to_uid
|
145
142
|
|
146
|
-
#
|
147
|
-
def
|
148
|
-
|
143
|
+
# @!visibility private
|
144
|
+
def add_to(builder)
|
145
|
+
super
|
149
146
|
builder.Vor({ source: (source if AIXM.ofmx?) }.compact) do |vor|
|
150
|
-
vor
|
151
|
-
vor
|
147
|
+
vor.comment(indented_comment) if comment
|
148
|
+
add_uid_to(vor)
|
149
|
+
organisation.add_uid_to(vor)
|
152
150
|
vor.txtName(name) if name
|
153
|
-
vor.codeType(type_key
|
151
|
+
vor.codeType(type_key)
|
154
152
|
vor.valFreq(f.freq.trim)
|
155
|
-
vor.uomFreq(f.unit.upcase
|
156
|
-
vor.codeTypeNorth(north_key
|
153
|
+
vor.uomFreq(f.unit.upcase)
|
154
|
+
vor.codeTypeNorth(north_key)
|
157
155
|
vor.codeDatum('WGE')
|
158
156
|
if z
|
159
157
|
vor.valElev(z.alt)
|
160
|
-
vor.uomDistVer(z.unit.upcase
|
158
|
+
vor.uomDistVer(z.unit.upcase)
|
161
159
|
end
|
162
|
-
|
160
|
+
timetable.add_to(vor, as: :Vtt) if timetable
|
163
161
|
vor.txtRmk(remarks) if remarks
|
164
162
|
end
|
165
|
-
|
166
|
-
|
167
|
-
builder.target!
|
163
|
+
@dme.add_to(builder) if @dme
|
164
|
+
@tacan.add_to(builder) if @tacan
|
168
165
|
end
|
169
166
|
|
170
167
|
# @api private
|
@@ -5,7 +5,7 @@ module AIXM
|
|
5
5
|
|
6
6
|
# @abstract
|
7
7
|
class NavigationalAid < Feature
|
8
|
-
include AIXM::Association
|
8
|
+
include AIXM::Concerns::Association
|
9
9
|
include AIXM::Concerns::Timetable
|
10
10
|
include AIXM::Concerns::Remarks
|
11
11
|
|
@@ -84,17 +84,17 @@ module AIXM
|
|
84
84
|
[self.class.name.split('::').last, type_key].compact.join(':'.freeze)
|
85
85
|
end
|
86
86
|
|
87
|
+
# @!visibility private
|
88
|
+
def add_to(builder)
|
89
|
+
builder.comment "NavigationalAid: [#{kind}] #{[id, name].compact.join(' / ')}".dress
|
90
|
+
builder.text "\n"
|
91
|
+
end
|
92
|
+
|
87
93
|
private
|
88
94
|
|
89
95
|
def type_key
|
90
96
|
nil
|
91
97
|
end
|
92
|
-
|
93
|
-
def to_builder
|
94
|
-
builder = Builder::XmlMarkup.new(indent: 2)
|
95
|
-
builder.comment! "NavigationalAid: [#{kind}] #{[id, name].compact.join(' / ')}"
|
96
|
-
builder
|
97
|
-
end
|
98
98
|
end
|
99
99
|
|
100
100
|
end
|
@@ -27,6 +27,7 @@ module AIXM
|
|
27
27
|
# obstacle.valid_from = Time or Date or String or nil
|
28
28
|
# obstacle.valid_until = Time or Date or String or nil
|
29
29
|
# obstacle.remarks = String or nil
|
30
|
+
# obstacle.comment = Object or nil
|
30
31
|
# obstacle.link_to # => AIXM.obstacle or nil
|
31
32
|
# obstacle.link_type # => LINK_TYPE or nil
|
32
33
|
#
|
@@ -41,8 +42,7 @@ module AIXM
|
|
41
42
|
#
|
42
43
|
# @see https://gitlab.com/openflightmaps/ofmx/wikis/Obstacle
|
43
44
|
class Obstacle < Feature
|
44
|
-
include AIXM::Association
|
45
|
-
include AIXM::Memoize
|
45
|
+
include AIXM::Concerns::Association
|
46
46
|
include AIXM::Concerns::Remarks
|
47
47
|
|
48
48
|
public_class_method :new
|
@@ -208,7 +208,7 @@ module AIXM
|
|
208
208
|
|
209
209
|
# @return [String]
|
210
210
|
def inspect
|
211
|
-
%Q(#<#{self.class} xy="#{xy
|
211
|
+
%Q(#<#{self.class} xy="#{xy}" type=#{type.inspect} name=#{name.inspect}>)
|
212
212
|
end
|
213
213
|
|
214
214
|
def name=(value)
|
@@ -306,31 +306,30 @@ module AIXM
|
|
306
306
|
!!linked_to
|
307
307
|
end
|
308
308
|
|
309
|
-
#
|
310
|
-
def
|
309
|
+
# @!visibility private
|
310
|
+
def add_uid_to(builder, as: :ObsUid)
|
311
311
|
obstacle_group = self.obstacle_group || singleton_obstacle_group
|
312
|
-
builder
|
313
|
-
|
314
|
-
tag << obstacle_group.to_uid.indent(2) if AIXM.ofmx?
|
312
|
+
builder.send(as) do |tag|
|
313
|
+
obstacle_group.add_uid_to(tag) if AIXM.ofmx?
|
315
314
|
tag.geoLat((xy.lat(AIXM.schema)))
|
316
315
|
tag.geoLong((xy.long(AIXM.schema)))
|
317
316
|
end
|
318
317
|
end
|
319
|
-
memoize :to_uid
|
320
318
|
|
321
|
-
#
|
322
|
-
def
|
319
|
+
# @!visibility private
|
320
|
+
def add_to(builder, delegate: true)
|
323
321
|
obstacle_group = self.obstacle_group || singleton_obstacle_group
|
324
|
-
return obstacle_group.
|
325
|
-
builder
|
326
|
-
builder.
|
322
|
+
return obstacle_group.add_to(builder) if delegate && AIXM.ofmx?
|
323
|
+
builder.comment "Obstacle: [#{type}] #{xy.to_s} #{name}".dress
|
324
|
+
builder.text "\n"
|
327
325
|
builder.Obs({ source: (source if AIXM.ofmx?) }.compact) do |obs|
|
328
|
-
obs
|
326
|
+
obs.comment(indented_comment) if comment
|
327
|
+
add_uid_to(obs)
|
329
328
|
obs.txtName(name) if name
|
330
329
|
if AIXM.ofmx?
|
331
|
-
obs.codeType(TYPES.key(type)
|
330
|
+
obs.codeType(TYPES.key(type))
|
332
331
|
else
|
333
|
-
obs.txtDescrType(TYPES.key(type)
|
332
|
+
obs.txtDescrType(TYPES.key(type))
|
334
333
|
end
|
335
334
|
obs.codeGroup(grouped? ? 'Y' : 'N')
|
336
335
|
if AIXM.ofmx?
|
@@ -344,7 +343,7 @@ module AIXM
|
|
344
343
|
obs.codeDatum('WGE')
|
345
344
|
if AIXM.aixm? && obstacle_group.xy_accuracy
|
346
345
|
obs.valGeoAccuracy(obstacle_group.xy_accuracy.dim.trim)
|
347
|
-
obs.uomGeoAccuracy(obstacle_group.xy_accuracy.unit.upcase
|
346
|
+
obs.uomGeoAccuracy(obstacle_group.xy_accuracy.unit.upcase)
|
348
347
|
end
|
349
348
|
obs.valElev(z.alt)
|
350
349
|
if AIXM.aixm? && obstacle_group.z_accuracy
|
@@ -358,11 +357,11 @@ module AIXM
|
|
358
357
|
if AIXM.ofmx?
|
359
358
|
if radius
|
360
359
|
obs.valRadius(radius.dim.trim)
|
361
|
-
obs.uomRadius(radius.unit.upcase
|
360
|
+
obs.uomRadius(radius.unit.upcase)
|
362
361
|
end
|
363
362
|
if grouped? && linked?
|
364
|
-
|
365
|
-
obs.codeLinkType(LINK_TYPES.key(link_type)
|
363
|
+
linked_to.add_uid_to(obs, as: :ObsUidLink)
|
364
|
+
obs.codeLinkType(LINK_TYPES.key(link_type))
|
366
365
|
end
|
367
366
|
obs.datetimeValidWef(valid_from.xmlschema) if valid_from
|
368
367
|
obs.datetimeValidTil(valid_until.xmlschema) if valid_until
|
@@ -11,11 +11,11 @@ module AIXM
|
|
11
11
|
# source: String or nil # see remarks below
|
12
12
|
# region: String or nil
|
13
13
|
# name: String or nil
|
14
|
-
# )
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
14
|
+
# )
|
15
|
+
# obstacle_group.xy_accuracy = AIXM.d or nil
|
16
|
+
# obstacle_group.z_accuracy = AIXM.d or nil
|
17
|
+
# obstacle_group.remarks = String or nil
|
18
|
+
# obstacle_group.comment = Object or nil
|
19
19
|
# obstacle_group.add_obstacle( # add an obstacle to the group
|
20
20
|
# AIXM.obstacle
|
21
21
|
# )
|
@@ -38,8 +38,7 @@ module AIXM
|
|
38
38
|
#
|
39
39
|
# @see https://gitlab.com/openflightmaps/ofmx/wikis/Obstacle
|
40
40
|
class ObstacleGroup < Feature
|
41
|
-
include AIXM::Association
|
42
|
-
include AIXM::Memoize
|
41
|
+
include AIXM::Concerns::Association
|
43
42
|
include AIXM::Concerns::Remarks
|
44
43
|
|
45
44
|
public_class_method :new
|
@@ -88,7 +87,7 @@ module AIXM
|
|
88
87
|
|
89
88
|
# @return [String]
|
90
89
|
def inspect
|
91
|
-
%Q(#<#{self.class} #{
|
90
|
+
%Q(#<#{self.class} #{obstacles.count} obstacle(s)>)
|
92
91
|
end
|
93
92
|
|
94
93
|
def name=(value)
|
@@ -106,28 +105,27 @@ module AIXM
|
|
106
105
|
@z_accuracy = value
|
107
106
|
end
|
108
107
|
|
109
|
-
#
|
110
|
-
def
|
111
|
-
builder = Builder::XmlMarkup.new(indent: 2)
|
108
|
+
# @!visibility private
|
109
|
+
def add_uid_to(builder)
|
112
110
|
builder.OgrUid({ region: (region if AIXM.ofmx?) }.compact) do |ogr_uid|
|
113
111
|
ogr_uid.txtName(name)
|
114
112
|
ogr_uid.geoLat(obstacles.first.xy.lat(AIXM.schema))
|
115
113
|
ogr_uid.geoLong(obstacles.first.xy.long(AIXM.schema))
|
116
114
|
end
|
117
115
|
end
|
118
|
-
memoize :to_uid
|
119
116
|
|
120
|
-
#
|
121
|
-
def
|
122
|
-
builder = Builder::XmlMarkup.new(indent: 2)
|
117
|
+
# @!visibility private
|
118
|
+
def add_to(builder)
|
123
119
|
if AIXM.ofmx?
|
124
|
-
builder.comment
|
120
|
+
builder.comment "Obstacle group: #{name}".dress
|
121
|
+
builder.text "\n"
|
125
122
|
builder.Ogr({ source: (source if AIXM.ofmx?) }.compact) do |ogr|
|
126
|
-
ogr
|
123
|
+
ogr.comment(indented_comment) if comment
|
124
|
+
add_uid_to(ogr)
|
127
125
|
ogr.codeDatum('WGE')
|
128
126
|
if xy_accuracy
|
129
127
|
ogr.valGeoAccuracy(xy_accuracy.dim.trim)
|
130
|
-
ogr.uomGeoAccuracy(xy_accuracy.unit.upcase
|
128
|
+
ogr.uomGeoAccuracy(xy_accuracy.unit.upcase)
|
131
129
|
end
|
132
130
|
if z_accuracy
|
133
131
|
ogr.valElevAccuracy(z_accuracy.to_ft.dim.round)
|
@@ -136,8 +134,9 @@ module AIXM
|
|
136
134
|
ogr.txtRmk(remarks) if remarks
|
137
135
|
end
|
138
136
|
end
|
139
|
-
obstacles.each
|
140
|
-
|
137
|
+
obstacles.each do |obstacle|
|
138
|
+
obstacle.add_to(builder, delegate: false)
|
139
|
+
end
|
141
140
|
end
|
142
141
|
end
|
143
142
|
|
@@ -15,11 +15,11 @@ module AIXM
|
|
15
15
|
# )
|
16
16
|
# organisation.id = String or nil
|
17
17
|
# organisation.remarks = String or nil
|
18
|
+
# organisation.comment = Object or nil
|
18
19
|
#
|
19
20
|
# @see https://gitlab.com/openflightmaps/ofmx/wikis/Organisation#org-organisation
|
20
21
|
class Organisation < Feature
|
21
|
-
include AIXM::Association
|
22
|
-
include AIXM::Memoize
|
22
|
+
include AIXM::Concerns::Association
|
23
23
|
include AIXM::Concerns::Remarks
|
24
24
|
|
25
25
|
public_class_method :new
|
@@ -96,23 +96,22 @@ module AIXM
|
|
96
96
|
@id = value&.upcase
|
97
97
|
end
|
98
98
|
|
99
|
-
#
|
100
|
-
def
|
101
|
-
builder = Builder::XmlMarkup.new(indent: 2)
|
99
|
+
# @!visibility private
|
100
|
+
def add_uid_to(builder)
|
102
101
|
builder.OrgUid({ region: (region if AIXM.ofmx?) }.compact) do |org_uid|
|
103
102
|
org_uid.txtName(name)
|
104
103
|
end
|
105
104
|
end
|
106
|
-
memoize :to_uid
|
107
105
|
|
108
|
-
#
|
109
|
-
def
|
110
|
-
builder
|
111
|
-
builder.
|
106
|
+
# @!visibility private
|
107
|
+
def add_to(builder)
|
108
|
+
builder.comment "Organisation: #{name}".dress
|
109
|
+
builder.text "\n"
|
112
110
|
builder.Org({ source: (source if AIXM.ofmx?) }.compact) do |org|
|
113
|
-
org
|
111
|
+
org.comment(indented_comment) if comment
|
112
|
+
add_uid_to(org)
|
114
113
|
org.codeId(id) if id
|
115
|
-
org.codeType(TYPES.key(type)
|
114
|
+
org.codeType(TYPES.key(type))
|
116
115
|
org.txtRmk(remarks) if remarks
|
117
116
|
end
|
118
117
|
end
|
data/lib/aixm/feature/unit.rb
CHANGED
@@ -17,12 +17,12 @@ module AIXM
|
|
17
17
|
# )
|
18
18
|
# unit.airport = AIXM.airport or nil
|
19
19
|
# unit.remarks = String or nil
|
20
|
+
# unit.comment = Object or nil
|
20
21
|
# unit.add_service(AIXM.service)
|
21
22
|
#
|
22
23
|
# @see https://gitlab.com/openflightmaps/ofmx/wikis/Organisation#uni-unit
|
23
24
|
class Unit < Feature
|
24
|
-
include AIXM::Association
|
25
|
-
include AIXM::Memoize
|
25
|
+
include AIXM::Concerns::Association
|
26
26
|
include AIXM::Concerns::Remarks
|
27
27
|
|
28
28
|
public_class_method :new
|
@@ -151,32 +151,30 @@ module AIXM
|
|
151
151
|
@klass = CLASSES.lookup(value&.to_s&.to_sym, nil) || fail(ArgumentError, "invalid class")
|
152
152
|
end
|
153
153
|
|
154
|
-
#
|
155
|
-
def
|
156
|
-
builder = Builder::XmlMarkup.new(indent: 2)
|
154
|
+
# @!visibility private
|
155
|
+
def add_uid_to(builder)
|
157
156
|
builder.UniUid({ region: (region if AIXM.ofmx?) }.compact) do |uni_uid|
|
158
157
|
uni_uid.txtName(name)
|
159
|
-
uni_uid.codeType(TYPES.key(type)
|
158
|
+
uni_uid.codeType(TYPES.key(type)) if AIXM.ofmx?
|
160
159
|
end
|
161
160
|
end
|
162
|
-
memoize :to_uid
|
163
161
|
|
164
|
-
#
|
165
|
-
def
|
166
|
-
builder
|
167
|
-
builder.
|
162
|
+
# @!visibility private
|
163
|
+
def add_to(builder)
|
164
|
+
builder.comment "Unit: #{name_with_type}".dress
|
165
|
+
builder.text "\n"
|
168
166
|
builder.Uni({ source: (source if AIXM.ofmx?) }.compact) do |uni|
|
169
|
-
uni
|
170
|
-
uni
|
171
|
-
|
172
|
-
|
173
|
-
uni.
|
167
|
+
uni.comment(indented_comment) if comment
|
168
|
+
add_uid_to(uni)
|
169
|
+
organisation.add_uid_to(uni)
|
170
|
+
airport.add_uid_to(uni) if airport
|
171
|
+
uni.codeType(TYPES.key(type)) unless AIXM.ofmx?
|
172
|
+
uni.codeClass(CLASSES.key(self.class))
|
174
173
|
uni.txtRmk(remarks) if remarks
|
175
174
|
end
|
176
175
|
services.sort { |a, b| a.type <=> b.type }.each do |service|
|
177
|
-
|
176
|
+
service.add_to(builder)
|
178
177
|
end
|
179
|
-
builder.target!
|
180
178
|
end
|
181
179
|
|
182
180
|
private
|
data/lib/aixm/feature.rb
CHANGED
@@ -1,17 +1,21 @@
|
|
1
|
+
using AIXM::Refinements
|
2
|
+
|
1
3
|
module AIXM
|
2
4
|
|
3
5
|
# @abstract
|
4
|
-
class Feature
|
5
|
-
include AIXM::Concerns::HashEquality
|
6
|
+
class Feature < Component
|
6
7
|
|
7
8
|
REGION_RE = /\A[A-Z]{2}\z/.freeze
|
8
9
|
|
9
10
|
private_class_method :new
|
10
11
|
|
11
|
-
# Freely usable e.g. to
|
12
|
+
# Freely usable XML comment e.g. to include raw source data
|
12
13
|
#
|
13
|
-
# @
|
14
|
-
|
14
|
+
# @overload comment
|
15
|
+
# @return [String]
|
16
|
+
# @overload comment=(value)
|
17
|
+
# @param value [Object]
|
18
|
+
attr_reader :comment
|
15
19
|
|
16
20
|
# Reference to source of the feature data.
|
17
21
|
#
|
@@ -34,6 +38,10 @@ module AIXM
|
|
34
38
|
self.region = region || AIXM.config.region
|
35
39
|
end
|
36
40
|
|
41
|
+
def comment=(value)
|
42
|
+
@comment = value.to_s.strip
|
43
|
+
end
|
44
|
+
|
37
45
|
def source=(value)
|
38
46
|
fail(ArgumentError, "invalid source") unless value.nil? || value.is_a?(String)
|
39
47
|
@source = value
|
@@ -46,12 +54,23 @@ module AIXM
|
|
46
54
|
|
47
55
|
# @see Object#==
|
48
56
|
def ==(other)
|
49
|
-
self.__class__ === other && self.to_uid == other.to_uid
|
57
|
+
self.__class__ === other && self.to_uid.to_s == other.to_uid.to_s
|
50
58
|
end
|
51
59
|
|
52
60
|
# @see Object#eql?
|
53
61
|
def hash
|
54
|
-
[self.__class__, to_uid].hash
|
62
|
+
[self.__class__, to_uid.to_s].hash
|
63
|
+
end
|
64
|
+
|
65
|
+
protected
|
66
|
+
|
67
|
+
# @return [String]
|
68
|
+
def indented_comment
|
69
|
+
if comment.include?("\n")
|
70
|
+
[nil, comment.indent(4), ' '].join("\n")
|
71
|
+
else
|
72
|
+
comment.dress
|
73
|
+
end
|
55
74
|
end
|
56
75
|
end
|
57
76
|
|
data/lib/aixm/object.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# This monkey patch is necessary because some classes have to introduce
|
2
2
|
# attributes named +class+ (e.g. for airspace classes as described by
|
3
3
|
# +AIXM::Component::Layer+) which clash with this core method. Other parts
|
4
|
-
# such as +AIXM::Association+ need the original implementation for introspection
|
4
|
+
# such as +AIXM::Concerns::Association+ need the original implementation for introspection
|
5
5
|
# which is why this alias +Object#__class__+ makes it globally and consistently
|
6
6
|
# available again.
|
7
7
|
class Object
|
data/lib/aixm/refinements.rb
CHANGED
@@ -15,6 +15,16 @@ module AIXM
|
|
15
15
|
"Ø" => "Oe"
|
16
16
|
}.freeze
|
17
17
|
|
18
|
+
PRETTY_XSLT = <<~END.then { Nokogiri::XSLT(_1) }
|
19
|
+
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
20
|
+
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
|
21
|
+
<xsl:strip-space elements="*"/>
|
22
|
+
<xsl:template match="/">
|
23
|
+
<xsl:copy-of select="."/>
|
24
|
+
</xsl:template>
|
25
|
+
</xsl:stylesheet>
|
26
|
+
END
|
27
|
+
|
18
28
|
# @!method to_digest
|
19
29
|
# Builds a 4 byte hex digest from the Array payload.
|
20
30
|
#
|
@@ -108,6 +118,7 @@ module AIXM
|
|
108
118
|
# @note This is a refinement for +Hash+
|
109
119
|
# @param key_or_value [Object] key or value of the hash
|
110
120
|
# @param fallback [Object] fallback value
|
121
|
+
# @return [Object]
|
111
122
|
# @raise [KeyError] if neither a matching hash key nor hash value are
|
112
123
|
# found and no fallback value has been passed
|
113
124
|
refine Hash do
|
@@ -118,6 +129,36 @@ module AIXM
|
|
118
129
|
end
|
119
130
|
end
|
120
131
|
|
132
|
+
# @!method pretty
|
133
|
+
# Transform the XML document to be pretty when sending +to_xml+
|
134
|
+
#
|
135
|
+
# @example
|
136
|
+
# xml = <<~END
|
137
|
+
# <xml><aaa> AAA </aaa>
|
138
|
+
# <bbb/>
|
139
|
+
# <ccc foo="bar" >
|
140
|
+
# CCC
|
141
|
+
# </ccc>
|
142
|
+
# </xml>
|
143
|
+
# END
|
144
|
+
# Nokogiri.XML(xml).pretty.to_xml
|
145
|
+
# # => <?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
146
|
+
# <xml>
|
147
|
+
# <aaa> AAA </aaa>
|
148
|
+
# <bbb/>
|
149
|
+
# <ccc foo="bar">
|
150
|
+
# CCC
|
151
|
+
# </ccc>
|
152
|
+
# </xml>
|
153
|
+
#
|
154
|
+
# @note This is a refinement for +Nokogiri::XML::Document+
|
155
|
+
# @return [Nokogiri::XML::Document]
|
156
|
+
refine Nokogiri::XML::Document do
|
157
|
+
def pretty
|
158
|
+
PRETTY_XSLT.transform(self)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
121
162
|
# @!method then_if
|
122
163
|
# Same as +Object#then+ but only applied if the condition is true.
|
123
164
|
#
|
@@ -169,6 +210,22 @@ module AIXM
|
|
169
210
|
end
|
170
211
|
end
|
171
212
|
|
213
|
+
# @!method dress
|
214
|
+
# Prepends and appends the given +string+ after stripping +self+. Quite
|
215
|
+
# the contrary of +strip+, hence the name.
|
216
|
+
#
|
217
|
+
# @example
|
218
|
+
# " foobar\n\n".dress # => " foobar "
|
219
|
+
#
|
220
|
+
# @note This is a refinement for +String+
|
221
|
+
# @param padding [String] string to prepend and append
|
222
|
+
# @return [String]
|
223
|
+
refine String do
|
224
|
+
def dress(padding=' ')
|
225
|
+
[padding, strip, padding].join
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
172
229
|
# @!method to_class
|
173
230
|
# Convert string to class
|
174
231
|
#
|
data/lib/aixm/version.rb
CHANGED
data/lib/aixm.rb
CHANGED
@@ -8,7 +8,6 @@ require 'forwardable'
|
|
8
8
|
require 'digest'
|
9
9
|
require 'optparse'
|
10
10
|
|
11
|
-
require 'builder'
|
12
11
|
require 'nokogiri'
|
13
12
|
require 'dry/inflector'
|
14
13
|
require 'sun'
|
@@ -22,10 +21,11 @@ require_relative 'aixm/errors'
|
|
22
21
|
|
23
22
|
require_relative 'aixm/classes'
|
24
23
|
require_relative 'aixm/constants'
|
25
|
-
require_relative 'aixm/memoize'
|
26
|
-
require_relative 'aixm/association'
|
27
24
|
require_relative 'aixm/payload_hash'
|
28
25
|
|
26
|
+
require_relative 'aixm/concerns/memoize'
|
27
|
+
require_relative 'aixm/concerns/association'
|
28
|
+
require_relative 'aixm/concerns/xml_builder'
|
29
29
|
require_relative 'aixm/concerns/hash_equality'
|
30
30
|
require_relative 'aixm/concerns/timetable'
|
31
31
|
require_relative 'aixm/concerns/intensity'
|
@@ -82,6 +82,7 @@ require_relative 'aixm/feature/obstacle'
|
|
82
82
|
require_relative 'aixm/feature/obstacle_group'
|
83
83
|
require_relative 'aixm/feature/organisation'
|
84
84
|
require_relative 'aixm/feature/unit'
|
85
|
+
require_relative 'aixm/feature/generic'
|
85
86
|
|
86
87
|
require_relative 'aixm/shortcuts'
|
87
88
|
require_relative 'aixm/executables'
|
@@ -215,7 +215,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
215
215
|
</xsd:attribute>
|
216
216
|
<xsd:attribute name="effective" type="xsd:dateTime" use="required">
|
217
217
|
<xsd:annotation>
|
218
|
-
<xsd:documentation>The date and time used as criteria to select valid versions included in the message</xsd:documentation>
|
218
|
+
<xsd:documentation>The beginning date and time used as criteria to select valid versions included in the message</xsd:documentation>
|
219
|
+
</xsd:annotation>
|
220
|
+
</xsd:attribute>
|
221
|
+
<xsd:attribute name="expiration" type="xsd:dateTime">
|
222
|
+
<xsd:annotation>
|
223
|
+
<xsd:documentation>The optional end date and time used as criteria to select valid versions included in the message</xsd:documentation>
|
219
224
|
</xsd:annotation>
|
220
225
|
</xsd:attribute>
|
221
226
|
</xsd:complexType>
|
data.tar.gz.sig
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
�
|
3
|
-
|
1
|
+
f���}fu���D`,F��E���Z�Q�{�FA��g\���f�,P�*��ϗ@P���;���:7���ܫ�\俭��z ��-}����ʢ挰��N��A�ь�Z*��J�xÕ�smЖ�?Wd4��.7�7�)���
|
2
|
+
=sZ���/���!wv���cU�p��#�����]��yY��R �S�O�S� �����՚�af�5
|
3
|
+
�?����"��8.�lCHv;���P�(��e.���m�v��7
|