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.
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::GEOS_VERSION > '3.8'
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] != '0'
58
- reader.read(*args)
67
+ def read(*args, **options)
68
+ if args[0][0] == '0'
69
+ reader_hex.read_hex(*args, **options)
59
70
  else
60
- reader_hex.read_hex(*args)
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
- geom_b = geom.send(method, *args)
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.send(method, *args)
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
- result = geom.send(method, *args)
132
+
133
+ result = geom.__safe_send__(method, *args, **options)
121
134
  result = write(result) if result.is_a?(Geos::Geometry)
122
135
 
123
- assert_equal(expected, result)
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.send(method, *args)
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.send("#{method}!", *args)
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.send(method, *args)
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.send("#{method}!", *args).snap_to_grid!(0.1)
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.send(method, *args).snap_to_grid(0.1)
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.0
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: 2020-02-09 00:00:00.000000000 Z
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
- - ".travis.yml"
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
- post_install_message:
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: '0'
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.0.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