ffi-geos 1.2.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +49 -0
  3. data/.rubocop.yml +5117 -4
  4. data/FUNDING.yml +2 -0
  5. data/Gemfile +9 -16
  6. data/Guardfile +3 -4
  7. data/MIT-LICENSE +1 -1
  8. data/README.rdoc +2 -20
  9. data/Rakefile +3 -2
  10. data/ffi-geos.gemspec +7 -2
  11. data/lib/ffi-geos/buffer_params.rb +1 -1
  12. data/lib/ffi-geos/coordinate_sequence.rb +179 -177
  13. data/lib/ffi-geos/geometry.rb +118 -31
  14. data/lib/ffi-geos/geometry_collection.rb +26 -12
  15. data/lib/ffi-geos/interrupt.rb +11 -14
  16. data/lib/ffi-geos/line_string.rb +64 -49
  17. data/lib/ffi-geos/multi_line_string.rb +1 -1
  18. data/lib/ffi-geos/point.rb +18 -18
  19. data/lib/ffi-geos/polygon.rb +44 -30
  20. data/lib/ffi-geos/prepared_geometry.rb +1 -1
  21. data/lib/ffi-geos/strtree.rb +28 -30
  22. data/lib/ffi-geos/tools.rb +1 -1
  23. data/lib/ffi-geos/utils.rb +16 -23
  24. data/lib/ffi-geos/version.rb +1 -1
  25. data/lib/ffi-geos/wkb_reader.rb +1 -1
  26. data/lib/ffi-geos/wkb_writer.rb +4 -5
  27. data/lib/ffi-geos/wkt_reader.rb +1 -1
  28. data/lib/ffi-geos/wkt_writer.rb +7 -13
  29. data/lib/ffi-geos.rb +134 -48
  30. data/sonar-project.properties +16 -0
  31. data/test/coordinate_sequence_tests.rb +148 -126
  32. data/test/geometry_collection_tests.rb +41 -67
  33. data/test/geometry_tests.rb +341 -40
  34. data/test/interrupt_tests.rb +7 -7
  35. data/test/line_string_tests.rb +23 -15
  36. data/test/point_tests.rb +5 -5
  37. data/test/polygon_tests.rb +6 -7
  38. data/test/prepared_geometry_tests.rb +8 -8
  39. data/test/strtree_tests.rb +13 -12
  40. data/test/test_helper.rb +74 -56
  41. data/test/utils_tests.rb +69 -59
  42. data/test/wkb_reader_tests.rb +9 -9
  43. data/test/wkb_writer_tests.rb +14 -12
  44. data/test/wkt_reader_tests.rb +0 -1
  45. data/test/wkt_writer_tests.rb +2 -5
  46. metadata +12 -10
  47. data/.travis.yml +0 -21
data/lib/ffi-geos.rb CHANGED
@@ -50,38 +50,36 @@ module Geos
50
50
 
51
51
  module FFIGeos
52
52
  def self.search_paths
53
- @search_paths ||= begin
53
+ @search_paths ||= \
54
54
  if ENV['GEOS_LIBRARY_PATH']
55
- [ ENV['GEOS_LIBRARY_PATH'] ]
55
+ [ENV['GEOS_LIBRARY_PATH']]
56
56
  elsif FFI::Platform::IS_WINDOWS
57
57
  ENV['PATH'].split(File::PATH_SEPARATOR)
58
58
  else
59
- [ '/usr/local/{lib64,lib}', '/opt/local/{lib64,lib}', '/usr/{lib64,lib}', '/usr/lib/{x86_64,i386}-linux-gnu' ]
59
+ ['/usr/local/{lib64,lib}', '/opt/local/{lib64,lib}', '/usr/{lib64,lib}', '/usr/lib/{x86_64,i386,aarch64}-linux-gnu']
60
60
  end
61
- end
62
61
  end
63
62
 
64
63
  def self.find_lib(lib)
