aipp 0.2.5 → 0.2.6

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +8 -0
  5. data/README.md +40 -14
  6. data/exe/aip2aixm +1 -1
  7. data/exe/aip2ofmx +1 -1
  8. data/lib/aipp.rb +2 -0
  9. data/lib/aipp/aip.rb +17 -12
  10. data/lib/aipp/downloader.rb +1 -1
  11. data/lib/aipp/executable.rb +15 -12
  12. data/lib/aipp/parser.rb +58 -43
  13. data/lib/aipp/pdf.rb +1 -1
  14. data/lib/aipp/regions/LF/AD-1.3.rb +7 -6
  15. data/lib/aipp/regions/LF/AD-1.6.rb +7 -5
  16. data/lib/aipp/regions/LF/AD-2.rb +16 -9
  17. data/lib/aipp/regions/LF/AD-3.1.rb +6 -6
  18. data/lib/aipp/regions/LF/ENR-2.1.rb +81 -6
  19. data/lib/aipp/regions/LF/ENR-4.1.rb +3 -1
  20. data/lib/aipp/regions/LF/ENR-4.3.rb +2 -3
  21. data/lib/aipp/regions/LF/ENR-5.1.rb +15 -2
  22. data/lib/aipp/regions/LF/ENR-5.4.rb +90 -0
  23. data/lib/aipp/regions/LF/ENR-5.5.rb +12 -10
  24. data/lib/aipp/regions/LF/fixtures/AD-1.3.yml +2 -2
  25. data/lib/aipp/regions/LF/helpers/base.rb +17 -9
  26. data/lib/aipp/regions/LF/helpers/radio_AD.rb +21 -13
  27. data/lib/aipp/t_hash.rb +3 -3
  28. data/lib/aipp/version.rb +1 -1
  29. data/lib/core_ext/enumerable.rb +7 -7
  30. data/lib/core_ext/string.rb +9 -4
  31. metadata +156 -168
  32. metadata.gz.sig +1 -0
  33. data/.github/workflows/test.yml +0 -26
  34. data/.gitignore +0 -8
  35. data/.ruby-version +0 -1
  36. data/.yardopts +0 -3
  37. data/Guardfile +0 -7
  38. data/TODO.md +0 -6
  39. data/aipp.gemspec +0 -45
  40. data/gems.rb +0 -3
  41. data/rakefile.rb +0 -12
  42. data/spec/fixtures/border.geojson +0 -201
  43. data/spec/fixtures/document.pdf +0 -0
  44. data/spec/fixtures/document.pdf.json +0 -1
  45. data/spec/fixtures/new.html +0 -6
  46. data/spec/fixtures/new.pdf +0 -0
  47. data/spec/fixtures/new.txt +0 -1
  48. data/spec/fixtures/source.zip +0 -0
  49. data/spec/lib/aipp/airac_spec.rb +0 -98
  50. data/spec/lib/aipp/border_spec.rb +0 -135
  51. data/spec/lib/aipp/downloader_spec.rb +0 -81
  52. data/spec/lib/aipp/patcher_spec.rb +0 -46
  53. data/spec/lib/aipp/pdf_spec.rb +0 -124
  54. data/spec/lib/aipp/t_hash_spec.rb +0 -44
  55. data/spec/lib/aipp/version_spec.rb +0 -7
  56. data/spec/lib/core_ext/enumberable_spec.rb +0 -76
  57. data/spec/lib/core_ext/hash_spec.rb +0 -27
  58. data/spec/lib/core_ext/integer_spec.rb +0 -15
  59. data/spec/lib/core_ext/nil_class_spec.rb +0 -11
  60. data/spec/lib/core_ext/string_spec.rb +0 -112
  61. data/spec/sounds/failure.mp3 +0 -0
  62. data/spec/sounds/success.mp3 +0 -0
  63. data/spec/spec_helper.rb +0 -29
@@ -128,9 +128,9 @@ runways:
128
128
  02/20:
129
129
  width: 70
130
130
  LFTQ:
131
- "11":
131
+ "10":
132
132
  xy: 47°44'25.1"N 1°11'41.6"W
133
- "29":
133
+ "28":
134
134
  xy: 47°44'19.7"N 1°11'08.0"W
135
135
  LFFU:
136
136
  "09":
@@ -99,7 +99,7 @@ module AIPP
99
99
 
100
100
  def prepare(html:)
101
101
  html.tap do |node|
102
- node.css('del, tr[class*="AmdtDeletedAIRAC"]').each(&:remove) # remove deleted entries
102
+ node.css('del, *[class*="AmdtDeletedAIRAC"]').each(&:remove) # remove deleted entries
103
103
  end
104
104
  end
105
105
 
@@ -141,16 +141,24 @@ module AIPP
141
141
  end
142
142
  end
143
143
 
