aixm 0.3.8 → 0.3.10
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +1 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +33 -3
- data/README.md +166 -56
- data/exe/ckmid +14 -0
- data/exe/mkmid +14 -0
- data/lib/aixm.rb +16 -6
- data/lib/aixm/association.rb +369 -0
- data/lib/aixm/classes.rb +43 -0
- data/lib/aixm/component/fato.rb +45 -53
- data/lib/aixm/component/frequency.rb +11 -12
- data/lib/aixm/component/geometry.rb +36 -38
- data/lib/aixm/component/geometry/arc.rb +2 -2
- data/lib/aixm/component/geometry/border.rb +6 -3
- data/lib/aixm/component/geometry/circle.rb +8 -2
- data/lib/aixm/component/geometry/point.rb +8 -2
- data/lib/aixm/component/helipad.rb +30 -38
- data/lib/aixm/component/layer.rb +28 -19
- data/lib/aixm/component/lighting.rb +12 -13
- data/lib/aixm/component/runway.rb +44 -48
- data/lib/aixm/{feature → component}/service.rb +37 -36
- data/lib/aixm/component/surface.rb +3 -3
- data/lib/aixm/component/timetable.rb +2 -2
- data/lib/aixm/component/{vertical_limits.rb → vertical_limit.rb} +12 -6
- data/lib/aixm/config.rb +2 -1
- data/lib/aixm/document.rb +27 -50
- data/lib/aixm/executables.rb +85 -0
- data/lib/aixm/feature.rb +13 -3
- data/lib/aixm/feature/address.rb +12 -13
- data/lib/aixm/feature/airport.rb +103 -128
- data/lib/aixm/feature/airspace.rb +44 -17
- data/lib/aixm/feature/navigational_aid.rb +7 -9
- data/lib/aixm/feature/navigational_aid/designated_point.rb +13 -15
- data/lib/aixm/feature/navigational_aid/dme.rb +11 -12
- data/lib/aixm/feature/navigational_aid/marker.rb +7 -3
- data/lib/aixm/feature/navigational_aid/ndb.rb +7 -3
- data/lib/aixm/feature/navigational_aid/tacan.rb +7 -3
- data/lib/aixm/feature/navigational_aid/vor.rb +23 -15
- data/lib/aixm/feature/obstacle.rb +29 -43
- data/lib/aixm/feature/obstacle_group.rb +37 -34
- data/lib/aixm/feature/organisation.rb +21 -5
- data/lib/aixm/feature/unit.rb +36 -46
- data/lib/aixm/memoize.rb +89 -0
- data/lib/aixm/object.rb +9 -0
- data/lib/aixm/payload_hash.rb +114 -0
- data/lib/aixm/refinements.rb +29 -76
- data/lib/aixm/shortcuts.rb +5 -42
- data/lib/aixm/version.rb +1 -1
- data/lib/aixm/xy.rb +1 -1
- data/schemas/ofmx/0/OFMX-Features.xsd +152 -20
- data/schemas/ofmx/0/OFMX-Snapshot.xsd +0 -5
- metadata +107 -156
- metadata.gz.sig +2 -0
- data/.github/workflows/test.yml +0 -26
- data/.gitignore +0 -6
- data/.ruby-version +0 -1
- data/.yardopts +0 -3
- data/Guardfile +0 -8
- data/aixm.gemspec +0 -35
- data/gems.rb +0 -3
- data/lib/aixm/component.rb +0 -6
- data/rakefile.rb +0 -36
- data/spec/factory.rb +0 -559
- data/spec/lib/aixm/a_spec.rb +0 -203
- data/spec/lib/aixm/component/fato_spec.rb +0 -267
- data/spec/lib/aixm/component/frequency_spec.rb +0 -74
- data/spec/lib/aixm/component/geometry/arc_spec.rb +0 -73
- data/spec/lib/aixm/component/geometry/border_spec.rb +0 -38
- data/spec/lib/aixm/component/geometry/circle_spec.rb +0 -68
- data/spec/lib/aixm/component/geometry/point_spec.rb +0 -37
- data/spec/lib/aixm/component/geometry_spec.rb +0 -316
- data/spec/lib/aixm/component/helipad_spec.rb +0 -193
- data/spec/lib/aixm/component/layer_spec.rb +0 -135
- data/spec/lib/aixm/component/lighting_spec.rb +0 -94
- data/spec/lib/aixm/component/runway_spec.rb +0 -479
- data/spec/lib/aixm/component/surface_spec.rb +0 -124
- data/spec/lib/aixm/component/timetable_spec.rb +0 -47
- data/spec/lib/aixm/component/vertical_limits_spec.rb +0 -94
- data/spec/lib/aixm/config_spec.rb +0 -41
- data/spec/lib/aixm/d_spec.rb +0 -150
- data/spec/lib/aixm/document_spec.rb +0 -1884
- data/spec/lib/aixm/errors_spec.rb +0 -14
- data/spec/lib/aixm/f_spec.rb +0 -85
- data/spec/lib/aixm/feature/address_spec.rb +0 -60
- data/spec/lib/aixm/feature/airport_spec.rb +0 -776
- data/spec/lib/aixm/feature/airspace_spec.rb +0 -394
- data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +0 -103
- data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +0 -98
- data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +0 -85
- data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +0 -95
- data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +0 -94
- data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +0 -251
- data/spec/lib/aixm/feature/navigational_aid_spec.rb +0 -52
- data/spec/lib/aixm/feature/obstacle_group_spec.rb +0 -330
- data/spec/lib/aixm/feature/obstacle_spec.rb +0 -284
- data/spec/lib/aixm/feature/organisation_spec.rb +0 -83
- data/spec/lib/aixm/feature/service_spec.rb +0 -59
- data/spec/lib/aixm/feature/unit_spec.rb +0 -238
- data/spec/lib/aixm/feature_spec.rb +0 -38
- data/spec/lib/aixm/p_spec.rb +0 -189
- data/spec/lib/aixm/refinements_spec.rb +0 -430
- data/spec/lib/aixm/version_spec.rb +0 -7
- data/spec/lib/aixm/w_spec.rb +0 -150
- data/spec/lib/aixm/xy_spec.rb +0 -180
- data/spec/lib/aixm/z_spec.rb +0 -94
- data/spec/macros/marking.rb +0 -12
- data/spec/macros/organisation.rb +0 -11
- data/spec/macros/remarks.rb +0 -12
- data/spec/macros/timetable.rb +0 -11
- data/spec/macros/xy.rb +0 -11
- data/spec/macros/z_qnh.rb +0 -11
- data/spec/sounds/failure.mp3 +0 -0
- data/spec/sounds/success.mp3 +0 -0
- data/spec/spec_helper.rb +0 -62
|
@@ -1,430 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
|
|
3
|
-
using AIXM::Refinements
|
|
4
|
-
|
|
5
|
-
describe AIXM::Refinements do
|
|
6
|
-
|
|
7
|
-
context Array do
|
|
8
|
-
describe :to_digest do
|
|
9
|
-
it "must digest single string" do
|
|
10
|
-
_(%w(a).to_digest).must_equal "1f40fc92"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "must digest double string" do
|
|
14
|
-
_(%w(a b).to_digest).must_equal "3c075e5f"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "must digest integer" do
|
|
18
|
-
_([5].to_digest).must_equal "06df0537"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "must digest nested array" do
|
|
22
|
-
_([1, [2, 3]].to_digest).must_equal "e9609e81"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "must digest float" do
|
|
26
|
-
_([5.0].to_digest).must_equal "78fc651d"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "must digest boolean" do
|
|
30
|
-
_([true, false].to_digest).must_equal "79bdc67a"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "must digest nil" do
|
|
34
|
-
_([nil].to_digest).must_equal "cf83e135"
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
describe :to_uuid do
|
|
39
|
-
it "must digest single string" do
|
|
40
|
-
_(%w(a).to_uuid).must_equal "0cc175b9-c0f1-b6a8-31c3-99e269772661"
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "must digest double string" do
|
|
44
|
-
_(%w(a b).to_uuid).must_equal "d0726241-0206-76b1-4aa6-298ce6a18b21"
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "must digest integer" do
|
|
48
|
-
_([5].to_uuid).must_equal "e4da3b7f-bbce-2345-d777-2b0674a318d5"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "must digest nested array" do
|
|
52
|
-
_([1, [2, 3]].to_uuid).must_equal "02b12e93-0c8b-cc7e-92e7-4ff5d96ce118"
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "must digest float" do
|
|
56
|
-
_([5.0].to_uuid).must_equal "336669db-e720-233e-d557-7ddf81b653d3"
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "must digest boolean" do
|
|
60
|
-
_([true, false].to_uuid).must_equal "215c2d45-b491-f5c8-15ac-e782ce450fdf"
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "must digest nil" do
|
|
64
|
-
_([nil].to_uuid).must_equal "d41d8cd9-8f00-b204-e980-0998ecf8427e"
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
context Float do
|
|
70
|
-
describe :to_dms do
|
|
71
|
-
it "must convert +1. DD to DMS" do
|
|
72
|
-
_(1.37595556.to_dms).must_equal %q(001°22'33.44")
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "must convert -1. DD to DMS" do
|
|
76
|
-
_(-1.37595556.to_dms).must_equal %q(-001°22'33.44")
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "must convert +2. DD to DMS" do
|
|
80
|
-
_(11.37595556.to_dms).must_equal %q(011°22'33.44")
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "must convert -2. DD to DMS" do
|
|
84
|
-
_(-11.37595556.to_dms).must_equal %q(-011°22'33.44")
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "must convert +3. DD to DMS" do
|
|
88
|
-
_(111.37595556.to_dms).must_equal %q(111°22'33.44")
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "must convert -3. DD to DMS" do
|
|
92
|
-
_(-111.37595556.to_dms).must_equal %q(-111°22'33.44")
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "must convert DD to DMS with degrees only" do
|
|
96
|
-
_(11.0.to_dms).must_equal %q(011°00'00.00")
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "must convert DD to DMS with degrees and minutes only" do
|
|
100
|
-
_(11.36666667.to_dms).must_equal %q(011°22'00.00")
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "must convert DD to DMS with tenth of seconds only" do
|
|
104
|
-
_(1.37594444.to_dms).must_equal %q(001°22'33.40")
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "must convert DD to DMS with whole seconds only" do
|
|
108
|
-
_(1.37583333.to_dms).must_equal %q(001°22'33.00")
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "must convert DD to two zero padded DMS" do
|
|
112
|
-
_(1.37595556.to_dms(2)).must_equal %q(01°22'33.44")
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "must convert DD to no zero padded DMS" do
|
|
116
|
-
_(1.37595556.to_dms(0)).must_equal %q(1°22'33.44")
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
describe :to_rad do
|
|
121
|
-
it "must convert correctly" do
|
|
122
|
-
_(0.0.to_rad).must_equal 0
|
|
123
|
-
_(180.0.to_rad).must_equal Math::PI
|
|
124
|
-
_(-123.0.to_rad).must_equal(-2.1467549799530254)
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
context Hash do
|
|
130
|
-
describe :lookup do
|
|
131
|
-
subject do
|
|
132
|
-
{ one: 1, two: 2, three: 3, four: :three }
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
it "must return value for key if key is present" do
|
|
136
|
-
_(subject.lookup(:one)).must_equal 1
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "must return value if key is not found but value is present" do
|
|
140
|
-
_(subject.lookup(1)).must_equal 1
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
it "must return value for key if both key and value are present" do
|
|
144
|
-
_(subject.lookup(:three)).must_equal 3
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
it "returns default if neither key nor value are present" do
|
|
148
|
-
_(subject.lookup(:foo, :default)).must_equal :default
|
|
149
|
-
_(subject.lookup(:foo, nil)).must_be_nil
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
it "fails if neither key, value nor default are present" do
|
|
153
|
-
_{ subject.lookup(:foo) }.must_raise KeyError
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
context Object do
|
|
159
|
-
describe :then_if do
|
|
160
|
-
subject do
|
|
161
|
-
"foobar"
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
it "must return self if the condition is false" do
|
|
165
|
-
_(subject.then_if(false) { |s| s.gsub(/o/, 'i') }).must_equal subject
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
it "must return apply the block if the condition is true" do
|
|
169
|
-
_(subject.then_if(true) { |s| s.gsub(/o/, 'i') }).must_equal 'fiibar'
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
context Regexp do
|
|
175
|
-
describe :decapture do
|
|
176
|
-
it "should replace capture groups with non-capture groups" do
|
|
177
|
-
_(/(foo) baz (bar)/.decapture).must_equal /(?-mix:(?:foo) baz (?:bar))/
|
|
178
|
-
_(/(foo) baz (bar)/i.decapture).must_equal /(?i-mx:(?:foo) baz (?:bar))/
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
it "should replace named capture groups with non-capture groups" do
|
|
182
|
-
_(/(?<a>foo) baz (?<b>bar)/.decapture).must_equal /(?-mix:(?:foo) baz (?:bar))/
|
|
183
|
-
_(/(?<a>foo) baz (?<b>bar)/i.decapture).must_equal /(?i-mx:(?:foo) baz (?:bar))/
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "should not replace special groups" do
|
|
187
|
-
_(/(?:foo) (?<=baz) bar/.decapture).must_equal /(?-mix:(?:foo) (?<=baz) bar)/
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
it "should not replace literal round brackets" do
|
|
191
|
-
_(/\(foo\)/.decapture).must_equal /(?-mix:\(foo\))/
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
it "should replace literal backslash followed by literal round brackets" do
|
|
195
|
-
_(/\\(foo\\)/.decapture).must_equal /(?-mix:\\(?:foo\\))/
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
context String do
|
|
201
|
-
describe :indent do
|
|
202
|
-
it "must indent single line string" do
|
|
203
|
-
_('foobar'.indent(2)).must_equal ' foobar'
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
it "must indent multi line string" do
|
|
207
|
-
_("foo\nbar".indent(2)).must_equal " foo\n bar"
|
|
208
|
-
_("foo\nbar\n".indent(2)).must_equal " foo\n bar\n"
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
context "hash function" do
|
|
213
|
-
subject do
|
|
214
|
-
<<~END
|
|
215
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
216
|
-
<OFMX-Snapshot region="LF">
|
|
217
|
-
<Ser active="true" type="essential">
|
|
218
|
-
<SerUid>
|
|
219
|
-
<UniUid>
|
|
220
|
-
<txtName>STRASBOURG APP</txtName>
|
|
221
|
-
</UniUid>
|
|
222
|
-
<codeType version="1" subversion="2">APP</codeType>
|
|
223
|
-
<noSeq>1</noSeq>
|
|
224
|
-
</SerUid>
|
|
225
|
-
<Stt priority="1">
|
|
226
|
-
<codeWorkHr>H24</codeWorkHr>
|
|
227
|
-
</Stt>
|
|
228
|
-
<Stt priority="2">
|
|
229
|
-
<codeWorkHr>HX</codeWorkHr>
|
|
230
|
-
</Stt>
|
|
231
|
-
<txtRmk>aka STRASBOURG approche</txtRmk>
|
|
232
|
-
</Ser>
|
|
233
|
-
</OFMX-Snapshot>
|
|
234
|
-
END
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
describe :payload_hash do
|
|
238
|
-
it "must calculate and return the hash" do
|
|
239
|
-
_(subject.payload_hash(region: 'LF', element: 'Ser')).must_equal "269b1f18-cabe-3c9e-1d71-48a7414a4cb9"
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it "must upcase the region" do
|
|
243
|
-
_(subject.payload_hash(region: 'lf', element: 'Ser')).must_equal "269b1f18-cabe-3c9e-1d71-48a7414a4cb9"
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
it "must ignore name extensions of named associations" do
|
|
247
|
-
named_subject = subject.gsub(/<(.?)SerUid/, '<\1SerUidWithName')
|
|
248
|
-
_(named_subject.payload_hash(region: 'LF', element: 'SerUidWithName')).must_equal subject.payload_hash(region: 'LF', element: 'SerUid')
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
it "must ignore mid attributes" do
|
|
252
|
-
subject_with_mid = subject.sub(/(active="true")/, 'mid="123" \1')
|
|
253
|
-
_(subject_with_mid.payload_hash(region: 'LF', element: 'Ser')).must_equal "269b1f18-cabe-3c9e-1d71-48a7414a4cb9"
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
it "must ignore source attributes" do
|
|
257
|
-
subject_with_source = subject.sub(/(active="true")/, 'source="123" \1')
|
|
258
|
-
_(subject_with_source.payload_hash(region: 'LF', element: 'Ser')).must_equal "269b1f18-cabe-3c9e-1d71-48a7414a4cb9"
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
it "must order the element arguments alphabetically" do
|
|
262
|
-
subject_with_swap = subject.sub(/(active="true") (type="essential")/, '\2 \1')
|
|
263
|
-
_(subject_with_swap.payload_hash(region: 'LF', element: 'Ser')).must_equal "269b1f18-cabe-3c9e-1d71-48a7414a4cb9"
|
|
264
|
-
end
|
|
265
|
-
|
|
266
|
-
it "must use the first non-declaration element in string by default" do
|
|
267
|
-
_(subject.payload_hash(region: 'LF')).must_equal "fddbfb76-4868-0cd7-2afe-9f43e91867fb"
|
|
268
|
-
end
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
describe :insert_payload_hash do
|
|
272
|
-
it "must insert hash as mid attribute into element with arguments" do
|
|
273
|
-
_(subject.insert_payload_hash(region: 'LF', element: 'Ser')).must_match /<Ser mid="269b1f18-cabe-3c9e-1d71-48a7414a4cb9" active/
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
it "must insert hash as mid attribute into element without arguments" do
|
|
277
|
-
_(subject.insert_payload_hash(region: 'LF', element: 'txtRmk')).must_match /<txtRmk mid="8b23c36b-ff51-adfd-963f-03fcb012c0cf">/
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
it "must overwrite an already existing mid attribute" do
|
|
281
|
-
subject_with_mid = subject.sub(/(active="true")/, 'mid="123" \1')
|
|
282
|
-
_(subject_with_mid.insert_payload_hash(region: 'LF', element: 'Ser')).must_match /<Ser mid="269b1f18-cabe-3c9e-1d71-48a7414a4cb9" active/
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
it "must return string untouched if falsey region is passed" do
|
|
286
|
-
_(subject.insert_payload_hash(region: nil)).must_equal subject
|
|
287
|
-
end
|
|
288
|
-
end
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
describe :to_dd do
|
|
292
|
-
it "must convert +6.2 DMS to DD" do
|
|
293
|
-
_(%q(12°34'56.78"N).to_dd).must_equal 12.58243888888889
|
|
294
|
-
_(%q(12°34'56.78").to_dd).must_equal 12.58243888888889
|
|
295
|
-
_(%q(12°34'56.78'').to_dd).must_equal 12.58243888888889
|
|
296
|
-
_(%q(12 34 56.78).to_dd).must_equal 12.58243888888889
|
|
297
|
-
_(%q(123456.78N).to_dd).must_equal 12.58243888888889
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
it "must convert -6.2 DMS to DD" do
|
|
301
|
-
_(%q(12°34'56.78"S).to_dd).must_equal(-12.58243888888889)
|
|
302
|
-
_(%q(-12°34'56.78").to_dd).must_equal(-12.58243888888889)
|
|
303
|
-
_(%q(-12 34 56.78).to_dd).must_equal(-12.58243888888889)
|
|
304
|
-
_(%q(123456.78S).to_dd).must_equal(-12.58243888888889)
|
|
305
|
-
end
|
|
306
|
-
|
|
307
|
-
it "must convert +7.2 DMS to DD" do
|
|
308
|
-
_(%q(111°22'33.44"N).to_dd).must_equal 111.37595555555555
|
|
309
|
-
_(%q(111°22'33.44").to_dd).must_equal 111.37595555555555
|
|
310
|
-
_(%q(111 22 33.44).to_dd).must_equal 111.37595555555555
|
|
311
|
-
_(%q(1112233.44N).to_dd).must_equal 111.37595555555555
|
|
312
|
-
end
|
|
313
|
-
|
|
314
|
-
it "must convert -7.2 DMS to DD" do
|
|
315
|
-
_(%q(111°22'33.44"S).to_dd).must_equal(-111.37595555555555)
|
|
316
|
-
_(%q(-111°22'33.44").to_dd).must_equal(-111.37595555555555)
|
|
317
|
-
_(%q(-111 22 33.44).to_dd).must_equal(-111.37595555555555)
|
|
318
|
-
_(%q(1112233.44S).to_dd).must_equal(-111.37595555555555)
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
it "must convert +6.1 DMS to DD" do
|
|
322
|
-
_(%q(12°34'56.7"N).to_dd).must_equal 12.582416666666667
|
|
323
|
-
_(%q(12°34'56.7").to_dd).must_equal 12.582416666666667
|
|
324
|
-
_(%q(12 34 56.7).to_dd).must_equal 12.582416666666667
|
|
325
|
-
_(%q(123456.7N).to_dd).must_equal 12.582416666666667
|
|
326
|
-
end
|
|
327
|
-
|
|
328
|
-
it "must convert -6.1 DMS to DD" do
|
|
329
|
-
_(%q(12°34'56.7"S).to_dd).must_equal(-12.582416666666667)
|
|
330
|
-
_(%q(-12°34'56.7").to_dd).must_equal(-12.582416666666667)
|
|
331
|
-
_(%q(-12 34 56.7).to_dd).must_equal(-12.582416666666667)
|
|
332
|
-
_(%q(123456.7S).to_dd).must_equal(-12.582416666666667)
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
it "must convert +7.1 DMS to DD" do
|
|
336
|
-
_(%q(111°22'33.4"N).to_dd).must_equal 111.37594444444444
|
|
337
|
-
_(%q(111°22'33.4").to_dd).must_equal 111.37594444444444
|
|
338
|
-
_(%q(111 22 33.4).to_dd).must_equal 111.37594444444444
|
|
339
|
-
_(%q(1112233.4N).to_dd).must_equal 111.37594444444444
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
it "must convert -7.1 DMS to DD" do
|
|
343
|
-
_(%q(111°22'33.4"S).to_dd).must_equal(-111.37594444444444)
|
|
344
|
-
_(%q(-111°22'33.4").to_dd).must_equal(-111.37594444444444)
|
|
345
|
-
_(%q(-111 22 33.4).to_dd).must_equal(-111.37594444444444)
|
|
346
|
-
_(%q(1112233.4S).to_dd).must_equal(-111.37594444444444)
|
|
347
|
-
end
|
|
348
|
-
|
|
349
|
-
it "must convert +6.0 DMS to DD" do
|
|
350
|
-
_(%q(12°34'56"N).to_dd).must_equal 12.582222222222223
|
|
351
|
-
_(%q(12°34'56").to_dd).must_equal 12.582222222222223
|
|
352
|
-
_(%q(12 34 56).to_dd).must_equal 12.582222222222223
|
|
353
|
-
_(%q(123456N).to_dd).must_equal 12.582222222222223
|
|
354
|
-
end
|
|
355
|
-
|
|
356
|
-
it "must convert -6.0 DMS to DD" do
|
|
357
|
-
_(%q(12°34'56"S).to_dd).must_equal(-12.582222222222223)
|
|
358
|
-
_(%q(-12°34'56").to_dd).must_equal(-12.582222222222223)
|
|
359
|
-
_(%q(-12 34 56).to_dd).must_equal(-12.582222222222223)
|
|
360
|
-
_(%q(123456S).to_dd).must_equal(-12.582222222222223)
|
|
361
|
-
end
|
|
362
|
-
|
|
363
|
-
it "must convert +7.0 DMS to DD" do
|
|
364
|
-
_(%q(111°22'33"N).to_dd).must_equal 111.37583333333333
|
|
365
|
-
_(%q(111°22'33").to_dd).must_equal 111.37583333333333
|
|
366
|
-
_(%q(111 22 33).to_dd).must_equal 111.37583333333333
|
|
367
|
-
_(%q(1112233N).to_dd).must_equal 111.37583333333333
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
it "must convert -7.0 DMS to DD" do
|
|
371
|
-
_(%q(111°22'33"S).to_dd).must_equal(-111.37583333333333)
|
|
372
|
-
_(%q(-111°22'33").to_dd).must_equal(-111.37583333333333)
|
|
373
|
-
_(%q(-111 22 33).to_dd).must_equal(-111.37583333333333)
|
|
374
|
-
_(%q(1112233S).to_dd).must_equal(-111.37583333333333)
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
it "must convert all cardinal directions to DD" do
|
|
378
|
-
_(%q(111°22'33.44"N).to_dd).must_equal 111.37595555555555
|
|
379
|
-
_(%q(111°22'33.44"E).to_dd).must_equal 111.37595555555555
|
|
380
|
-
_(%q(111°22'33.44"S).to_dd).must_equal -111.37595555555555
|
|
381
|
-
_(%q(111°22'33.44"W).to_dd).must_equal -111.37595555555555
|
|
382
|
-
end
|
|
383
|
-
|
|
384
|
-
it "must ignore minor typos when converting to DD" do
|
|
385
|
-
_(%q(111°22'33,44"N).to_dd).must_equal 111.37595555555555
|
|
386
|
-
_(%q(111°22'33.44"n).to_dd).must_equal 111.37595555555555
|
|
387
|
-
_(%q(111°22"33.44"N).to_dd).must_equal 111.37595555555555
|
|
388
|
-
_(%q(111°22'33.44'N).to_dd).must_equal 111.37595555555555
|
|
389
|
-
_(%q(111°22'33.44" N).to_dd).must_equal 111.37595555555555
|
|
390
|
-
_(%q(111° 22' 33.44" N).to_dd).must_equal 111.37595555555555
|
|
391
|
-
_(%q(-111°22'33.44"S).to_dd).must_equal 111.37595555555555
|
|
392
|
-
end
|
|
393
|
-
|
|
394
|
-
it "must do all possible roundtrip conversions" do
|
|
395
|
-
if ENV['SPEC_SCOPE'] == 'all'
|
|
396
|
-
2.times.with_index do |degrees|
|
|
397
|
-
60.times.with_index do |minutes|
|
|
398
|
-
60.times.with_index do |seconds|
|
|
399
|
-
100.times.with_index do |fractions|
|
|
400
|
-
subject = %q(%03d°%02d'%02d.%02d") % [degrees, minutes, seconds, fractions]
|
|
401
|
-
_(subject.to_dd.to_dms).must_equal subject
|
|
402
|
-
end
|
|
403
|
-
end
|
|
404
|
-
end
|
|
405
|
-
end
|
|
406
|
-
else
|
|
407
|
-
skip
|
|
408
|
-
end
|
|
409
|
-
end
|
|
410
|
-
end
|
|
411
|
-
|
|
412
|
-
describe :to_time do
|
|
413
|
-
it "must convert valid dates and times" do
|
|
414
|
-
subject = '2018-01-01 17:17 +00:00'
|
|
415
|
-
_(subject.to_time).must_equal Time.parse(subject)
|
|
416
|
-
end
|
|
417
|
-
|
|
418
|
-
it "fails on invalid dates and times" do
|
|
419
|
-
subject = '2018-01-77 17:17 +00:00'
|
|
420
|
-
_{ subject.to_time }.must_raise ArgumentError
|
|
421
|
-
end
|
|
422
|
-
end
|
|
423
|
-
|
|
424
|
-
describe :uptrans do
|
|
425
|
-
it "must transliterate invalid characters" do
|
|
426
|
-
_('DÉJÀ SCHÖN'.uptrans).must_equal 'DEJA SCHOEN'
|
|
427
|
-
end
|
|
428
|
-
end
|
|
429
|
-
end
|
|
430
|
-
end
|
data/spec/lib/aixm/w_spec.rb
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
require_relative '../../spec_helper'
|
|
2
|
-
|
|
3
|
-
describe AIXM::W do
|
|
4
|
-
subject do
|
|
5
|
-
AIXM::Factory.w
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
describe :wgt= do
|
|
9
|
-
it "fails on invalid values" do
|
|
10
|
-
_([:foobar, -1]).wont_be_written_to subject, :wgt
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "converts Numeric to Float" do
|
|
14
|
-
_(subject.tap { |s| s.wgt = 5 }.wgt).must_equal 5.0
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe :unit= do
|
|
19
|
-
it "fails on invalid values" do
|
|
20
|
-
_([:foobar, 123]).wont_be_written_to subject, :unit
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "symbolizes and downcases values" do
|
|
24
|
-
_(subject.tap { |s| s.unit = "KG" }.unit).must_equal :kg
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
describe :to_kg do
|
|
29
|
-
it "leaves kilograms untouched" do
|
|
30
|
-
subject = AIXM.w(2, :kg)
|
|
31
|
-
_(subject.to_kg).must_be_same_as subject
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "converts metric tonnes to kilograms" do
|
|
35
|
-
_(AIXM.w(0.5, :t).to_kg).must_equal AIXM.w(500, :kg)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "converts pound to kilograms" do
|
|
39
|
-
_(AIXM.w(200, :lb).to_kg).must_equal AIXM.w(90.718474, :kg)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "converts US tons to kilograms" do
|
|
43
|
-
_(AIXM.w(0.5, :ton).to_kg).must_equal AIXM.w(453.59237, :kg)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
describe :to_t do
|
|
48
|
-
it "leaves metric tonnes untouched" do
|
|
49
|
-
subject = AIXM.w(2, :t)
|
|
50
|
-
_(subject.to_t).must_be_same_as subject
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "converts kilograms to metric tonnes" do
|
|
54
|
-
_(AIXM.w(10_000, :kg).to_t).must_equal AIXM.w(10, :t)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "converts pound to metric tonnes" do
|
|
58
|
-
_(AIXM.w(1000, :lb).to_t).must_equal AIXM.w(0.45359237, :t)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "converts US tons to metric tonnes" do
|
|
62
|
-
_(AIXM.w(1, :ton).to_t).must_equal AIXM.w(0.90718474, :t)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
describe :to_lb do
|
|
67
|
-
it "leaves pound untouched" do
|
|
68
|
-
subject = AIXM.w(2, :lb)
|
|
69
|
-
_(subject.to_lb).must_be_same_as subject
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "converts kilograms to pound" do
|
|
73
|
-
_(AIXM.w(50, :kg).to_lb).must_equal AIXM.w(110.2311311, :lb)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "converts metric tonnes to pound" do
|
|
77
|
-
_(AIXM.w(0.5, :t).to_lb).must_equal AIXM.w(1102.311311, :lb)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "converts US tons to pound" do
|
|
81
|
-
_(AIXM.w(0.5, :ton).to_lb).must_equal AIXM.w(1000.00000007, :lb)
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
describe :to_ton do
|
|
86
|
-
it "leaves US tons untouched" do
|
|
87
|
-
subject = AIXM.w(2, :ton)
|
|
88
|
-
_(subject.to_ton).must_be_same_as subject
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "converts kilograms to US tons" do
|
|
92
|
-
_(AIXM.w(1000, :kg).to_ton).must_equal AIXM.w(1.10231131, :ton)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "converts metrical tons to US tons" do
|
|
96
|
-
_(AIXM.w(0.5, :t).to_ton).must_equal AIXM.w(0.55115566, :ton)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "converts pound to US tons" do
|
|
100
|
-
_(AIXM.w(3000, :lb).to_ton).must_equal AIXM.w(1.5, :ton)
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
describe :<=> do
|
|
105
|
-
it "recognizes objects with identical unit and weight as equal" do
|
|
106
|
-
a = AIXM.w(123, :kg)
|
|
107
|
-
b = AIXM.w(123.0, 'KG')
|
|
108
|
-
_(a).must_equal b
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "recognizes objects with different units and converted weight as equal" do
|
|
112
|
-
a = AIXM.w(123, :kg)
|
|
113
|
-
b = AIXM.w(271.16858251, 'LB')
|
|
114
|
-
_(a).must_equal b
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it "recognizes objects with different units and identical weight as unequal" do
|
|
118
|
-
a = AIXM.w(123, :kg)
|
|
119
|
-
b = AIXM.w(123, :lb)
|
|
120
|
-
_(a).wont_equal b
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
it "recognizes objects of different class as unequal" do
|
|
124
|
-
a = AIXM.w(123, :kg)
|
|
125
|
-
b = :oggy
|
|
126
|
-
_(a).wont_equal b
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
describe :hash do
|
|
131
|
-
it "returns an integer" do
|
|
132
|
-
_(subject.hash).must_be_instance_of Integer
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
it "allows for the use of instances as hash keys" do
|
|
136
|
-
dupe = subject.dup
|
|
137
|
-
_({ subject => true }[dupe]).must_equal true
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
describe :zero? do
|
|
142
|
-
it "returns true for zero weight" do
|
|
143
|
-
_(subject.tap { |s| s.wgt = 0 }).must_be :zero?
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "returns false for non-zero weight" do
|
|
147
|
-
_(subject.tap { |s| s.wgt = 1 }).wont_be :zero?
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
end
|