aixm 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +26 -0
  3. data/.ruby-version +1 -1
  4. data/CHANGELOG.md +17 -4
  5. data/README.md +23 -5
  6. data/lib/aixm/component/fato.rb +3 -3
  7. data/lib/aixm/component/frequency.rb +1 -1
  8. data/lib/aixm/component/geometry/border.rb +9 -3
  9. data/lib/aixm/component/helipad.rb +1 -1
  10. data/lib/aixm/component/lighting.rb +1 -1
  11. data/lib/aixm/component/runway.rb +4 -7
  12. data/lib/aixm/config.rb +2 -1
  13. data/lib/aixm/document.rb +1 -0
  14. data/lib/aixm/feature/address.rb +1 -1
  15. data/lib/aixm/feature/airport.rb +13 -4
  16. data/lib/aixm/feature/airspace.rb +11 -8
  17. data/lib/aixm/feature/navigational_aid/designated_point.rb +1 -1
  18. data/lib/aixm/feature/navigational_aid/dme.rb +1 -1
  19. data/lib/aixm/feature/navigational_aid/marker.rb +1 -1
  20. data/lib/aixm/feature/navigational_aid/ndb.rb +1 -1
  21. data/lib/aixm/feature/navigational_aid/tacan.rb +1 -1
  22. data/lib/aixm/feature/navigational_aid/vor.rb +1 -1
  23. data/lib/aixm/feature/obstacle.rb +1 -1
  24. data/lib/aixm/feature/obstacle_group.rb +1 -1
  25. data/lib/aixm/feature/organisation.rb +1 -1
  26. data/lib/aixm/feature/service.rb +1 -1
  27. data/lib/aixm/feature/unit.rb +1 -1
  28. data/lib/aixm/refinements.rb +39 -8
  29. data/lib/aixm/version.rb +1 -1
  30. data/rakefile.rb +22 -8
  31. data/spec/lib/aixm/a_spec.rb +55 -55
  32. data/spec/lib/aixm/component/fato_spec.rb +30 -23
  33. data/spec/lib/aixm/component/frequency_spec.rb +12 -13
  34. data/spec/lib/aixm/component/geometry/arc_spec.rb +7 -9
  35. data/spec/lib/aixm/component/geometry/border_spec.rb +8 -3
  36. data/spec/lib/aixm/component/geometry/circle_spec.rb +6 -8
  37. data/spec/lib/aixm/component/geometry/point_spec.rb +2 -4
  38. data/spec/lib/aixm/component/geometry_spec.rb +57 -62
  39. data/spec/lib/aixm/component/helipad_spec.rb +25 -19
  40. data/spec/lib/aixm/component/layer_spec.rb +17 -19
  41. data/spec/lib/aixm/component/lighting_spec.rb +21 -15
  42. data/spec/lib/aixm/component/runway_spec.rb +44 -37
  43. data/spec/lib/aixm/component/surface_spec.rb +24 -24
  44. data/spec/lib/aixm/component/timetable_spec.rb +7 -9
  45. data/spec/lib/aixm/component/vertical_limits_spec.rb +9 -12
  46. data/spec/lib/aixm/config_spec.rb +8 -8
  47. data/spec/lib/aixm/d_spec.rb +28 -28
  48. data/spec/lib/aixm/document_spec.rb +46 -37
  49. data/spec/lib/aixm/errors_spec.rb +2 -2
  50. data/spec/lib/aixm/f_spec.rb +16 -16
  51. data/spec/lib/aixm/feature/address_spec.rb +12 -7
  52. data/spec/lib/aixm/feature/airport_spec.rb +80 -74
  53. data/spec/lib/aixm/feature/airspace_spec.rb +32 -28
  54. data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +16 -11
  55. data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +22 -16
  56. data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +13 -7
  57. data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +15 -9
  58. data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +22 -16
  59. data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +21 -15
  60. data/spec/lib/aixm/feature/navigational_aid_spec.rb +6 -6
  61. data/spec/lib/aixm/feature/obstacle_group_spec.rb +25 -21
  62. data/spec/lib/aixm/feature/obstacle_spec.rb +47 -42
  63. data/spec/lib/aixm/feature/organisation_spec.rb +16 -10
  64. data/spec/lib/aixm/feature/service_spec.rb +9 -9
  65. data/spec/lib/aixm/feature/unit_spec.rb +21 -13
  66. data/spec/lib/aixm/feature_spec.rb +5 -5
  67. data/spec/lib/aixm/p_spec.rb +37 -37
  68. data/spec/lib/aixm/refinements_spec.rb +164 -115
  69. data/spec/lib/aixm/version_spec.rb +1 -1
  70. data/spec/lib/aixm/w_spec.rb +28 -28
  71. data/spec/lib/aixm/xy_spec.rb +34 -34
  72. data/spec/lib/aixm/z_spec.rb +19 -19
  73. data/spec/macros/marking.rb +3 -3
  74. data/spec/macros/organisation.rb +2 -2
  75. data/spec/macros/remarks.rb +3 -3
  76. data/spec/macros/timetable.rb +2 -2
  77. data/spec/macros/xy.rb +2 -2
  78. data/spec/macros/z_qnh.rb +2 -2
  79. data/spec/spec_helper.rb +7 -0
  80. metadata +3 -3
  81. data/.travis.yml +0 -8
