aixm 0.1.0

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 (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -0
  5. data/CHANGELOG.md +14 -0
  6. data/Gemfile +3 -0
  7. data/Guardfile +7 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +100 -0
  10. data/Rakefile +12 -0
  11. data/aixm.gemspec +32 -0
  12. data/lib/aixm.rb +25 -0
  13. data/lib/aixm/constants.rb +6 -0
  14. data/lib/aixm/document.rb +65 -0
  15. data/lib/aixm/feature/airspace.rb +74 -0
  16. data/lib/aixm/geometry.rb +71 -0
  17. data/lib/aixm/horizontal/arc.rb +50 -0
  18. data/lib/aixm/horizontal/border.rb +45 -0
  19. data/lib/aixm/horizontal/circle.rb +53 -0
  20. data/lib/aixm/horizontal/point.rb +39 -0
  21. data/lib/aixm/refinements.rb +61 -0
  22. data/lib/aixm/schemas/4.5/AIXM-DataTypes.xsd +5231 -0
  23. data/lib/aixm/schemas/4.5/AIXM-Features.xsd +10066 -0
  24. data/lib/aixm/schemas/4.5/AIXM-Snapshot.xsd +352 -0
  25. data/lib/aixm/version.rb +3 -0
  26. data/lib/aixm/vertical/limits.rb +59 -0
  27. data/lib/aixm/xy.rb +52 -0
  28. data/lib/aixm/z.rb +39 -0
  29. data/spec/factory.rb +66 -0
  30. data/spec/lib/aixm/document_spec.rb +211 -0
  31. data/spec/lib/aixm/feature/airspace_spec.rb +96 -0
  32. data/spec/lib/aixm/geometry_spec.rb +218 -0
  33. data/spec/lib/aixm/horizontal/arc_spec.rb +69 -0
  34. data/spec/lib/aixm/horizontal/border_spec.rb +47 -0
  35. data/spec/lib/aixm/horizontal/circle_spec.rb +65 -0
  36. data/spec/lib/aixm/horizontal/point_spec.rb +42 -0
  37. data/spec/lib/aixm/refinements_spec.rb +180 -0
  38. data/spec/lib/aixm/version_spec.rb +7 -0
  39. data/spec/lib/aixm/vertical/limits_spec.rb +78 -0
  40. data/spec/lib/aixm/xy_spec.rb +131 -0
  41. data/spec/lib/aixm/z_spec.rb +59 -0
  42. data/spec/sounds/failure.mp3 +0 -0
  43. data/spec/sounds/success.mp3 +0 -0
  44. data/spec/spec_helper.rb +28 -0
  45. metadata +243 -0
@@ -0,0 +1,131 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe AIXM::XY do
4
+ describe :initialize do
5
+ it "must parse valid DD" do
6
+ subject = AIXM::XY.new(lat: 11.2233, long: 22.3344)
7
+ subject.lat.must_equal 11.2233
8
+ subject.long.must_equal 22.3344
9
+ end
10
+
11
+ it "must parse valid DMS N/E" do
12
+ subject = AIXM::XY.new(lat: %q(11°22'33"N), long: %q(22°33'44"E))
13
+ subject.lat.must_equal 11.37583333
14
+ subject.long.must_equal 22.56222222
15
+ end
16
+
17
+ it "must parse valid DMS S/W" do
18
+ subject = AIXM::XY.new(lat: %q(11°22'33"S), long: %q(22°33'44"W))
19
+ subject.lat.must_equal(-11.37583333)
20
+ subject.long.must_equal(-22.56222222)
21
+ end
22
+
23
+ it "won't parse invalid latitude" do
24
+ -> { AIXM::XY.new(lat: 91, long: 22.3344) }.must_raise ArgumentError
25
+ end
26
+
27
+ it "won't parse invalid longitude" do
28
+ -> { AIXM::XY.new(lat: 11.2233, long: 181) }.must_raise ArgumentError
29
+ end
30
+
31
+ it "won't parse invalid DMS" do
32
+ -> { AIXM::XY.new(lat: "foo", long: "bar") }.must_raise ArgumentError
33
+ end
34
+ end
35
+
36
+ describe :lat do
37
+ context "north" do
38
+ subject do
39
+ AIXM::XY.new(lat: 1.1234, long: 0)
40
+ end
41
+
42
+ it "must format DD (default) correctly" do
43
+ subject.lat.must_equal 1.1234
44
+ end
45
+
46
+ it "must format AIXM correctly" do
47
+ subject.lat(:AIXM).must_equal %q(010724.24N)
48
+ end
49
+
50
+ it "must format OFM correctly" do
51
+ subject.lat(:OFM).must_equal '1.12340000N'
52
+ end
53
+ end
54
+
55
+ context "south" do
56
+ subject do
57
+ AIXM::XY.new(lat: -1.1234, long: 0)
58
+ end
59
+
60
+ it "must format DD (default) correctly" do
61
+ subject.lat.must_equal(-1.1234)
62
+ end
63
+
64
+ it "must format AIXM correctly" do
65
+ subject.lat(:AIXM).must_equal %q(010724.24S)
66
+ end
67
+
68
+ it "must format OFM correctly" do
69
+ subject.lat(:OFM).must_equal '1.12340000S'
70
+ end
71
+ end
72
+ end
73
+
74
+ describe :long do
75
+ context "east" do
76
+ subject do
77
+ AIXM::XY.new(lat: 0, long: 1.1234)
78
+ end
79
+
80
+ it "must format DD (default) correctly" do
81
+ subject.long.must_equal 1.1234
82
+ end
83
+
84
+ it "must format AIXM correctly" do
85
+ subject.long(:AIXM).must_equal %q(0010724.24E)
86
+ end
87
+
88
+ it "must format OFM correctly" do
89
+ subject.long(:OFM).must_equal '1.12340000E'
90
+ end
91
+ end
92
+
93
+ context "west" do
94
+ subject do
95
+ AIXM::XY.new(lat: 0, long: -1.1234)
96
+ end
97
+
98
+ it "must format DD (default) correctly" do
99
+ subject.long.must_equal(-1.1234)
100
+ end
101
+
102
+ it "must format AIXM correctly" do
103
+ subject.long(:AIXM).must_equal %q(0010724.24W)
104
+ end
105
+
106
+ it "must format OFM correctly" do
107
+ subject.long(:OFM).must_equal '1.12340000W'
108
+ end
109
+ end
110
+ end
111
+
112
+ describe :== do
113
+ it "recognizes objects with identical latitude and longitude as equal" do
114
+ a = AIXM::XY.new(lat: "112233N", long: "0223344E")
115
+ b = AIXM::XY.new(lat: 11.37583333, long: 22.56222222)
116
+ a.must_equal b
117
+ end
118
+
119
+ it "recognizes objects with different latitude or longitude as unequal" do
120
+ a = AIXM::XY.new(lat: "112233.44N", long: "0223344.55E")
121
+ b = AIXM::XY.new(lat: 11, long: 22)
122
+ a.wont_equal b
123
+ end
124
+
125
+ it "recognizes objects of different class as unequal" do
126
+ a = AIXM::XY.new(lat: "112233.44N", long: "0223344.55E")
127
+ b = :oggy
128
+ a.wont_equal b
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,59 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe AIXM::Z do
4
+ describe :initialize do
5
+ it "must parse valid Q code" do
6
+ subject = AIXM::Z.new(alt: 111, code: :QNH)
7
+ subject.alt.must_equal 111
8
+ subject.code.must_equal :QNH
9
+ end
10
+
11
+ it "won't parse invalid Q code" do
12
+ -> { AIXM::Z.new(alt: 111, code: :FOO) }.must_raise ArgumentError
13
+ end
14
+ end
15
+
16
+ describe :== do
17
+ it "recognizes objects with identical altitude and Q code as equal" do
18
+ a = AIXM::Z.new(alt: 111, code: :QNH)
19
+ b = AIXM::Z.new(alt: 111, code: :QNH)
20
+ a.must_equal b
21
+ end
22
+
23
+ it "recognizes objects with different altitude or Q code as unequal" do
24
+ a = AIXM::Z.new(alt: 111, code: :QNH)
25
+ b = AIXM::Z.new(alt: 222, code: :QNH)
26
+ a.wont_equal b
27
+ end
28
+
29
+ it "recognizes objects of different class as unequal" do
30
+ a = AIXM::Z.new(alt: 111, code: :QNH)
31
+ b = :oggy
32
+ a.wont_equal b
33
+ end
34
+ end
35
+
36
+ describe :ground? do
37
+ it "must detect ground" do
38
+ AIXM::Z.new(alt: 0, code: :QFE).must_be :ground?
39
+ AIXM::Z.new(alt: 111, code: :QFE).wont_be :ground?
40
+ AIXM::Z.new(alt: 0, code: :QNH).wont_be :ground?
41
+ end
42
+ end
43
+
44
+ describe :base do
45
+ it "must return the correct base" do
46
+ AIXM::Z.new(alt: 0, code: :QFE).base.must_equal :ASFC
47
+ AIXM::Z.new(alt: 0, code: :QNH).base.must_equal :AMSL
48
+ AIXM::Z.new(alt: 0, code: :QNE).base.must_equal :AMSL
49
+ end
50
+ end
51
+
52
+ describe :unit do
53
+ it "must return the correct unit" do
54
+ AIXM::Z.new(alt: 0, code: :QFE).unit.must_equal :FT
55
+ AIXM::Z.new(alt: 0, code: :QNH).unit.must_equal :FT
56
+ AIXM::Z.new(alt: 0, code: :QNE).unit.must_equal :FL
57
+ end
58
+ end
59
+ end
Binary file
Binary file
@@ -0,0 +1,28 @@
1
+ gem 'minitest'
2
+
3
+ require 'pathname'
4
+
5
+ require 'minitest/autorun'
6
+ require Pathname(__dir__).join('..', 'lib', 'aixm')
7
+
8
+ require 'minitest/sound'
9
+ require 'minitest/sound/reporter'
10
+ Minitest::Sound.success = Pathname(__dir__).join('sounds/success.mp3').to_s
11
+ Minitest::Sound.failure = Pathname(__dir__).join('sounds/failure.mp3').to_s
12
+ require 'minitest/reporters'
13
+ Minitest::Reporters.use! [Minitest::Reporters::SpecReporter.new, Minitest::Sound::Reporter.new]
14
+
15
+ require 'minitest/matchers'
16
+ require Pathname(__dir__).join('factory')
17
+
18
+ module AIXM
19
+ def self.root
20
+ Pathname(__dir__).join('..')
21
+ end
22
+ end
23
+
24
+ class MiniTest::Spec
25
+ class << self
26
+ alias_method :context, :describe
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,243 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aixm
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
+ date: 2018-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-reporters
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-sound
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest-matchers
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-minitest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: builder
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3'
139
+ - !ruby/object:Gem::Dependency
140
+ name: nokogiri
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1'
153
+ description: Aeronautical Information Exchange Model (AIXM 4.5).
154
+ email:
155
+ - ruby@bitcetera.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - ".gitignore"
161
+ - ".ruby-version"
162
+ - ".travis.yml"
163
+ - CHANGELOG.md
164
+ - Gemfile
165
+ - Guardfile
166
+ - LICENSE.txt
167
+ - README.md
168
+ - Rakefile
169
+ - aixm.gemspec
170
+ - lib/aixm.rb
171
+ - lib/aixm/constants.rb
172
+ - lib/aixm/document.rb
173
+ - lib/aixm/feature/airspace.rb
174
+ - lib/aixm/geometry.rb
175
+ - lib/aixm/horizontal/arc.rb
176
+ - lib/aixm/horizontal/border.rb
177
+ - lib/aixm/horizontal/circle.rb
178
+ - lib/aixm/horizontal/point.rb
179
+ - lib/aixm/refinements.rb
180
+ - lib/aixm/schemas/4.5/AIXM-DataTypes.xsd
181
+ - lib/aixm/schemas/4.5/AIXM-Features.xsd
182
+ - lib/aixm/schemas/4.5/AIXM-Snapshot.xsd
183
+ - lib/aixm/version.rb
184
+ - lib/aixm/vertical/limits.rb
185
+ - lib/aixm/xy.rb
186
+ - lib/aixm/z.rb
187
+ - spec/factory.rb
188
+ - spec/lib/aixm/document_spec.rb
189
+ - spec/lib/aixm/feature/airspace_spec.rb
190
+ - spec/lib/aixm/geometry_spec.rb
191
+ - spec/lib/aixm/horizontal/arc_spec.rb
192
+ - spec/lib/aixm/horizontal/border_spec.rb
193
+ - spec/lib/aixm/horizontal/circle_spec.rb
194
+ - spec/lib/aixm/horizontal/point_spec.rb
195
+ - spec/lib/aixm/refinements_spec.rb
196
+ - spec/lib/aixm/version_spec.rb
197
+ - spec/lib/aixm/vertical/limits_spec.rb
198
+ - spec/lib/aixm/xy_spec.rb
199
+ - spec/lib/aixm/z_spec.rb
200
+ - spec/sounds/failure.mp3
201
+ - spec/sounds/success.mp3
202
+ - spec/spec_helper.rb
203
+ homepage: http://www.bitcetera.com/products/aixm
204
+ licenses:
205
+ - MIT
206
+ metadata: {}
207
+ post_install_message:
208
+ rdoc_options: []
209
+ require_paths:
210
+ - lib
211
+ required_ruby_version: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ required_rubygems_version: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ requirements: []
222
+ rubyforge_project:
223
+ rubygems_version: 2.7.3
224
+ signing_key:
225
+ specification_version: 4
226
+ summary: Aeronautical Information Exchange Model (AIXM 4.5).
227
+ test_files:
228
+ - spec/factory.rb
229
+ - spec/lib/aixm/document_spec.rb
230
+ - spec/lib/aixm/feature/airspace_spec.rb
231
+ - spec/lib/aixm/geometry_spec.rb
232
+ - spec/lib/aixm/horizontal/arc_spec.rb
233
+ - spec/lib/aixm/horizontal/border_spec.rb
234
+ - spec/lib/aixm/horizontal/circle_spec.rb
235
+ - spec/lib/aixm/horizontal/point_spec.rb
236
+ - spec/lib/aixm/refinements_spec.rb
237
+ - spec/lib/aixm/version_spec.rb
238
+ - spec/lib/aixm/vertical/limits_spec.rb
239
+ - spec/lib/aixm/xy_spec.rb
240
+ - spec/lib/aixm/z_spec.rb
241
+ - spec/sounds/failure.mp3
242
+ - spec/sounds/success.mp3
243
+ - spec/spec_helper.rb