144
+ def d_from(text)
145
+ case text
146
+ when nil then nil
147
+ when /(\d+)(\w+)/ then AIXM.d($1.to_i, $2.to_sym)
148
+ else fail "d `#{text}' not recognized"
149
+ end
150
+ end
151
+
144
152
  def elevation_from(text)
145
153
  value, unit = text.strip.split
146
154
  AIXM.z(AIXM.d(value.to_i, unit).to_ft.dist, :qnh)
147
155
  end
148
156
 
149
- def layer_from(text_for_limits, text_for_class=nil)
150
- above, below = text_for_limits.gsub(/ /, '').split(/\n+/).select(&:blank_to_nil).split { |e| e.match? '---+' }
157
+ def layer_from(text_for_limit, text_for_class=nil)
158
+ above, below = text_for_limit.gsub(/ /, '').split(/\n+/).select(&:blank_to_nil).split { _1.match? '---+' }
151
159
  AIXM.layer(
152
160
  class: text_for_class,
153
- vertical_limits: AIXM.vertical_limits(
161
+ vertical_limit: AIXM.vertical_limit(
154
162
  upper_z: z_from(above[0]),
155
163
  max_z: z_from(above[1]),
156
164
  lower_z: z_from(below[0]),
@@ -165,23 +173,23 @@ module AIPP
165
173
  text.gsub(/\s+/, ' ').strip.split(/ - /).append('end').each do |element|
166
174
  case element
167
175
  when /arc (anti-)?horaire .+ sur (\S+) , (\S+)/i
168
- geometry << AIXM.arc(
176
+ geometry.add_segment AIXM.arc(
169
177
  xy: buffer.delete(:xy),
170
178
  center_xy: AIXM.xy(lat: $2, long: $3),
171
179
  clockwise: $1.nil?
172
180
  )
173
181
  when /cercle de ([\d\.]+) (NM|km|m) .+ sur (\S+) , (\S+)/i
174
- geometry << AIXM.circle(
182
+ geometry.add_segment AIXM.circle(
175
183
  center_xy: AIXM.xy(lat: $3, long: $4),
176
184
  radius: AIXM.d($1.to_f, $2)
177
185
  )
178
186
  when /end|(\S+) , (\S+)/
179
- geometry << AIXM.point(xy: buffer[:xy]) if buffer.has_key?(:xy)
187
+ geometry.add_segment AIXM.point(xy: buffer[:xy]) if buffer.has_key?(:xy)
180
188
  buffer[:xy] = AIXM.xy(lat: $1, long: $2) if $1
181
189
  if border = buffer.delete(:border)
182
190
  from = border.nearest(xy: geometry.segments.last.xy)
183
191
  to = border.nearest(xy: buffer[:xy], geometry_index: from.geometry_index)
184
- geometry.concat border.segment(from_position: from, to_position: to).map(&:to_point)
192
+ geometry.add_segments border.segment(from_position: from, to_position: to).map(&:to_point)
185
193
  end
186
194
  when /^frontière ([\w-]+)/i, /^(\D[^(]+)/i
187
195
  border_name = BORDERS.fetch($1.downcase.strip)
@@ -193,7 +201,7 @@ module AIPP
193
201
  if border_name == 'FRANCE_SPAIN' # specify which part of this split border
194
202
  border_name += buffer[:xy].lat < 42.55 ? '_EAST' : '_WEST'
195
203
  end
196
- geometry << AIXM.border(
204
+ geometry.add_segment AIXM.border(
197
205
  xy: buffer.delete(:xy),
198
206
  name: border_name
199
207
  )
@@ -22,11 +22,12 @@ module AIPP
22
22
  type = tds[0].text.strip
23
23
  next if IGNORED_TYPES.include? type
24
24
  f, callsign, _, remarks = parts_from(tds).values
25
+ callsign = callsign.split(/\n\s*/).join('/')
25
26
  if ADDRESS_TYPES.include?(type)
26
27
  AIXM.address(
27
28
  source: source(position: tr.line),
28
29
  type: :radio_frequency,
29
- address: f.to_s
30
+ address: f.freq.to_s
30
31
  ).tap do |address|
31
32
  address.remarks = ["#{type} - indicatif/callsign #{callsign}", remarks.blank_to_nil].compact.join("\n")
32
33
  end
@@ -34,7 +35,7 @@ module AIPP
34
35
  end.compact
35
36
  end
36
37
 
37
- def units_from(trs)
38
+ def units_from(trs, airport:)
38
39
  return [] if trs.text.blank?
39
40
  trs.each_with_object({}) do |tr, services|
40
41
  tds = tr.css('td')
@@ -54,8 +55,10 @@ module AIPP
54
55
  remarks = [SERVICE_TYPES.dig(type, :remarks), remarks.blank_to_nil].compact.join("\n")
55
56
  end
56
57
  unless services.include? type
58
+ @source = source(position: tr.line) # TODO
57
59
  services[type] = AIXM.service(
58
- source: source(position: tr.line),
60
+ # TODO: add source as soon as it is supported by components
61
+ # source: source(position: tr.line),
59
62
  type: type
60
63
  )
61
64
  end
@@ -71,17 +74,22 @@ module AIPP
71
74
  frequency.remarks = [remarks, timetable.blank_to_nil].compact.join("\n").cleanup.blank_to_nil
72
75
  end
73
76
  )
74
- end.values.map do |service|
75
- AIXM.unit(
76
- source: service.source,
77
- organisation: organisation_lf, # TODO: not yet implemented
78
- type: (type = service.guessed_unit_type),
79
- name: "#{@id} #{AIXM::Feature::Unit::TYPES.key(type)}",
80
- class: :icao # TODO: verify whether all units are ICAO
81
- ).tap do |unit|
82
- unit.airport = @airport
83
- unit.add_service(service)
77
+ end.values.each_with_object(AIXM::Association::Array.new) do |service, units|
78
+ type = service.guessed_unit_type
79
+ unit = units.find_by(:unit, name: airport.id, type: type).first
80
+ unless unit
81
+ unit = AIXM.unit(
82
+ source: @source, # TODO
83
+ organisation: organisation_lf, # TODO: not yet implemented
84
+ type: type,
85
+ name: airport.id,
86
+ class: :icao # TODO: verify whether all units are ICAO
87
+ ).tap do |unit|
88
+ unit.airport = airport
89
+ end
90
+ units.send(:push, unit)
84
91
  end
92
+ unit.add_service(service)
85
93
  end
86
94
  end
87
95
 
@@ -19,13 +19,13 @@ module AIPP
19
19
  alias_method :tsort_each_node, :each_key
20
20
 
21
21
  def tsort_each_child(node, &block)
22
- fetch(node).each(&block)
22
+ fetch(node).each(&block)
23
23
  end
24
24
 
25
25
  def tsort(node=nil)
26
26
  if node
27
27
  subhash = subhash_for node
28
- super().select { |n| subhash.include? n }
28
+ super().select { subhash.include? _1 }
29
29
  else
30
30
  super()
31
31
  end
@@ -37,7 +37,7 @@ module AIPP
37
37
  memo.tap do |m|
38
38
  fail TSort::Cyclic if m.include? node
39
39
  m << node
40
- fetch(node).each { |n| subhash_for(n, m) }
40
+ fetch(node).each { subhash_for(_1, m) }
41
41
  end
42
42
  end
43
43
 
@@ -1,3 +1,3 @@
1
1
  module AIPP
2
- VERSION = "0.2.5".freeze
2
+ VERSION = "0.2.6".freeze
3
3
  end
@@ -5,11 +5,11 @@ module Enumerable
5
5
  # returning an array of these sub-enumerables.
6
6
  #
7
7
  # @example
8
- # [1, 2, 0, 3, 4].split { |e| e == 0 } # => [[1, 2], [3, 4]]
9
- # [1, 2, 0, 3, 4].split(0) # => [[1, 2], [3, 4]]
10
- # [0, 0, 1, 0, 2].split(0) # => [[], [] [1], [2]]
11
- # [1, 0, 0, 2, 3].split(0) # => [[1], [], [2], [3]]
12
- # [1, 0, 2, 0, 0].split(0) # => [[1], [2]]
8
+ # [1, 2, 0, 3, 4].split { _1 == 0 } # => [[1, 2], [3, 4]]
9
+ # [1, 2, 0, 3, 4].split(0) # => [[1, 2], [3, 4]]
10
+ # [0, 0, 1, 0, 2].split(0) # => [[], [] [1], [2]]
11
+ # [1, 0, 0, 2, 3].split(0) # => [[1], [], [2], [3]]
12
+ # [1, 0, 2, 0, 0].split(0) # => [[1], [2]]
13
13
  #
14
14
  # @note While similar to +Array#split+ from ActiveSupport, this core
15
15
  # extension works for all enumerables and therefore works fine with.
@@ -35,7 +35,7 @@ module Enumerable
35
35
  # an array of subsequent elements which don't match the chunk condition.
36
36
  #
37
37
  # @example
38
- # [1, 10, 11, 12, 2, 20, 21, 3, 30, 31, 32].group_by_chunks { |i| i < 10 }
38
+ # [1, 10, 11, 12, 2, 20, 21, 3, 30, 31, 32].group_by_chunks { _1 < 10 }
39
39
  # # => { 1 => [10, 11, 12], 2 => [20, 21], 3 => [30, 31, 32] }
40
40
  #
41
41
  # @note The first element must match the chunk condition.
@@ -46,7 +46,7 @@ module Enumerable
46
46
  # @return [Hash]
47
47
  def group_by_chunks
48
48
  fail(ArgumentError, "first element must match chunk condition") unless yield(first)
49
- slice_when { |_, e| yield(e) }.map { |e| [e.first, e[1..]] }.to_h
49
+ slice_when { yield(_2) }.map { [_1.first, _1[1..]] }.to_h
50
50
  end
51
51
 
52
52
  end
@@ -23,7 +23,7 @@ class String
23
23
  gsub(/[#{AIXM::MIN}]{2}|[#{AIXM::SEC}]/, '"'). # unify quotes
24
24
  gsub(/[#{AIXM::MIN}]/, "'"). # unify apostrophes
25
25
  gsub(/"[[:blank:]]*(.*?)[[:blank:]]*"/m, '"\1"'). # remove whitespace within quotes
26
- split(/\r?\n/).map { |s| s.strip.blank_to_nil }.compact.join("\n") # remove blank lines
26
+ split(/\r?\n/).map { _1.strip.blank_to_nil }.compact.join("\n") # remove blank lines
27
27
  end
28
28
 
29
29
  # Strip and collapse unnecessary whitespace
@@ -36,7 +36,7 @@ class String
36
36
  #
37
37
  # @return [String] compacted string
38
38
  def compact
39
- split("\n").map { |s| s.squish.blank_to_nil }.compact.join("\n")
39
+ split("\n").map { _1.squish.blank_to_nil }.compact.join("\n")
40
40
  end
41
41
 
42
42
  # Calculate the correlation of two strings by counting mutual words
@@ -79,8 +79,8 @@ class String
79
79
  gsub(/\b(\w)\s?(\d+)\b/, '\1\2').
80
80
  compact.
81
81
  split(/\W+/).
82
- map { |w| (i = synonyms.index(w)).nil? ? w : (i.odd? ? w : synonyms[i + 1]).upcase }.
83
- keep_if { |w| w.match?(/\w{5,}|\w\d+|[[:upper:]]/) }.
82
+ map { (i = synonyms.index(_1)).nil? ? _1 : (i.odd? ? _1 : synonyms[i + 1]).upcase }.
83
+ keep_if { _1.match?(/\w{5,}|\w\d+|[[:upper:]]/) }.
84
84
  uniq
85
85
  end
86
86
  (self_words & other_words).count
@@ -92,6 +92,11 @@ class String
92
92
  remove(/\A[^\p{L}\p{N}]*|[^\p{L}\p{N}]*\z/)
93
93
  end
94
94
 
95
+ # Similar to +scan+, but remove matches from the string
96
+ def extract(pattern)
97
+ scan(pattern).tap { remove! pattern }
98
+ end
99
+
95
100
  # Same as +to_f+ but accept both dot and comma as decimal separator
96
101
  #
97
102
  # @example
metadata CHANGED
@@ -1,317 +1,337 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aipp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sven Schwyn
8
8
  autorequire:
9
9
  bindir: exe
10
- cert_chain: []
11
- date: 2019-10-28 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MQ0wCwYDVQQDDARydWJ5
14
+ MRkwFwYKCZImiZPyLGQBGRYJYml0Y2V0ZXJhMRMwEQYKCZImiZPyLGQBGRYDY29t
15
+ MB4XDTIwMDMxNDE5NDgwNVoXDTIxMDMxNDE5NDgwNVowPzENMAsGA1UEAwwEcnVi
16
+ eTEZMBcGCgmSJomT8ixkARkWCWJpdGNldGVyYTETMBEGCgmSJomT8ixkARkWA2Nv
17
+ bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL4k2DCa8/eAFiak4Kwe
18
+ 0Iu8dk0JfHWeywjVVSNv6PtnQ96B/1jLmw5Wb+xYJSyvG6KEOzEMWA/lqO+nIrdO
19
+ 2LDRxuWojH5GROp/dtQ+SxsWlvui4cs9iBmI5Mj0mc1UgST3UFf60ry8OnyR+E9N
20
+ RVVZZykAGmxwyAqD1aq5Yt0lZMdvrGnaLWcZdKC99e812pdTN948k8Iw2GJAaNtH
21
+ Tp17XDfDNBANHjYy9xCqrxvNTfT4Bs43rPA1A77+mkPgI2Vx51u2CWA+K3hP4gAZ
22
+ F50xqnagzgXSOzCme1mC/sUUmoAAB39g2CuNocWuhv0R3/HeqdwAsA/1XpDF2NfQ
23
+ zW8CAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFDfY
24
+ gRWUI+J6nX7Po7Zq0zvDopfYMB0GA1UdEQQWMBSBEnJ1YnlAYml0Y2V0ZXJhLmNv
25
+ bTAdBgNVHRIEFjAUgRJydWJ5QGJpdGNldGVyYS5jb20wDQYJKoZIhvcNAQEFBQAD
26
+ ggEBAFsTSBbxIkTdppL8yFl0KglyUMq9DjkMwvz7ORJzHMfw1S2OmXMYnJ5fSXFu
27
+ C/9puwYMdD6V3THyqc1Rhj6RRZ/576MDwIXMgOETQfPTT6jNE+p4cRougDrQ32aV
28
+ 29WIAY21/o0FBuJZqxLDRTu6O7AHrjFnv7Kkpr1oYiR9G4MNEihyNt909nHnSixC
29
+ qn5dLDjawWVvAz5oeD1sE0Kyp6CDY8i3NfBu4aqz8uAbaEJh3jpY5NW2Lv++s7hf
30
+ EUqN8dad5Oosf9hYbfFXPzkJIIGiKMS4e1cbnAr/vadELoccfEN9tSlLuW/voNqA
31
+ 2635TmaVXxUEgIOzRhGlE1+frXI=
32
+ -----END CERTIFICATE-----
33
+ date: 2020-03-15 00:00:00.000000000 Z
12
34
  dependencies:
13
35
  - !ruby/object:Gem::Dependency
14
- name: rake
36
+ name: aixm
15
37
  requirement: !ruby/object:Gem::Requirement
16
38
  requirements:
17
39
  - - ">="
18
40
  - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
41
+ version: 0.3.10
42
+ type: :runtime
21
43
  prerelease: false
22
44
  version_requirements: !ruby/object:Gem::Requirement
23
45
  requirements:
24
46
  - - ">="
25
47
  - !ruby/object:Gem::Version
26
- version: '0'
48
+ version: 0.3.10
27
49
  - !ruby/object:Gem::Dependency
28
- name: minitest
50
+ name: activesupport
29
51
  requirement: !ruby/object:Gem::Requirement
30
52
  requirements:
31
- - - ">="
53
+ - - "~>"
32
54
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
55
+ version: '5'
56
+ type: :runtime
35
57
  prerelease: false
36
58
  version_requirements: !ruby/object:Gem::Requirement
37
59
  requirements:
38
- - - ">="
60
+ - - "~>"
39
61
  - !ruby/object:Gem::Version
40
- version: '0'
62
+ version: '5'
41
63
  - !ruby/object:Gem::Dependency
42
- name: minitest-reporters
64
+ name: nokogiri
43
65
  requirement: !ruby/object:Gem::Requirement
44
66
  requirements:
45
- - - ">="
67
+ - - "~>"
46
68
  - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
69
+ version: '1'
70
+ type: :runtime
49
71
  prerelease: false
50
72
  version_requirements: !ruby/object:Gem::Requirement
51
73
  requirements:
52
- - - ">="
74
+ - - "~>"
53
75
  - !ruby/object:Gem::Version
54
- version: '0'
76
+ version: '1'
55
77
  - !ruby/object:Gem::Dependency
56
- name: minitest-sound
78
+ name: nokogumbo
57
79
  requirement: !ruby/object:Gem::Requirement
58
80
  requirements:
59
- - - ">="
81
+ - - "~>"
60
82
  - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
83
+ version: '2'
84
+ type: :runtime
63
85
  prerelease: false
64
86
  version_requirements: !ruby/object:Gem::Requirement
65
87
  requirements:
66
- - - ">="
88
+ - - "~>"
67
89
  - !ruby/object:Gem::Version
68
- version: '0'
90
+ version: '2'
69
91
  - !ruby/object:Gem::Dependency
70
- name: minitest-focus
92
+ name: pdf-reader
71
93
  requirement: !ruby/object:Gem::Requirement
72
94
  requirements:
73
- - - ">="
95
+ - - "~>"
74
96
  - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
97
+ version: '2'
98
+ type: :runtime
77
99
  prerelease: false
78
100
  version_requirements: !ruby/object:Gem::Requirement
79
101
  requirements:
80
- - - ">="
102
+ - - "~>"
81
103
  - !ruby/object:Gem::Version
82
- version: '0'
104
+ version: '2'
83
105
  - !ruby/object:Gem::Dependency
84
- name: minitest-matchers
106
+ name: json
85
107
  requirement: !ruby/object:Gem::Requirement
86
108
  requirements:
87
- - - ">="
109
+ - - "~>"
88
110
  - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
111
+ version: '2'
112
+ type: :runtime
91
113
  prerelease: false
92
114
  version_requirements: !ruby/object:Gem::Requirement
93
115
  requirements:
94
- - - ">="
116
+ - - "~>"
95
117
  - !ruby/object:Gem::Version
96
- version: '0'
118
+ version: '2'
97
119
  - !ruby/object:Gem::Dependency
98
- name: spy
120
+ name: rubyzip
99
121
  requirement: !ruby/object:Gem::Requirement
100
122
  requirements:
101
- - - ">="
123
+ - - "~>"
102
124
  - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
125
+ version: '2'
126
+ type: :runtime
105
127
  prerelease: false
106
128
  version_requirements: !ruby/object:Gem::Requirement
107
129
  requirements:
108
- - - ">="
130
+ - - "~>"
109
131
  - !ruby/object:Gem::Version
110
- version: '0'
132
+ version: '2'
111
133
  - !ruby/object:Gem::Dependency
112
- name: guard
134
+ name: colorize
113
135
  requirement: !ruby/object:Gem::Requirement
114
136
  requirements:
115
- - - ">="
137
+ - - "~>"
116
138
  - !ruby/object:Gem::Version
117
139
  version: '0'
118
- type: :development
140
+ type: :runtime
119
141
  prerelease: false
120
142
  version_requirements: !ruby/object:Gem::Requirement
121
143
  requirements:
122
- - - ">="
144
+ - - "~>"
123
145
  - !ruby/object:Gem::Version
124
146
  version: '0'
125
147
  - !ruby/object:Gem::Dependency
126
- name: guard-minitest
148
+ name: pry
127
149
  requirement: !ruby/object:Gem::Requirement
128
150
  requirements:
129
- - - ">="
151
+ - - "~>"
130
152
  - !ruby/object:Gem::Version
131
153
  version: '0'
132
- type: :development
154
+ type: :runtime
133
155
  prerelease: false
134
156
  version_requirements: !ruby/object:Gem::Requirement
135
157
  requirements:
136
- - - ">="
158
+ - - "~>"
137
159
  - !ruby/object:Gem::Version
138
160
  version: '0'
139
161
  - !ruby/object:Gem::Dependency
140
- name: aixm
162
+ name: pry-rescue
141
163
  requirement: !ruby/object:Gem::Requirement
142
164
  requirements:
143
- - - ">="
165
+ - - "~>"
144
166
  - !ruby/object:Gem::Version
145
- version: 0.3.8
167
+ version: '1'
146
168
  type: :runtime
147
169
  prerelease: false
148
170
  version_requirements: !ruby/object:Gem::Requirement
149
171
  requirements:
150
- - - ">="
172
+ - - "~>"
151
173
  - !ruby/object:Gem::Version
152
- version: 0.3.8
174
+ version: '1'
153
175
  - !ruby/object:Gem::Dependency
154
- name: activesupport
176
+ name: pry-stack_explorer
155
177
  requirement: !ruby/object:Gem::Requirement
156
178
  requirements:
157
179
  - - "~>"
158
180
  - !ruby/object:Gem::Version
159
- version: '5'
181
+ version: '0'
160
182
  type: :runtime
161
183
  prerelease: false
162
184
  version_requirements: !ruby/object:Gem::Requirement
163
185
  requirements:
164
186
  - - "~>"
165
187
  - !ruby/object:Gem::Version
166
- version: '5'
188
+ version: '0'
167
189
  - !ruby/object:Gem::Dependency
168
- name: nokogiri
190
+ name: rake
169
191
  requirement: !ruby/object:Gem::Requirement
170
192
  requirements:
171
- - - "~>"
193
+ - - ">="
172
194
  - !ruby/object:Gem::Version
173
- version: '1'
174
- type: :runtime
195
+ version: '0'
196
+ type: :development
175
197
  prerelease: false
176
198
  version_requirements: !ruby/object:Gem::Requirement
177
199
  requirements:
178
- - - "~>"
200
+ - - ">="
179
201
  - !ruby/object:Gem::Version
180
- version: '1'
202
+ version: '0'
181
203
  - !ruby/object:Gem::Dependency
182
- name: nokogumbo
204
+ name: minitest
183
205
  requirement: !ruby/object:Gem::Requirement
184
206
  requirements:
185
- - - "~>"
207
+ - - ">="
186
208
  - !ruby/object:Gem::Version
187
- version: '2'
188
- type: :runtime
209
+ version: '0'
210
+ type: :development
189
211
  prerelease: false
190
212
  version_requirements: !ruby/object:Gem::Requirement
191
213
  requirements:
192
- - - "~>"
214
+ - - ">="
193
215
  - !ruby/object:Gem::Version
194
- version: '2'
216
+ version: '0'
195
217
  - !ruby/object:Gem::Dependency
196
- name: pdf-reader
218
+ name: minitest-reporters
197
219
  requirement: !ruby/object:Gem::Requirement
198
220
  requirements:
199
- - - "~>"
221
+ - - ">="
200
222
  - !ruby/object:Gem::Version
201
- version: '2'
202
- type: :runtime
223
+ version: '0'
224
+ type: :development
203
225
  prerelease: false
204
226
  version_requirements: !ruby/object:Gem::Requirement
205
227
  requirements:
206
- - - "~>"
228
+ - - ">="
207
229
  - !ruby/object:Gem::Version
208
- version: '2'
230
+ version: '0'
209
231
  - !ruby/object:Gem::Dependency
210
- name: json
232
+ name: minitest-sound
211
233
  requirement: !ruby/object:Gem::Requirement
212
234
  requirements:
213
- - - "~>"
235
+ - - ">="
214
236
  - !ruby/object:Gem::Version
215
- version: '2'
216
- type: :runtime
237
+ version: '0'
238
+ type: :development
217
239
  prerelease: false
218
240
  version_requirements: !ruby/object:Gem::Requirement
219
241
  requirements:
220
- - - "~>"
242
+ - - ">="
221
243
  - !ruby/object:Gem::Version
222
- version: '2'
244
+ version: '0'
223
245
  - !ruby/object:Gem::Dependency
224
- name: rubyzip
246
+ name: minitest-focus
225
247
  requirement: !ruby/object:Gem::Requirement
226
248
  requirements:
227
- - - "~>"
249
+ - - ">="
228
250
  - !ruby/object:Gem::Version
229
- version: '2'
230
- type: :runtime
251
+ version: '0'
252
+ type: :development
231
253
  prerelease: false
232
254
  version_requirements: !ruby/object:Gem::Requirement
233
255
  requirements:
234
- - - "~>"
256
+ - - ">="
235
257
  - !ruby/object:Gem::Version
236
- version: '2'
258
+ version: '0'
237
259
  - !ruby/object:Gem::Dependency
238
- name: colorize
260
+ name: minitest-matchers
239
261
  requirement: !ruby/object:Gem::Requirement
240
262
  requirements:
241
- - - "~>"
263
+ - - ">="
242
264
  - !ruby/object:Gem::Version
243
265
  version: '0'
244
- type: :runtime
266
+ type: :development
245
267
  prerelease: false
246
268
  version_requirements: !ruby/object:Gem::Requirement
247
269
  requirements:
248
- - - "~>"
270
+ - - ">="
249
271
  - !ruby/object:Gem::Version
250
272
  version: '0'
251
273
  - !ruby/object:Gem::Dependency
252
- name: pry
274
+ name: spy
253
275
  requirement: !ruby/object:Gem::Requirement
254
276
  requirements:
255
- - - "~>"
277
+ - - ">="
256
278
  - !ruby/object:Gem::Version
257
279
  version: '0'
258
- type: :runtime
280
+ type: :development
259
281
  prerelease: false
260
282
  version_requirements: !ruby/object:Gem::Requirement
261
283
  requirements:
262
- - - "~>"
284
+ - - ">="
263
285
  - !ruby/object:Gem::Version
264
286
  version: '0'
265
287
  - !ruby/object:Gem::Dependency
266
- name: pry-rescue
288
+ name: guard
267
289
  requirement: !ruby/object:Gem::Requirement
268
290
  requirements:
269
- - - "~>"
291
+ - - ">="
270
292
  - !ruby/object:Gem::Version
271
- version: '1'
272
- type: :runtime
293
+ version: '0'
294
+ type: :development
273
295
  prerelease: false
274
296
  version_requirements: !ruby/object:Gem::Requirement
275
297
  requirements:
276
- - - "~>"
298
+ - - ">="
277
299
  - !ruby/object:Gem::Version
278
- version: '1'
300
+ version: '0'
279
301
  - !ruby/object:Gem::Dependency
280
- name: pry-stack_explorer
302
+ name: guard-minitest
281
303
  requirement: !ruby/object:Gem::Requirement
282
304
  requirements:
283
- - - "~>"
305
+ - - ">="
284
306
  - !ruby/object:Gem::Version
285
307
  version: '0'
286
- type: :runtime
308
+ type: :development
287
309
  prerelease: false
288
310
  version_requirements: !ruby/object:Gem::Requirement
289
311
  requirements:
290
- - - "~>"
312
+ - - ">="
291
313
  - !ruby/object:Gem::Version
292
314
  version: '0'
293
- description: Parser for Aeronautical Information Publications (AIP).
315
+ description: |
316
+ Parse public AIP (Aeronautical Information Publication) and convert the data
317
+ to either AIXM (Aeronautical Information Exchange Model) or OFMX (Open
318
+ FlightMaps eXchange).
294
319
  email:
295
320
  - ruby@bitcetera.com
296
321
  executables:
297
322
  - aip2aixm
298
323
  - aip2ofmx
299
324
  extensions: []
300
- extra_rdoc_files: []
325
+ extra_rdoc_files:
326
+ - README.md
327
+ - CHANGELOG.md
328
+ - LICENSE.txt
301
329
  files:
302
- - ".github/workflows/test.yml"
303
- - ".gitignore"
304
- - ".ruby-version"
305
- - ".yardopts"
306
330
  - CHANGELOG.md
307
- - Guardfile
308
331
  - LICENSE.txt
309
332
  - README.md
310
- - TODO.md
311
- - aipp.gemspec
312
333
  - exe/aip2aixm
313
334
  - exe/aip2ofmx
314
- - gems.rb
315
335
  - lib/aipp.rb
316
336
  - lib/aipp/aip.rb
317
337
  - lib/aipp/airac.rb
@@ -329,6 +349,7 @@ files:
329
349
  - lib/aipp/regions/LF/ENR-4.1.rb
330
350
  - lib/aipp/regions/LF/ENR-4.3.rb
331
351
  - lib/aipp/regions/LF/ENR-5.1.rb
352
+ - lib/aipp/regions/LF/ENR-5.4.rb
332
353
  - lib/aipp/regions/LF/ENR-5.5.rb
333
354
  - lib/aipp/regions/LF/borders/france_atlantic_coast.geojson
334
355
  - lib/aipp/regions/LF/borders/france_atlantic_territorial_sea.geojson
@@ -349,72 +370,39 @@ files:
349
370
  - lib/core_ext/nil_class.rb
350
371
  - lib/core_ext/object.rb
351
372
  - lib/core_ext/string.rb
352
- - rakefile.rb
353
- - spec/fixtures/border.geojson
354
- - spec/fixtures/document.pdf
355
- - spec/fixtures/document.pdf.json
356
- - spec/fixtures/new.html
357
- - spec/fixtures/new.pdf
358
- - spec/fixtures/new.txt
359
- - spec/fixtures/source.zip
360
- - spec/lib/aipp/airac_spec.rb
361
- - spec/lib/aipp/border_spec.rb
362
- - spec/lib/aipp/downloader_spec.rb
363
- - spec/lib/aipp/patcher_spec.rb
364
- - spec/lib/aipp/pdf_spec.rb
365
- - spec/lib/aipp/t_hash_spec.rb
366
- - spec/lib/aipp/version_spec.rb
367
- - spec/lib/core_ext/enumberable_spec.rb
368
- - spec/lib/core_ext/hash_spec.rb
369
- - spec/lib/core_ext/integer_spec.rb
370
- - spec/lib/core_ext/nil_class_spec.rb
371
- - spec/lib/core_ext/string_spec.rb
372
- - spec/sounds/failure.mp3
373
- - spec/sounds/success.mp3
374
- - spec/spec_helper.rb
375
373
  homepage: https://github.com/svoop/aipp
376
374
  licenses:
377
375
  - MIT
378
- metadata: {}
376
+ metadata:
377
+ homepage_uri: https://github.com/svoop/aipp
378
+ changelog_uri: https://github.com/svoop/aipp/blob/master/CHANGELOG.md
379
+ source_code_uri: https://github.com/svoop/aipp
380
+ documentation_uri: https://www.rubydoc.info/gems/aipp
381
+ bug_tracker_uri: https://github.com/svoop/aipp/issues
379
382
  post_install_message:
380
- rdoc_options: []
383
+ rdoc_options:
384
+ - "--title"
385
+ - AIP Parser and Converter
386
+ - "--main"
387
+ - README.md
388
+ - "--line-numbers"
389
+ - "--inline-source"
390
+ - "--quiet"
381
391
  require_paths:
382
392
  - lib
383
393
  required_ruby_version: !ruby/object:Gem::Requirement
384
394
  requirements:
385
395
  - - ">="
386
396
  - !ruby/object:Gem::Version
387
- version: '2.6'
397
+ version: 2.7.0
388
398
  required_rubygems_version: !ruby/object:Gem::Requirement
389
399
  requirements:
390
400
  - - ">="
391
401
  - !ruby/object:Gem::Version
392
402
  version: '0'
393
403
  requirements: []
394
- rubygems_version: 3.0.6
404
+ rubygems_version: 3.1.2
395
405
  signing_key:
396
406
  specification_version: 4
397
- summary: Parser for Aeronautical Information Publications (AIP).
398
- test_files:
399
- - spec/fixtures/border.geojson
400
- - spec/fixtures/document.pdf
401
- - spec/fixtures/document.pdf.json
402
- - spec/fixtures/new.html
403
- - spec/fixtures/new.pdf
404
- - spec/fixtures/new.txt
405
- - spec/fixtures/source.zip
406
- - spec/lib/aipp/airac_spec.rb
407
- - spec/lib/aipp/border_spec.rb
408
- - spec/lib/aipp/downloader_spec.rb
409
- - spec/lib/aipp/patcher_spec.rb
410
- - spec/lib/aipp/pdf_spec.rb
411
- - spec/lib/aipp/t_hash_spec.rb
412
- - spec/lib/aipp/version_spec.rb
413
- - spec/lib/core_ext/enumberable_spec.rb
414
- - spec/lib/core_ext/hash_spec.rb
415
- - spec/lib/core_ext/integer_spec.rb
416
- - spec/lib/core_ext/nil_class_spec.rb
417
- - spec/lib/core_ext/string_spec.rb
418
- - spec/sounds/failure.mp3
419
- - spec/sounds/success.mp3
420
- - spec/spec_helper.rb
407
+ summary: Parser for aeronautical information publications
408
+ test_files: []