notam 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NOTAM
4
+ VERSION = "0.1.0".freeze
5
+ end
data/lib/notam.rb ADDED
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aixm'
4
+ require 'i18n'
5
+ require 'countries'
6
+
7
+ require_relative "notam/version"
8
+ require_relative "notam/errors"
9
+ require_relative "notam/translation"
10
+
11
+ require_relative "notam/message"
12
+ require_relative "notam/schedule"
13
+
14
+ require_relative "notam/item"
15
+ require_relative "notam/item/header"
16
+ require_relative "notam/item/q"
17
+ require_relative "notam/item/a"
18
+ require_relative "notam/item/b"
19
+ require_relative "notam/item/c"
20
+ require_relative "notam/item/d"
21
+ require_relative "notam/item/e"
22
+ require_relative "notam/item/f"
23
+ require_relative "notam/item/g"
24
+ require_relative "notam/item/footer"
25
+
26
+ I18n.load_path << Pathname(__dir__).join('locales').glob('*.yml')
27
+ I18n.available_locales = [:en]
28
+ I18n.default_locale = :en
@@ -0,0 +1,59 @@
1
+ require 'fileutils'
2
+ require 'net/http'
3
+ require_relative '../notam/message'
4
+ require_relative '../notam/translation'
5
+
6
+ namespace :fixtures do
7
+ DEFAULT_FIRS = 'ED,LF,LO,LS'
8
+
9
+ desc "Fetch new NOTAM fixtures for comma separated informal two letter ICAO FIR codes (default: #{DEFAULT_FIRS})"
10
+ task :fetch, [:firs] do |_, args|
11
+ unless ENV['PRESERVE_FIXTURES'] && fixtures_path.glob('*.txt').any?
12
+ firs = (args[:firs] || DEFAULT_FIRS).split(/\W+/).map { NOTAM.expand_fir(_1) }.flatten
13
+ Net::HTTP.post_form(
14
+ URI('https://www.notams.faa.gov/dinsQueryWeb/queryRetrievalMapAction.do'),
15
+ actionType: 'notamRetrievalByICAOs',
16
+ reportType: 'Raw',
17
+ retrieveLocId: firs.join(' ')
18
+ ).tap do |response|
19
+ fail "bad response from DINS" unless response.code == '200'
20
+ counter = 0
21
+ response.body.scan(/<pre>(.+?)<\/pre>/im) do |message|
22
+ message = message.first
23
+ if NOTAM::Message.supported_format? message
24
+ counter += 1
25
+ id = message.split(/\s/, 2).first.sub(/\W+/, '_')
26
+ File.write(fixtures_path.join("#{id}.txt"), message)
27
+ end
28
+ end
29
+ puts "#{counter} fixtures downloaded"
30
+ end
31
+ end
32
+ end
33
+
34
+ desc "Grep all NOTAM fixtures for the given item (default: D)"
35
+ task :grep, [:item] do |_, args|
36
+ item = (args[:item] || 'D').upcase
37
+ fixtures_path.glob('*.txt').each do |fixture|
38
+ text = File.read(fixture)
39
+ if text.match(/\s(#{item}\).*?)[QA-G]\)/m)
40
+ case item
41
+ when 'D' then puts $1.gsub(/\s+/, ' ')
42
+ when 'E' then puts $1, nil
43
+ else puts $1
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ desc "Clean current test NOTAM fixtures"
50
+ task :clean do
51
+ fixtures_path.rmtree
52
+ end
53
+
54
+ def fixtures_path
55
+ Pathname(Dir.pwd).join('spec', 'fixtures').tap do |path|
56
+ path.mkdir unless path.exist?
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,11 @@
1
+ namespace :yard do
2
+ desc "Run local YARD documentation server"
3
+ task :server do
4
+ `rm -rf ./.yardoc`
5
+ Thread.new do
6
+ sleep 2
7
+ `open http://localhost:8808`
8
+ end
9
+ `yard server -r`
10
+ end
11
+ end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,259 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: notam
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sven Schwyn
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MQ0wCwYDVQQDDARydWJ5
14
+ MRkwFwYKCZImiZPyLGQBGRYJYml0Y2V0ZXJhMRMwEQYKCZImiZPyLGQBGRYDY29t
15
+ MB4XDTIxMTEwODE0MzIyM1oXDTIyMTEwODE0MzIyM1owPzENMAsGA1UEAwwEcnVi
16
+ eTEZMBcGCgmSJomT8ixkARkWCWJpdGNldGVyYTETMBEGCgmSJomT8ixkARkWA2Nv
17
+ bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANwuD4geNdhpSVNJTtHb
18
+ fmVAoPxmER4oyGgaVJSidn/OjU5PcpdypMI/WIxfvjfFizq6kQYAsJZbCr6fG+UN
19
+ 2dZGMXcAC/uKQL5nYESjCPJ4IJP/SC+fiiEpxHQk7PNFoiUVRUieUZIAfHZAdnY3
20
+ ye1/niW7ud0vwKIMrysKWxjgkE0Y6Af1QLzV/6brVRRC5MvHIzYJd8BiSP+wY1O8
21
+ VElw1f6d90KEz2vaQfX7vCxrzIbvAnYiSvM0AIPy/zigTqpW6w3w4sQxQj81oQ9U
22
+ 9vDYtQzXj0c9VrSLvb0DgiGug2cU2bDjA4L3cBE1szX4tbfo8syYqMq51/kTGDxW
23
+ YNUCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFJ8r
24
+ wy1HraZDqg3Khf9UonMWMtJUMB0GA1UdEQQWMBSBEnJ1YnlAYml0Y2V0ZXJhLmNv
25
+ bTAdBgNVHRIEFjAUgRJydWJ5QGJpdGNldGVyYS5jb20wDQYJKoZIhvcNAQEFBQAD
26
+ ggEBACI7lJKRbnRjz0T4Wb9jH4SE0A2yaHAoBzj96luVDjNyoRT3688trEZS75Sg
27
+ GKfChxqKncBrSpxJ0YfWbymNHfUrKhcdSifJ/TtUrTasm6LSnJYLOnLKDO3v8eL3
28
+ gRTq8a5wA7Xtijx3MJEyzdeUh7N+UMKuPps/flPgH5yabUxgxrvuhrXF7Z96nrsP
29
+ EOmNMTc8H7wo4BAKfuMcI/Gh2oCf+tAhr0bGsXyBikmJ6XA45mrOMgv19M1+aMpn
30
+ 1+2Y1+i+4jd1B7qxIgOLxQTNIJiwE0sqU1itFfuesfgUACS7M0IV9u9Bp4hBGNEw
31
+ 5JcY2h7owdMxXIvgk1oakgldFJc=
32
+ -----END CERTIFICATE-----
33
+ date: 2022-04-23 00:00:00.000000000 Z
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: aixm
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.1'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.1'
49
+ - !ruby/object:Gem::Dependency
50
+ name: i18n
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1'
63
+ - !ruby/object:Gem::Dependency
64
+ name: countries
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '4'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '4'
77
+ - !ruby/object:Gem::Dependency
78
+ name: rake
79
+ requirement: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ - !ruby/object:Gem::Dependency
92
+ name: debug
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ - !ruby/object:Gem::Dependency
106
+ name: minitest
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ - !ruby/object:Gem::Dependency
120
+ name: minitest-sound
121
+ requirement: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ - !ruby/object:Gem::Dependency
134
+ name: minitest-focus
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ type: :development
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ - !ruby/object:Gem::Dependency
148
+ name: guard
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ - !ruby/object:Gem::Dependency
162
+ name: guard-minitest
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: yard
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ description: 'Parser for NOTAM (Notice to Airmen) messages in Ruby.
190
+
191
+ '
192
+ email:
193
+ - ruby@bitcetera.com
194
+ executables: []
195
+ extensions: []
196
+ extra_rdoc_files:
197
+ - README.md
198
+ - CHANGELOG.md
199
+ - LICENSE.txt
200
+ files:
201
+ - CHANGELOG.md
202
+ - LICENSE.txt
203
+ - README.md
204
+ - lib/locales/en.yml
205
+ - lib/notam.rb
206
+ - lib/notam/errors.rb
207
+ - lib/notam/item.rb
208
+ - lib/notam/item/a.rb
209
+ - lib/notam/item/b.rb
210
+ - lib/notam/item/c.rb
211
+ - lib/notam/item/d.rb
212
+ - lib/notam/item/e.rb
213
+ - lib/notam/item/f.rb
214
+ - lib/notam/item/footer.rb
215
+ - lib/notam/item/g.rb
216
+ - lib/notam/item/header.rb
217
+ - lib/notam/item/q.rb
218
+ - lib/notam/message.rb
219
+ - lib/notam/schedule.rb
220
+ - lib/notam/translation.rb
221
+ - lib/notam/version.rb
222
+ - lib/tasks/fixtures.rake
223
+ - lib/tasks/yard.rake
224
+ homepage: https://github.com/svoop/notam
225
+ licenses:
226
+ - MIT
227
+ metadata:
228
+ homepage_uri: https://github.com/svoop/notam
229
+ changelog_uri: https://github.com/svoop/notam/blob/main/CHANGELOG.md
230
+ source_code_uri: https://github.com/svoop/notam
231
+ documentation_uri: https://www.rubydoc.info/gems/notam
232
+ bug_tracker_uri: https://github.com/svoop/notam/issues
233
+ post_install_message:
234
+ rdoc_options:
235
+ - "--title"
236
+ - NOTAM Parser
237
+ - "--main"
238
+ - README.md
239
+ - "--line-numbers"
240
+ - "--inline-source"
241
+ - "--quiet"
242
+ require_paths:
243
+ - lib
244
+ required_ruby_version: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: 3.0.0
249
+ required_rubygems_version: !ruby/object:Gem::Requirement
250
+ requirements:
251
+ - - ">="
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ requirements: []
255
+ rubygems_version: 3.3.12
256
+ signing_key:
257
+ specification_version: 4
258
+ summary: Parser for NOTAM (Notice to Airmen) messages
259
+ test_files: []
metadata.gz.sig ADDED
Binary file