@@ -7,61 +7,61 @@ describe AIXM::Refinements do
7
7
  context Array do
8
8
  describe :to_digest do
9
9
  it "must digest single string" do
10
- %w(a).to_digest.must_equal "1f40fc92"
10
+ _(%w(a).to_digest).must_equal "1f40fc92"
11
11
  end
12
12
 
13
13
  it "must digest double string" do
14
- %w(a b).to_digest.must_equal "3c075e5f"
14
+ _(%w(a b).to_digest).must_equal "3c075e5f"
15
15
  end
16
16
 
17
17
  it "must digest integer" do
18
- [5].to_digest.must_equal "06df0537"
18
+ _([5].to_digest).must_equal "06df0537"
19
19
  end
20
20
 
21
21
  it "must digest nested array" do
22
- [1, [2, 3]].to_digest.must_equal "e9609e81"
22
+ _([1, [2, 3]].to_digest).must_equal "e9609e81"
23
23
  end
24
24
 
25
25
  it "must digest float" do
26
- [5.0].to_digest.must_equal "78fc651d"
26
+ _([5.0].to_digest).must_equal "78fc651d"
27
27
  end
28
28
 
29
29
  it "must digest boolean" do
30
- [true, false].to_digest.must_equal "79bdc67a"
30
+ _([true, false].to_digest).must_equal "79bdc67a"
31
31
  end
32
32
 
33
33
  it "must digest nil" do
34
- [nil].to_digest.must_equal "cf83e135"
34
+ _([nil].to_digest).must_equal "cf83e135"
35
35
  end
36
36
  end
37
37
 
38
38
  describe :to_uuid do
39
39
  it "must digest single string" do
40
- %w(a).to_uuid.must_equal "0cc175b9-c0f1-b6a8-31c3-99e269772661"
40
+ _(%w(a).to_uuid).must_equal "0cc175b9-c0f1-b6a8-31c3-99e269772661"
41
41
  end
42
42
 
43
43
  it "must digest double string" do
44
- %w(a b).to_uuid.must_equal "d0726241-0206-76b1-4aa6-298ce6a18b21"
44
+ _(%w(a b).to_uuid).must_equal "d0726241-0206-76b1-4aa6-298ce6a18b21"
45
45
  end
46
46
 
47
47
  it "must digest integer" do
48
- [5].to_uuid.must_equal "e4da3b7f-bbce-2345-d777-2b0674a318d5"
48
+ _([5].to_uuid).must_equal "e4da3b7f-bbce-2345-d777-2b0674a318d5"
49
49
  end
50
50
 
51
51
  it "must digest nested array" do
52
- [1, [2, 3]].to_uuid.must_equal "02b12e93-0c8b-cc7e-92e7-4ff5d96ce118"
52
+ _([1, [2, 3]].to_uuid).must_equal "02b12e93-0c8b-cc7e-92e7-4ff5d96ce118"
53
53
  end