65
64
  if ENV['GEOS_LIBRARY_PATH'] && File.file?(ENV['GEOS_LIBRARY_PATH'])
66
65
  ENV['GEOS_LIBRARY_PATH']
67
66
  else
68
- Dir.glob(search_paths.map { |path|
67
+ Dir.glob(search_paths.map do |path|
69
68
  File.expand_path(File.join(path, "#{lib}.#{FFI::Platform::LIBSUFFIX}{,.?}"))
70
- }).first
69
+ end).first
71
70
  end
72
71
  end
73
72
 
74
73
  def self.geos_library_path
75
- @geos_library_path ||= begin
74
+ @geos_library_path ||= \
76
75
  # On MingW the libraries have version numbers
77
76
  find_lib('{lib,}geos_c{,-?}')
78
- end
79
77
  end
80
78
 
81
79
  # For backwards compatibility with older ffi-geos versions where this
82
80
  # used to return an Array.
83
81
  def self.geos_library_paths
84
- [ geos_library_path ]
82
+ [geos_library_path]
85
83
  end
86
84
 
87
85
  extend ::FFI::Library
@@ -150,10 +148,10 @@ module Geos
150
148
  :pointer,
151
149
 
152
150
  # notice callback
153
- callback([ :string, :string ], :void),
151
+ callback([:string, :string], :void),
154
152
 
155
153
  # error callback
156
- callback([ :string, :string ], :void)
154
+ callback([:string, :string], :void)
157
155
  ],
158
156
 
159
157
  finishGEOS_r: [
@@ -163,16 +161,16 @@ module Geos
163
161
  # / deprecated in GEOS 3.5.0+
164
162
 
165
163
  # GEOS 3.5.0+
166
- GEOS_init_r: [ :pointer ],
164
+ GEOS_init_r: [:pointer],
167
165
 
168
166
  GEOSContext_setNoticeMessageHandler_r: [
169
167
  # void, *handle, callback, *void
170
- :void, :pointer, callback([ :string, :string ], :void), :pointer
168
+ :void, :pointer, callback([:string, :string], :void), :pointer
171
169
  ],
172
170
 
173
171
  GEOSContext_setErrorMessageHandler_r: [
174
172
  # void, *handle, callback, *void
175
- :void, :pointer, callback([ :string, :string ], :void), :pointer
173
+ :void, :pointer, callback([:string, :string], :void), :pointer
176
174
  ],
177
175
 
178
176
  GEOS_finish_r: [
@@ -207,6 +205,21 @@ module Geos
207
205
  :pointer, :pointer, :pointer, :uint
208
206
  ],
209
207
 
208
+ GEOSPolygonize_valid_r: [
209
+ # *geom, *handle, **geoms, ngeoms
210
+ :pointer, :pointer, :pointer, :uint
211
+ ],
212
+
213
+ GEOSBuildArea_r: [
214
+ # *geom, *handle, *geom
215
+ :pointer, :pointer, :pointer
216
+ ],
217
+
218
+ GEOSMakeValid_r: [
219
+ # *geom, *handle, *geom
220
+ :pointer, :pointer, :pointer
221
+ ],
222
+
210
223
  GEOSPolygonizer_getCutEdges_r: [
211
224
  # *geom, *handle, **geoms, ngeoms
212
225
  :pointer, :pointer, :pointer, :uint
@@ -328,6 +341,11 @@ module Geos
328
341
  # 0 on exception, *handle, *coord_seq, (uint *) size
329
342
  :int, :pointer, :pointer, :pointer
330
343
  ],
344
+
345
+ GEOSCoordSeq_isCCW_r: [
346
+ # 0 on exception, *handle, *coord_seq, (char *) value
347
+ :int, :pointer, :pointer, :pointer
348
+ ],
331
349
  #### /CoordinateSequence functions ####
332
350
 
333
351
  #### Geometry functions ####
@@ -386,6 +404,11 @@ module Geos
386
404
  :pointer, :pointer, :pointer, :pointer
387
405
  ],
