ffi-geos 1.2.2 → 2.3.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 (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