ffi-geos 2.1.0 → 2.3.1
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
- data/.github/workflows/main.yml +49 -0
- data/.rubocop-minitest.yml +217 -0
- data/.rubocop.yml +1344 -175
- data/.rubocop_todo.yml +99 -0
- data/FUNDING.yml +2 -0
- data/Gemfile +5 -8
- data/MIT-LICENSE +1 -1
- data/ffi-geos.gemspec +5 -0
- data/lib/ffi-geos/buffer_params.rb +1 -1
- data/lib/ffi-geos/coordinate_sequence.rb +32 -32
- data/lib/ffi-geos/geometry.rb +51 -15
- data/lib/ffi-geos/geometry_collection.rb +4 -4
- data/lib/ffi-geos/line_string.rb +10 -10
- data/lib/ffi-geos/multi_line_string.rb +1 -1
- data/lib/ffi-geos/point.rb +4 -4
- data/lib/ffi-geos/polygon.rb +4 -4
- data/lib/ffi-geos/prepared_geometry.rb +1 -1
- data/lib/ffi-geos/strtree.rb +26 -26
- data/lib/ffi-geos/utils.rb +12 -11
- data/lib/ffi-geos/version.rb +1 -1
- data/lib/ffi-geos/wkb_reader.rb +1 -1
- data/lib/ffi-geos/wkb_writer.rb +2 -2
- data/lib/ffi-geos/wkt_reader.rb +1 -1
- data/lib/ffi-geos/wkt_writer.rb +3 -6
- data/lib/ffi-geos.rb +51 -8
- data/sonar-project.properties +4 -4
- data/test/coordinate_sequence_tests.rb +8 -8
- data/test/geometry_collection_tests.rb +6 -5
- data/test/geometry_tests.rb +239 -27
- data/test/line_string_tests.rb +13 -5
- data/test/point_tests.rb +3 -3
- data/test/polygon_tests.rb +3 -3
- data/test/strtree_tests.rb +8 -7
- data/test/test_helper.rb +67 -28
- metadata +13 -9
- data/.travis.yml +0 -33
data/test/test_helper.rb
CHANGED
@@ -9,6 +9,12 @@ SimpleCov.start do
|
|
9
9
|
add_filter '/.bundle/'
|
10
10
|
end
|
11
11
|
|
12
|
+
if ENV['CI']
|
13
|
+
require 'simplecov_json_formatter'
|
14
|
+
|
15
|
+
SimpleCov.formatter = SimpleCov::Formatter::JSONFormatter
|
16
|
+
end
|
17
|
+
|
12
18
|
require 'rubygems'
|
13
19
|
require 'minitest/autorun'
|
14
20
|
require 'minitest/reporters'
|
@@ -23,23 +29,28 @@ puts "Ruby version #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} - #{RbConfig::CONFIG['RUB
|
|
23
29
|
puts "ffi version #{Gem.loaded_specs['ffi'].version}" if Gem.loaded_specs['ffi']
|
24
30
|
|
25
31
|
if Geos.respond_to?(:version)
|
26
|
-
puts "GEOS version #{Geos.version}"
|
32
|
+
puts "GEOS version #{Geos.version} (#{Geos::GEOS_NICE_VERSION})"
|
27
33
|
else
|
28
|
-
puts "GEOS version #{Geos::GEOS_VERSION}"
|
34
|
+
puts "GEOS version #{Geos::GEOS_VERSION} (#{Geos::GEOS_NICE_VERSION})"
|
29
35
|
end
|
30
36
|
|
31
37
|
puts "ffi-geos version #{Geos::VERSION}" if defined?(Geos::VERSION)
|
32
38
|
puts "Using #{Geos::FFIGeos.geos_library_path}" if defined?(Geos::FFIGeos)
|
39
|
+
puts "Process #{$PID}"
|
33
40
|
|
34
41
|
module TestHelper
|
35
42
|
TOLERANCE = 0.0000000000001
|
36
43
|
|
37
|
-
EMPTY_GEOMETRY = if Geos::
|
44
|
+
EMPTY_GEOMETRY = if Geos::GEOS_NICE_VERSION >= '030800'
|
38
45
|
'POINT EMPTY'
|
39
46
|
else
|
40
47
|
'GEOMETRYCOLLECTION EMPTY'
|
41
48
|
end
|
42
49
|
|
50
|
+
EMPTY_BLOCK = proc do
|
51
|
+
# no-op
|
52
|
+
end
|
53
|
+
|
43
54
|
def self.included(base)
|
44
55
|
base.class_eval do
|
45
56
|
attr_reader :reader, :reader_hex, :writer
|
@@ -53,16 +64,16 @@ module TestHelper
|
|
53
64
|
@writer = Geos::WktWriter.new
|
54
65
|
end
|
55
66
|
|
56
|
-
def read(*args)
|
57
|
-
if args[0][0]
|
58
|
-
|
67
|
+
def read(*args, **options)
|
68
|
+
if args[0][0] == '0'
|
69
|
+
reader_hex.read_hex(*args, **options)
|
59
70
|
else
|
60
|
-
|
71
|
+
reader.read(*args, **options)
|
61
72
|
end
|
62
73
|
end
|
63
74
|
|
64
|
-
def write(*args)
|
65
|
-
writer.write(*args)
|
75
|
+
def write(*args, **options)
|
76
|
+
writer.write(*args, **options)
|
66
77
|
end
|
67
78
|
|
68
79
|
def geom_from_geom_or_wkt(geom_or_wkt)
|
@@ -73,11 +84,12 @@ module TestHelper
|
|
73
84
|
end
|
74
85
|
end
|
75
86
|
|
76
|
-
def srid_copy_tester(method, expected, expected_srid, srid_policy, wkt, *args)
|
87
|
+
def srid_copy_tester(method, expected, expected_srid, srid_policy, wkt, *args, **options)
|
77
88
|
geom = read(wkt)
|
78
89
|
geom.srid = 4326
|
79
90
|
Geos.srid_copy_policy = srid_policy
|
80
|
-
|
91
|
+
|
92
|
+
geom_b = geom.__safe_send__(method, *args, **options)
|
81
93
|
assert_equal(4326, geom.srid)
|
82
94
|
assert_equal(expected_srid, geom_b.srid)
|
83
95
|
assert_equal(expected, write(geom_b))
|
@@ -108,44 +120,49 @@ module TestHelper
|
|
108
120
|
assert(geom.eql_exact?(result, tolerance), "Expected geom.eql_exact? to be within #{tolerance}")
|
109
121
|
end
|
110
122
|
|
111
|
-
def snapped_tester(method, expected, geom, *args)
|
123
|
+
def snapped_tester(method, expected, geom, *args, **options)
|
112
124
|
geom = geom_from_geom_or_wkt(geom)
|
113
125
|
|
114
|
-
result = geom.
|
126
|
+
result = geom.__safe_send__(method, *args, **options)
|
115
127
|
assert_equal(expected, write(result.snap_to_grid(1)))
|
116
128
|
end
|
117
129
|
|
118
|
-
def simple_tester(method, expected, geom, *args)
|
130
|
+
def simple_tester(method, expected, geom, *args, **options)
|
119
131
|
geom = geom_from_geom_or_wkt(geom)
|
120
|
-
|
132
|
+
|
133
|
+
result = geom.__safe_send__(method, *args, **options)
|
121
134
|
result = write(result) if result.is_a?(Geos::Geometry)
|
122
135
|
|
123
|
-
|
136
|
+
if expected.nil?
|
137
|
+
assert_nil(result)
|
138
|
+
else
|
139
|
+
assert_equal(expected, result)
|
140
|
+
end
|
124
141
|
end
|
125
142
|
|
126
|
-
def simple_bang_tester(method, expected, wkt, *args)
|
143
|
+
def simple_bang_tester(method, expected, wkt, *args, **options)
|
127
144
|
geom = read(wkt)
|
128
|
-
result = geom.
|
145
|
+
result = geom.__safe_send__(method, *args, **options)
|
129
146
|
|
130
147
|
assert_equal(wkt, write(geom))
|
131
148
|
assert_equal(expected, write(result))
|
132
149
|
|
133
150
|
geom = read(wkt)
|
134
|
-
geom.
|
151
|
+
geom.__safe_send__("#{method}!", *args, **options)
|
135
152
|
|
136
153
|
assert_equal(expected, write(geom))
|
137
154
|
end
|
138
155
|
|
139
|
-
def comparison_tester(method, expected, geom_a, geom_b, *args)
|
140
|
-
geom_a = geom_from_geom_or_wkt(geom_a)
|
141
|
-
geom_b = geom_from_geom_or_wkt(geom_b)
|
156
|
+
def comparison_tester(method, expected, geom_a, geom_b, *args, **options)
|
157
|
+
geom_a = geom_from_geom_or_wkt(geom_a).normalize
|
158
|
+
geom_b = geom_from_geom_or_wkt(geom_b).normalize
|
142
159
|
|
143
|
-
simple_tester(method, expected, geom_a, geom_b, *args)
|
160
|
+
simple_tester(method, expected, geom_a, geom_b, *args, **options)
|
144
161
|
end
|
145
162
|
|
146
|
-
def array_tester(method, expected, geom, *args)
|
163
|
+
def array_tester(method, expected, geom, *args, **options)
|
147
164
|
geom = geom_from_geom_or_wkt(geom)
|
148
|
-
result = geom.
|
165
|
+
result = geom.__safe_send__(method, *args, **options)
|
149
166
|
|
150
167
|
case result
|
151
168
|
when Geos::Geometry
|
@@ -159,20 +176,42 @@ module TestHelper
|
|
159
176
|
assert_equal(expected, result)
|
160
177
|
end
|
161
178
|
|
162
|
-
def affine_tester(method, expected, wkt, *args)
|
179
|
+
def affine_tester(method, expected, wkt, *args, **options)
|
163
180
|
writer.trim = true
|
164
181
|
|
165
182
|
geom = read(wkt)
|
166
|
-
geom.
|
183
|
+
geom.__safe_send__("#{method}!", *args, **options).snap_to_grid!(0.1)
|
167
184
|
|
168
185
|
assert_equal(expected, write(geom))
|
169
186
|
|
170
187
|
geom = read(wkt)
|
171
|
-
geom_2 = geom.
|
188
|
+
geom_2 = geom.__safe_send__(method, *args, **options).snap_to_grid(0.1)
|
172
189
|
|
173
190
|
assert_equal(wkt, write(geom))
|
174
191
|
assert_equal(expected, write(geom_2, trim: true))
|
175
192
|
end
|
176
193
|
end
|
177
194
|
|
195
|
+
class Object
|
196
|
+
if RUBY_VERSION >= '2.7'
|
197
|
+
def __safe_send__(method_name, *args, **kwargs)
|
198
|
+
send(method_name, *args, **kwargs)
|
199
|
+
end
|
200
|
+
else
|
201
|
+
def __safe_send__(method_name, *args, **kwargs)
|
202
|
+
raise NoMethodError unless respond_to?(method_name)
|
203
|
+
|
204
|
+
arity = method(method_name).arity
|
205
|
+
|
206
|
+
if arity.zero?
|
207
|
+
send(method_name)
|
208
|
+
elsif arity.negative? && !kwargs.empty?
|
209
|
+
send(method_name, *args, **kwargs)
|
210
|
+
else
|
211
|
+
send(method_name, *args)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
178
217
|
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-geos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- J Smith
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -31,9 +31,12 @@ extensions: []
|
|
31
31
|
extra_rdoc_files:
|
32
32
|
- README.rdoc
|
33
33
|
files:
|
34
|
+
- ".github/workflows/main.yml"
|
34
35
|
- ".gitignore"
|
36
|
+
- ".rubocop-minitest.yml"
|
35
37
|
- ".rubocop.yml"
|
36
|
-
- ".
|
38
|
+
- ".rubocop_todo.yml"
|
39
|
+
- FUNDING.yml
|
37
40
|
- Gemfile
|
38
41
|
- Guardfile
|
39
42
|
- MIT-LICENSE
|
@@ -86,8 +89,9 @@ files:
|
|
86
89
|
homepage: http://github.com/dark-panda/ffi-geos
|
87
90
|
licenses:
|
88
91
|
- MIT
|
89
|
-
metadata:
|
90
|
-
|
92
|
+
metadata:
|
93
|
+
rubygems_mfa_required: 'true'
|
94
|
+
post_install_message:
|
91
95
|
rdoc_options: []
|
92
96
|
require_paths:
|
93
97
|
- lib
|
@@ -95,15 +99,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
99
|
requirements:
|
96
100
|
- - ">="
|
97
101
|
- !ruby/object:Gem::Version
|
98
|
-
version: '
|
102
|
+
version: '2.5'
|
99
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
104
|
requirements:
|
101
105
|
- - ">="
|
102
106
|
- !ruby/object:Gem::Version
|
103
107
|
version: '0'
|
104
108
|
requirements: []
|
105
|
-
rubygems_version: 3.
|
106
|
-
signing_key:
|
109
|
+
rubygems_version: 3.2.32
|
110
|
+
signing_key:
|
107
111
|
specification_version: 4
|
108
112
|
summary: An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS).
|
109
113
|
test_files:
|
data/.travis.yml
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
cache: bundler
|
2
|
-
sudo: false
|
3
|
-
language: ruby
|
4
|
-
dist: trusty
|
5
|
-
|
6
|
-
rvm:
|
7
|
-
- 2.7.0
|
8
|
-
- 2.6.5
|
9
|
-
- 2.5.7
|
10
|
-
- 2.4.9
|
11
|
-
- jruby-head
|
12
|
-
|
13
|
-
addons:
|
14
|
-
apt:
|
15
|
-
packages:
|
16
|
-
- libgeos-c1
|
17
|
-
sonarcloud:
|
18
|
-
organization: "dark-panda"
|
19
|
-
token:
|
20
|
-
secure: UiS3BU1SUSbIynvaup+3w9NNa85mH3lXSa+iCQx9luhp5Nc5Zg4xedycfGylCzpr6D6vRRH3gYefafitcvjS8LbhtNd2Z4oezp2T4fRt8W387HJ3wIcRkyOwBhmQqt/SiPiQr/rkDE9VomelLe7RSkelfAQQvpka5TMzc4wKYd4=
|
21
|
-
|
22
|
-
git:
|
23
|
-
depth: false
|
24
|
-
|
25
|
-
before_install:
|
26
|
-
- gem install bundler
|
27
|
-
|
28
|
-
before_script:
|
29
|
-
- bundle exec rubocop --format=json > rubocop-report.json || true
|
30
|
-
|
31
|
-
script:
|
32
|
-
- bundle exec rake test
|
33
|
-
- sonar-scanner
|