388
406
 
407
+ GEOSIntersectionPrec_r: [
408
+ # *geom, *handle, *geom_a, *geom_b, precision
409
+ :pointer, :pointer, :pointer, :pointer, :double
410
+ ],
411
+
389
412
  GEOSBufferWithParams_r: [
390
413
  # *geom, *handle, *geom, *params, width
391
414
  :pointer, :pointer, :pointer, :pointer, :double
@@ -422,11 +445,21 @@ module Geos
422
445
  :pointer, :pointer, :pointer, :pointer
423
446
  ],
424
447
 
448
+ GEOSDifferencePrec_r: [
449
+ # *geom, *handle, *geom_a, *geom_b, precision
450
+ :pointer, :pointer, :pointer, :pointer, :double
451
+ ],
452
+
425
453
  GEOSSymDifference_r: [
426
454
  # *geom, *handle, *geom_a, *geom_b
427
455
  :pointer, :pointer, :pointer, :pointer
428
456
  ],
429
457
 
458
+ GEOSSymDifferencePrec_r: [
459
+ # *geom, *handle, *geom_a, *geom_b, precision
460
+ :pointer, :pointer, :pointer, :pointer, :double
461
+ ],
462
+
430
463
  GEOSBoundary_r: [
431
464
  # *geom, *handle, *geom
432
465
  :pointer, :pointer, :pointer
@@ -437,11 +470,26 @@ module Geos
437
470
  :pointer, :pointer, :pointer, :pointer
438
471
  ],
439
472
 
473
+ GEOSUnionPrec_r: [
474
+ # *geom, *handle, *geom_a, *geom_b, precision
475
+ :pointer, :pointer, :pointer, :pointer, :double
476
+ ],
477
+
478
+ GEOSCoverageUnion_r: [
479
+ # *geom, *handle, *geom
480
+ :pointer, :pointer, :pointer
481
+ ],
482
+
440
483
  GEOSUnaryUnion_r: [
441
484
  # *geom, *handle, *geom
442
485
  :pointer, :pointer, :pointer
443
486
  ],
444
487
 
488
+ GEOSUnaryUnionPrec_r: [
489
+ # *geom, *handle, *geom, precision
490
+ :pointer, :pointer, :pointer, :double
491
+ ],
492
+
445
493
  GEOSNode_r: [
446
494
  # *geom, *handle, *geom
447
495
  :pointer, :pointer, :pointer
@@ -468,6 +516,11 @@ module Geos
468
516
  :pointer, :pointer, :pointer
469
517
  ],
470
518
 
519
+ GEOSMinimumBoundingCircle_r: [
520
+ # *geom, *handle, *geom, *double radius, **geom center
521
+ :pointer, :pointer, :pointer, :pointer, :pointer
522
+ ],
523
+
471
524
  GEOSEnvelope_r: [
472
525
  # *geom, *handle, *geom
473
526
  :pointer, :pointer, :pointer
@@ -478,6 +531,26 @@ module Geos
478
531
  :pointer, :pointer, :pointer
479
532
  ],
480
533
 
534
+ GEOSGeom_getXMin_r: [
535
+ # 0 on exception, *handle, (double *) value
536
+ :int, :pointer, :pointer, :pointer
537
+ ],
538
+
539
+ GEOSGeom_getXMax_r: [
540
+ # 0 on exception, *handle, (double *) value
541
+ :int, :pointer, :pointer, :pointer
542
+ ],
543
+
544
+ GEOSGeom_getYMin_r: [
545
+ # 0 on exception, *handle, (double *) value
546
+ :int, :pointer, :pointer, :pointer
547
+ ],
548
+
549
+ GEOSGeom_getYMax_r: [
550
+ # 0 on exception, *handle, (double *) value
551
+ :int, :pointer, :pointer, :pointer
552
+ ],
553
+
481
554
  GEOSSimplify_r: [
482
555
  # *geom, *handle, *geom, tolerance
483
556
  :pointer, :pointer, :pointer, :double
@@ -643,6 +716,11 @@ module Geos
643
716
  :int, :pointer, :pointer, :pointer, :pointer
644
717
  ],
