aipp 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
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: []