54
54
 
55
55
  it "must digest float" do
56
- [5.0].to_uuid.must_equal "336669db-e720-233e-d557-7ddf81b653d3"
56
+ _([5.0].to_uuid).must_equal "336669db-e720-233e-d557-7ddf81b653d3"
57
57
  end
58
58
 
59
59
  it "must digest boolean" do
60
- [true, false].to_uuid.must_equal "215c2d45-b491-f5c8-15ac-e782ce450fdf"
60
+ _([true, false].to_uuid).must_equal "215c2d45-b491-f5c8-15ac-e782ce450fdf"
61
61
  end
62
62
 
63
63
  it "must digest nil" do
64
- [nil].to_uuid.must_equal "d41d8cd9-8f00-b204-e980-0998ecf8427e"
64
+ _([nil].to_uuid).must_equal "d41d8cd9-8f00-b204-e980-0998ecf8427e"
65
65
  end
66
66
  end
67
67
  end
@@ -69,59 +69,59 @@ describe AIXM::Refinements do
69
69
  context Float do
70
70
  describe :to_dms do
71
71
  it "must convert +1. DD to DMS" do
72
- 1.37595556.to_dms.must_equal %q(001°22'33.44")
72
+ _(1.37595556.to_dms).must_equal %q(001°22'33.44")
73
73
  end
74
74
 
75
75
  it "must convert -1. DD to DMS" do
76
- -1.37595556.to_dms.must_equal %q(-001°22'33.44")
76
+ _(-1.37595556.to_dms).must_equal %q(-001°22'33.44")
77
77
  end
78
78
 
79
79
  it "must convert +2. DD to DMS" do
80
- 11.37595556.to_dms.must_equal %q(011°22'33.44")
80
+ _(11.37595556.to_dms).must_equal %q(011°22'33.44")
81
81
  end
82
82
 
83
83
  it "must convert -2. DD to DMS" do
84
- -11.37595556.to_dms.must_equal %q(-011°22'33.44")
84
+ _(-11.37595556.to_dms).must_equal %q(-011°22'33.44")
85
85
  end
86
86
 
87
87
  it "must convert +3. DD to DMS" do
88
- 111.37595556.to_dms.must_equal %q(111°22'33.44")
88
+ _(111.37595556.to_dms).must_equal %q(111°22'33.44")
89
89
  end
90
90
 
91
91
  it "must convert -3. DD to DMS" do
92
- -111.37595556.to_dms.must_equal %q(-111°22'33.44")
92
+ _(-111.37595556.to_dms).must_equal %q(-111°22'33.44")
93
93
  end
94
94
 
95
95
  it "must convert DD to DMS with degrees only" do
96
- 11.0.to_dms.must_equal %q(011°00'00.00")
96
+ _(11.0.to_dms).must_equal %q(011°00'00.00")
97
97
  end
98
98
 
99
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")
100
+ _(11.36666667.to_dms).must_equal %q(011°22'00.00")
101
101
  end
102
102
 
103
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")
104
+ _(1.37594444.to_dms).must_equal %q(001°22'33.40")
105
105
  end
106
106
 
107
107
  it "must convert DD to DMS with whole seconds only" do
108
- 1.37583333.to_dms.must_equal %q(001°22'33.00")
108
+ _(1.37583333.to_dms).must_equal %q(001°22'33.00")
109
109
  end
110
110
 
111
111
  it "must convert DD to two zero padded DMS" do
112
- 1.37595556.to_dms(2).must_equal %q(01°22'33.44")
112
+ _(1.37595556.to_dms(2)).must_equal %q(01°22'33.44")
113
113
  end
114
114
 
115
115
  it "must convert DD to no zero padded DMS" do
116
- 1.37595556.to_dms(0).must_equal %q(1°22'33.44")
116
+ _(1.37595556.to_dms(0)).must_equal %q(1°22'33.44")
117
117
  end
118
118
  end
119
119
 
120
120
  describe :to_rad do
121
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)
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
125
  end
126
126
  end
127
127
  end
@@ -133,24 +133,24 @@ describe AIXM::Refinements do
133
133
  end
134
134
 
135
135
  it "must return value for key if key is present" do
136
- subject.lookup(:one).must_equal 1
136
+ _(subject.lookup(:one)).must_equal 1
137
137
  end
138
138
 
139
139
  it "must return value if key is not found but value is present" do
140
- subject.lookup(1).must_equal 1
140
+ _(subject.lookup(1)).must_equal 1
141
141
  end
142
142
 
143
143
  it "must return value for key if both key and value are present" do
144
- subject.lookup(:three).must_equal 3
144
+ _(subject.lookup(:three)).must_equal 3
145
145
  end
146
146
 
147
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
148
+ _(subject.lookup(:foo, :default)).must_equal :default
149
+ _(subject.lookup(:foo, nil)).must_be_nil
150
150
  end
151
151
 
152
152
  it "fails if neither key, value nor default are present" do
153
- -> { subject.lookup(:foo) }.must_raise KeyError
153
+ _{ subject.lookup(:foo) }.must_raise KeyError
154
154
  end
155
155
  end
156
156
  end
@@ -162,11 +162,11 @@ describe AIXM::Refinements do
162
162
  end
163
163
 
164
164
  it "must return self if the condition is false" do
165
- subject.then_if(false) { |s| s.gsub(/o/, 'i') }.must_equal subject
165
+ _(subject.then_if(false) { |s| s.gsub(/o/, 'i') }).must_equal subject
166
166
  end
167
167
 
168
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'
169
+ _(subject.then_if(true) { |s| s.gsub(/o/, 'i') }).must_equal 'fiibar'
170
170
  end
171
171
  end
172
172
  end
@@ -174,25 +174,25 @@ describe AIXM::Refinements do
174
174
  context Regexp do
175
175
  describe :decapture do
176
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))/
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
179
  end
180
180
 
181
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))/
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
184
  end
185
185
 
186
186
  it "should not replace special groups" do
187
- /(?:foo) (?<=baz) bar/.decapture.must_equal /(?-mix:(?:foo) (?<=baz) bar)/
187
+ _(/(?:foo) (?<=baz) bar/.decapture).must_equal /(?-mix:(?:foo) (?<=baz) bar)/
188
188
  end
189
189
 
190
190
  it "should not replace literal round brackets" do
191
- /\(foo\)/.decapture.must_equal /(?-mix:\(foo\))/
191
+ _(/\(foo\)/.decapture).must_equal /(?-mix:\(foo\))/
192
192
  end
193
193
 
194
194
  it "should replace literal backslash followed by literal round brackets" do
195
- /\\(foo\\)/.decapture.must_equal /(?-mix:\\(?:foo\\))/
195
+ _(/\\(foo\\)/.decapture).must_equal /(?-mix:\\(?:foo\\))/
196
196
  end
197
197
  end
198
198
  end
@@ -200,21 +200,21 @@ describe AIXM::Refinements do
200
200
  context String do
201
201
  describe :indent do
202
202
  it "must indent single line string" do
203
- 'foobar'.indent(2).must_equal ' foobar'
203
+ _('foobar'.indent(2)).must_equal ' foobar'
204
204
  end
205
205
 
206
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"
207
+ _("foo\nbar".indent(2)).must_equal " foo\n bar"
208
+ _("foo\nbar\n".indent(2)).must_equal " foo\n bar\n"
209
209
  end
210
210
  end
211
211
 
212
- describe :payload_hash do
212
+ context "hash function" do
213
213
  subject do
214
214
  <<~END
215
215
  <?xml version="1.0" encoding="utf-8"?>
216
216
  <OFMX-Snapshot region="LF">
217
- <Ser type="essential" active="true">
217
+ <Ser active="true" type="essential">
218
218
  <SerUid>
219
219
  <UniUid>
220
220
  <txtName>STRASBOURG APP</txtName>
@@ -234,112 +234,161 @@ describe AIXM::Refinements do
234
234
  END
235
235
  end
236
236
 
237
- it "must calculate the hash" do
238
- subject.payload_hash(region: 'LF', element: 'Ser').must_equal "269b1f18-cabe-3c9e-1d71-48a7414a4cb9"
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
239
288
  end
240
289
  end
241
290
 
242
291
  describe :to_dd do
243
292
  it "must convert +6.2 DMS to DD" do
244
- %q(12°34'56.78"N).to_dd.must_equal 12.58243888888889
245
- %q(12°34'56.78").to_dd.must_equal 12.58243888888889
246
- %q(12°34'56.78'').to_dd.must_equal 12.58243888888889
247
- %q(12 34 56.78).to_dd.must_equal 12.58243888888889
248
- %q(123456.78N).to_dd.must_equal 12.58243888888889
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
249
298
  end
250
299
 
251
300
  it "must convert -6.2 DMS to DD" do
252
- %q(12°34'56.78"S).to_dd.must_equal(-12.58243888888889)
253
- %q(-12°34'56.78").to_dd.must_equal(-12.58243888888889)
254
- %q(-12 34 56.78).to_dd.must_equal(-12.58243888888889)
255
- %q(123456.78S).to_dd.must_equal(-12.58243888888889)
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)
256
305
  end
257
306
 
258
307
  it "must convert +7.2 DMS to DD" do
259
- %q(111°22'33.44"N).to_dd.must_equal 111.37595555555555
260
- %q(111°22'33.44").to_dd.must_equal 111.37595555555555
261
- %q(111 22 33.44).to_dd.must_equal 111.37595555555555
262
- %q(1112233.44N).to_dd.must_equal 111.37595555555555
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
263
312
  end
264
313
 
265
314
  it "must convert -7.2 DMS to DD" do
266
- %q(111°22'33.44"S).to_dd.must_equal(-111.37595555555555)
267
- %q(-111°22'33.44").to_dd.must_equal(-111.37595555555555)
268
- %q(-111 22 33.44).to_dd.must_equal(-111.37595555555555)
269
- %q(1112233.44S).to_dd.must_equal(-111.37595555555555)
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)
270
319
  end
271
320
 
272
321
  it "must convert +6.1 DMS to DD" do
273
- %q(12°34'56.7"N).to_dd.must_equal 12.582416666666667
274
- %q(12°34'56.7").to_dd.must_equal 12.582416666666667
275
- %q(12 34 56.7).to_dd.must_equal 12.582416666666667
276
- %q(123456.7N).to_dd.must_equal 12.582416666666667
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
277
326
  end
278
327
 
279
328
  it "must convert -6.1 DMS to DD" do
280
- %q(12°34'56.7"S).to_dd.must_equal(-12.582416666666667)
281
- %q(-12°34'56.7").to_dd.must_equal(-12.582416666666667)
282
- %q(-12 34 56.7).to_dd.must_equal(-12.582416666666667)
283
- %q(123456.7S).to_dd.must_equal(-12.582416666666667)
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)
284
333
  end
285
334
 
286
335
  it "must convert +7.1 DMS to DD" do
287
- %q(111°22'33.4"N).to_dd.must_equal 111.37594444444444
288
- %q(111°22'33.4").to_dd.must_equal 111.37594444444444
289
- %q(111 22 33.4).to_dd.must_equal 111.37594444444444
290
- %q(1112233.4N).to_dd.must_equal 111.37594444444444
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
291
340
  end
292
341
 
293
342
  it "must convert -7.1 DMS to DD" do
294
- %q(111°22'33.4"S).to_dd.must_equal(-111.37594444444444)
295
- %q(-111°22'33.4").to_dd.must_equal(-111.37594444444444)
296
- %q(-111 22 33.4).to_dd.must_equal(-111.37594444444444)
297
- %q(1112233.4S).to_dd.must_equal(-111.37594444444444)
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)
298
347
  end
299
348
 
300
349
  it "must convert +6.0 DMS to DD" do
301
- %q(12°34'56"N).to_dd.must_equal 12.582222222222223
302
- %q(12°34'56").to_dd.must_equal 12.582222222222223
303
- %q(12 34 56).to_dd.must_equal 12.582222222222223
304
- %q(123456N).to_dd.must_equal 12.582222222222223
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
305
354
  end
306
355
 
307
356
  it "must convert -6.0 DMS to DD" do
308
- %q(12°34'56"S).to_dd.must_equal(-12.582222222222223)
309
- %q(-12°34'56").to_dd.must_equal(-12.582222222222223)
310
- %q(-12 34 56).to_dd.must_equal(-12.582222222222223)
311
- %q(123456S).to_dd.must_equal(-12.582222222222223)
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)
312
361
  end
313
362
 
314
363
  it "must convert +7.0 DMS to DD" do
315
- %q(111°22'33"N).to_dd.must_equal 111.37583333333333
316
- %q(111°22'33").to_dd.must_equal 111.37583333333333
317
- %q(111 22 33).to_dd.must_equal 111.37583333333333
318
- %q(1112233N).to_dd.must_equal 111.37583333333333
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
319
368
  end
320
369
 
321
370
  it "must convert -7.0 DMS to DD" do
322
- %q(111°22'33"S).to_dd.must_equal(-111.37583333333333)
323
- %q(-111°22'33").to_dd.must_equal(-111.37583333333333)
324
- %q(-111 22 33).to_dd.must_equal(-111.37583333333333)
325
- %q(1112233S).to_dd.must_equal(-111.37583333333333)
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)
326
375
  end
327
376
 
328
377
  it "must convert all cardinal directions to DD" do
329
- %q(111°22'33.44"N).to_dd.must_equal 111.37595555555555
330
- %q(111°22'33.44"E).to_dd.must_equal 111.37595555555555
331
- %q(111°22'33.44"S).to_dd.must_equal -111.37595555555555
332
- %q(111°22'33.44"W).to_dd.must_equal -111.37595555555555
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
333
382
  end
334
383
 
335
384
  it "must ignore minor typos when converting to DD" do
336
- %q(111°22'33,44"N).to_dd.must_equal 111.37595555555555
337
- %q(111°22'33.44"n).to_dd.must_equal 111.37595555555555
338
- %q(111°22"33.44"N).to_dd.must_equal 111.37595555555555
339
- %q(111°22'33.44'N).to_dd.must_equal 111.37595555555555
340
- %q(111°22'33.44" N).to_dd.must_equal 111.37595555555555
341
- %q(111° 22' 33.44" N).to_dd.must_equal 111.37595555555555
342
- %q(-111°22'33.44"S).to_dd.must_equal 111.37595555555555
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
343
392
  end
344
393
 
345
394
  it "must do all possible roundtrip conversions" do
@@ -349,7 +398,7 @@ describe AIXM::Refinements do
349
398
  60.times.with_index do |seconds|
350
399
  100.times.with_index do |fractions|
351
400
  subject = %q(%03d°%02d'%02d.%02d") % [degrees, minutes, seconds, fractions]
352
- subject.to_dd.to_dms.must_equal subject
401
+ _(subject.to_dd.to_dms).must_equal subject
353
402
  end
354
403
  end
355
404
  end
@@ -363,18 +412,18 @@ describe AIXM::Refinements do
363
412
  describe :to_time do
364
413
  it "must convert valid dates and times" do
365
414
  subject = '2018-01-01 17:17 +00:00'
366
- subject.to_time.must_equal Time.parse(subject)
415
+ _(subject.to_time).must_equal Time.parse(subject)
367
416
  end
368
417
 
369
418
  it "fails on invalid dates and times" do
370
419
  subject = '2018-01-77 17:17 +00:00'
371
- -> { subject.to_time }.must_raise ArgumentError
420
+ _{ subject.to_time }.must_raise ArgumentError
372
421
  end
373
422
  end
374
423
 
375
424
  describe :uptrans do
376
425
  it "must transliterate invalid characters" do
377
- 'DÉJÀ SCHÖN'.uptrans.must_equal 'DEJA SCHOEN'
426
+ _('DÉJÀ SCHÖN'.uptrans).must_equal 'DEJA SCHOEN'
378
427
  end
379
428
  end
380
429
  end