645
718
 
719
+ GEOSDistanceIndexed_r: [
720
+ # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
721
+ :int, :pointer, :pointer, :pointer, :pointer
722
+ ],
723
+
646
724
  GEOSHausdorffDistance_r: [
647
725
  # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
648
726
  :int, :pointer, :pointer, :pointer, :pointer
@@ -743,6 +821,16 @@ module Geos
743
821
  :pointer, :pointer, :pointer
744
822
  ],
745
823
 
824
+ GEOSMaximumInscribedCircle_r: [
825
+ # *geom, *handle, *geom, tolerance
826
+ :pointer, :pointer, :pointer, :double
827
+ ],
828
+
829
+ GEOSLargestEmptyCircle_r: [
830
+ # *geom, *handle, *geom, *geom, tolerance
831
+ :pointer, :pointer, :pointer, :pointer, :double
832
+ ],
833
+
746
834
  GEOSMinimumWidth_r: [
747
835
  # *geom, *handle, *geom
748
836
  :pointer, :pointer, :pointer
@@ -777,12 +865,12 @@ module Geos
777
865
 
778
866
  GEOSSTRtree_query_r: [
779
867
  # void, *handle, *tree, *geom, void query_callback((void *) item, (void *) user_data), (void *) user_data
780
- :void, :pointer, :pointer, :pointer, callback([ :pointer, :pointer ], :void), :pointer
868
+ :void, :pointer, :pointer, :pointer, callback([:pointer, :pointer], :void), :pointer
781
869
  ],
782
870
 
783
871
  GEOSSTRtree_iterate_r: [
784
872
  # void, *handle, *tree, void query_callback((void *) item, (void *) user_data), (void *) user_data
785
- :void, :pointer, :pointer, callback([ :pointer, :pointer ], :void), :pointer
873
+ :void, :pointer, :pointer, callback([:pointer, :pointer], :void), :pointer
786
874
  ],
787
875
 
788
876
  GEOSSTRtree_remove_r: [
@@ -797,7 +885,7 @@ module Geos
797
885
 
798
886
  GEOSSTRtree_nearest_generic_r: [
799
887
  # *void, *handle, *tree, *item, *item_envelope, int distance_callback(*item_1, *item_2, *double, void *user_data), *user_data
800
- :pointer, :pointer, :pointer, :pointer, :pointer, callback([ :pointer, :pointer, :pointer, :pointer ], :int), :pointer
888
+ :pointer, :pointer, :pointer, :pointer, :pointer, callback([:pointer, :pointer, :pointer, :pointer], :int), :pointer
801
889
  ],
802
890
  #### /STRtree functions ####
803
891
 
@@ -1105,13 +1193,11 @@ module Geos
1105
1193
  def notice_handler=(method_or_block)
1106
1194
  @notice_handler = method_or_block
1107
1195
  FFIGeos.GEOSContext_setNoticeMessageHandler_r(@ptr, @notice_handler, nil)
1108
- @notice_handler
1109
1196
  end
1110
1197
 
1111
1198
  def error_handler=(method_or_block)
1112
1199
  @error_handler = method_or_block
1113
1200
  FFIGeos.GEOSContext_setErrorMessageHandler_r(@ptr, @error_handler, nil)
1114
- @error_handler
1115
1201
  end
1116
1202
 
1117
1203
  def notice_handler(&block)
@@ -1148,13 +1234,9 @@ module Geos
1148
1234
  FFIGeos.finishGEOS_r(ptr)
1149
1235
  end
1150
1236
 
1151
- def notice_handler
1152
- @notice_handler
1153
- end
1237
+ attr_reader :notice_handler
1154
1238
 
1155
- def error_handler
1156
- @error_handler
1157
- end
1239
+ attr_reader :error_handler
1158
1240
  end
1159
1241
 
1160
1242
  private
@@ -1170,7 +1252,7 @@ module Geos
1170
1252
 
1171
1253
  class << self
1172
1254
  def version
1173
- @version ||= FFIGeos.GEOSversion
1255
+ @version ||= FFIGeos.GEOSversion.strip
1174
1256
  end
1175
1257
 
1176
1258
  def jts_port
@@ -1281,30 +1363,34 @@ module Geos
1281
1363
  GEOS_CAPI_VERSION,
1282
1364
  GEOS_CAPI_VERSION_MAJOR, GEOS_CAPI_VERSION_MINOR, GEOS_CAPI_VERSION_PATCH,
1283
1365
  GEOS_SVN_REVISION =
1284
- if !(versions = Geos.version.scan(/^
1285
- ((\d+)\.(\d+)\.(\d+)((?:dev|rc|beta|alpha)\d*)?)
1286
- -CAPI-
1287
- ((\d+)\.(\d+)\.(\d+))
1288
- (?:\s+r?(\h+))?
1289
- $/x)).empty?
1290
- versions = versions[0]
1291
- [
1292
- versions[0],
1293
- versions[1].to_i,
1294
- versions[2].to_i,
1295
- versions[3].to_i,
1296
- versions[4],
1297
- versions[5],
1298
- versions[6].to_i,
1299
- versions[7].to_i,
1300
- versions[8].to_i,
1301
- (versions[9].to_i if versions[9])
1302
- ]
1303
- else
1304
- [ '0.0.0', 0, 0, 0, nil, '0.0.0', 0, 0, 0 ]
1305
- end
1366
+ if (versions = Geos.version.scan(/^
1367
+ ((\d+)\.(\d+)\.(\d+)((?:dev|rc|beta|alpha)\d*)?)
1368
+ -CAPI-
1369
+ ((\d+)\.(\d+)\.(\d+))
1370
+ (?:\s+r?(\h+))?
1371
+ $/x)).empty?
1372
+ ['0.0.0', 0, 0, 0, nil, '0.0.0', 0, 0, 0]
1373
+ else
1374
+ versions = versions[0]
1375
+ [
1376
+ versions[0],
1377
+ versions[1].to_i,
1378
+ versions[2].to_i,
1379
+ versions[3].to_i,
1380
+ versions[4],
1381
+ versions[5],
1382
+ versions[6].to_i,
1383
+ versions[7].to_i,
1384
+ versions[8].to_i,
1385
+ versions[9]&.to_i
1386
+ ]
1387
+ end
1306
1388
  GEOS_CAPI_FIRST_INTERFACE = GEOS_CAPI_VERSION_MAJOR.to_i
1307
1389
  GEOS_CAPI_LAST_INTERFACE = GEOS_CAPI_VERSION_MAJOR.to_i + GEOS_CAPI_VERSION_MINOR.to_i
1390
+
1391
+ GEOS_NICE_VERSION = [GEOS_VERSION_MAJOR, GEOS_VERSION_MINOR, GEOS_VERSION_PATCH].collect { |version|
1392
+ version.to_s.rjust(2, '0')
1393
+ }.join
1308
1394
  end
1309
1395
 
1310
1396
  module Constants
@@ -0,0 +1,16 @@
1
+ sonar.projectKey=dark-panda_ffi-geos
2
+ sonar.organization=dark-panda
3
+
4
+ # This is the name and version displayed in the SonarCloud UI.
5
+ sonar.projectName=ffi-geos
6
+ sonar.projectVersion=1.0
7
+
8
+ # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
9
+ sonar.sources=lib, test
10
+
11
+ # Encoding of the source code. Default is default system encoding
12
+ sonar.sourceEncoding=UTF-8
13
+
14
+ # Additional reports
15
+ sonar.ruby.rubocop.reportPaths=rubocop-report.json
16
+ sonar.ruby.coverage.reportPaths=coverage/coverage.json