ffi-geos 1.2.0 → 2.2.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 (54) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +4851 -0
  3. data/.travis.yml +24 -9
  4. data/FUNDING.yml +2 -0
  5. data/Gemfile +12 -16
  6. data/Guardfile +6 -8
  7. data/MIT-LICENSE +1 -1
  8. data/README.rdoc +2 -20
  9. data/Rakefile +4 -2
  10. data/ffi-geos.gemspec +13 -14
  11. data/lib/ffi-geos.rb +342 -244
  12. data/lib/ffi-geos/buffer_params.rb +9 -20
  13. data/lib/ffi-geos/coordinate_sequence.rb +351 -65
  14. data/lib/ffi-geos/geometry.rb +267 -191
  15. data/lib/ffi-geos/geometry_collection.rb +74 -12
  16. data/lib/ffi-geos/interrupt.rb +11 -16
  17. data/lib/ffi-geos/line_string.rb +157 -33
  18. data/lib/ffi-geos/linear_ring.rb +2 -3
  19. data/lib/ffi-geos/multi_line_string.rb +1 -2
  20. data/lib/ffi-geos/multi_point.rb +0 -1
  21. data/lib/ffi-geos/multi_polygon.rb +0 -1
  22. data/lib/ffi-geos/point.rb +70 -15
  23. data/lib/ffi-geos/polygon.rb +124 -21
  24. data/lib/ffi-geos/prepared_geometry.rb +11 -12
  25. data/lib/ffi-geos/strtree.rb +64 -77
  26. data/lib/ffi-geos/tools.rb +16 -19
  27. data/lib/ffi-geos/utils.rb +36 -60
  28. data/lib/ffi-geos/version.rb +1 -3
  29. data/lib/ffi-geos/wkb_reader.rb +4 -9
  30. data/lib/ffi-geos/wkb_writer.rb +15 -20
  31. data/lib/ffi-geos/wkt_reader.rb +2 -5
  32. data/lib/ffi-geos/wkt_writer.rb +20 -31
  33. data/sonar-project.properties +16 -0
  34. data/test/.rubocop.yml +36 -0
  35. data/test/coordinate_sequence_tests.rb +322 -52
  36. data/test/geometry_collection_tests.rb +388 -4
  37. data/test/geometry_tests.rb +466 -121
  38. data/test/interrupt_tests.rb +9 -12
  39. data/test/line_string_tests.rb +213 -25
  40. data/test/linear_ring_tests.rb +1 -3
  41. data/test/misc_tests.rb +28 -30
  42. data/test/multi_line_string_tests.rb +0 -2
  43. data/test/point_tests.rb +158 -2
  44. data/test/polygon_tests.rb +283 -2
  45. data/test/prepared_geometry_tests.rb +8 -11
  46. data/test/strtree_tests.rb +14 -15
  47. data/test/test_helper.rb +75 -51
  48. data/test/tools_tests.rb +1 -4
  49. data/test/utils_tests.rb +85 -76
  50. data/test/wkb_reader_tests.rb +18 -18
  51. data/test/wkb_writer_tests.rb +15 -22
  52. data/test/wkt_reader_tests.rb +1 -4
  53. data/test/wkt_writer_tests.rb +8 -17
  54. metadata +11 -7
@@ -1,16 +1,15 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
5
4
  class NullPointerError < Geos::Error
6
5
  def initialize(*)
7
- super("Tried to create a Geometry from a NULL pointer!")
6
+ super('Tried to create a Geometry from a NULL pointer!')
8
7
  end
9
8
  end
10
9
 
11
10
  class InvalidGeometryTypeError < Geos::Error
12
11
  def initialize(*)
13
- super("Invalid geometry type")
12
+ super('Invalid geometry type')
14
13
  end
15
14
  end
16
15
 
@@ -25,12 +24,10 @@ module Geos
25
24
 
26
25
  def cast_geometry_ptr(geom_ptr, options = {})
27
26
  options = {
28
- :auto_free => true
27
+ auto_free: true
29
28
  }.merge(options)
30
29
 
31
- if geom_ptr.null?
32
- raise Geos::NullPointerError.new
33
- end
30
+ raise Geos::NullPointerError if geom_ptr.null?
34
31
 
35
32
  klass = case FFIGeos.GEOSGeomTypeId_r(Geos.current_handle_pointer, geom_ptr)
36
33
  when GEOS_POINT
@@ -50,10 +47,10 @@ module Geos
50
47
  when GEOS_GEOMETRYCOLLECTION
51
48
  GeometryCollection
52
49
  else
53
- raise Geos::InvalidGeometryTypeError.new
50
+ raise Geos::InvalidGeometryTypeError
54
51
  end
55
52
 
56
- klass.new(geom_ptr, options).tap { |ret|
53
+ klass.new(geom_ptr, options).tap do |ret|
57
54
  if options[:srid]
58
55
  ret.srid = options[:srid] || 0
59
56
  elsif options[:srid_copy]
@@ -63,11 +60,11 @@ module Geos
63
60
  options[:srid_copy] || 0
64
61
  end
65
62
  end
66
- }
63
+ end
67
64
  end
68
65
 
69
66
  def check_geometry(geom)
70
- raise TypeError.new("Expected Geos::Geometry") unless geom.is_a?(Geos::Geometry)
67
+ raise TypeError, 'Expected Geos::Geometry' unless geom.is_a?(Geos::Geometry)
71
68
  end
72
69
 
73
70
  def pick_srid_from_geoms(srid_a, srid_b, policy = Geos.srid_copy_policy)
@@ -81,7 +78,7 @@ module Geos
81
78
  when :strict
82
79
  raise Geos::MixedSRIDsError.new(srid_a, srid_b)
83
80
  else
84
- raise ArgumentError.new("Unexpected policy value: #{policy}")
81
+ raise ArgumentError, "Unexpected policy value: #{policy}"
85
82
  end
86
83
  end
87
84
 
@@ -97,12 +94,12 @@ module Geos
97
94
 
98
95
  def bool_result(result)
99
96
  case result
100
- when 1
101
- true
102
- when 0
103
- false
104
- else
105
- raise Geos::UnexpectedBooleanResultError.new(result)
97
+ when 1
98
+ true
99
+ when 0
100
+ false
101
+ else
102
+ raise Geos::UnexpectedBooleanResultError, result
106
103
  end
107
104
  end
108
105
 
@@ -116,7 +113,7 @@ module Geos
116
113
 
117
114
  def check_enum_value(enum, value)
118
115
  enum[value] or
119
- raise TypeError.new("Couldn't find valid #{enum.tag} value: #{value}")
116
+ raise TypeError, "Couldn't find valid #{enum.tag} value: #{value}"
120
117
  end
121
118
 
122
119
  def symbol_for_enum(enum, value)
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
@@ -31,106 +30,86 @@ module Geos
31
30
  def create_point(*args)
32
31
  options = extract_options!(args)
33
32
 
34
- if args.length == 1
35
- cs = args.first
36
- elsif args.length == 2
37
- cs = CoordinateSequence.new(1, 2)
38
- cs.x[0], cs.y[0] = args[0].to_f, args[1].to_f
39
- elsif args.length == 3
40
- cs = CoordinateSequence.new(1, 3)
41
- cs.x[0], cs.y[0], cs.z[0] = args.map(&:to_f)
42
- else
43
- raise ArgumentError.new("Wrong number of arguments (#{args.length} for 1-3)")
33
+ case args.length
34
+ when 1
35
+ cs = args.first
36
+ when 2
37
+ cs = CoordinateSequence.new(1, 2)
38
+ cs.x[0] = args[0].to_f
39
+ cs.y[0] = args[1].to_f
40
+ when 3
41
+ cs = CoordinateSequence.new(1, 3)
42
+ cs.x[0], cs.y[0], cs.z[0] = args.map(&:to_f)
43
+ else
44
+ raise ArgumentError, "Wrong number of arguments (#{args.length} for 1-3)"
44
45
  end
45
46
 
46
- if cs.length != 1
47
- raise ArgumentError.new("IllegalArgumentException: Point coordinate list must contain a single element")
48
- end
47
+ raise ArgumentError, 'IllegalArgumentException: Point coordinate list must contain a single element' if cs.length != 1
49
48
 
50
49
  cs_dup = cs.dup
51
50
  cs_dup.ptr.autorelease = false
52
51
 
53
- cast_geometry_ptr(FFIGeos.GEOSGeom_createPoint_r(Geos.current_handle_pointer, cs_dup.ptr), {
54
- :srid => options[:srid]
55
- })
52
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createPoint_r(Geos.current_handle_pointer, cs_dup.ptr), srid: options[:srid])
56
53
  end
57
54
 
58
55
  def create_line_string(cs, options = {})
59
56
  cs = cs_from_cs_or_geom(cs)
60
57
 
61
- if cs.length <= 1 && cs.length != 0
62
- raise ArgumentError.new("IllegalArgumentException: point array must contain 0 or >1 elements")
63
- end
58
+ raise ArgumentError, 'IllegalArgumentException: point array must contain 0 or >1 elements' if cs.length <= 1 && !cs.empty?
64
59
 
65
60
  cs_dup = cs.dup
66
61
  cs_dup.ptr.autorelease = false
67
62
 
68
- cast_geometry_ptr(FFIGeos.GEOSGeom_createLineString_r(Geos.current_handle_pointer, cs_dup.ptr), {
69
- :srid => options[:srid]
70
- })
63
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createLineString_r(Geos.current_handle_pointer, cs_dup.ptr), srid: options[:srid])
71
64
  end
72
65
 
73
66
  def create_linear_ring(cs, options = {})
74
67
  cs = cs_from_cs_or_geom(cs)
75
68
 
76
- if cs.length <= 1 && cs.length != 0
77
- raise ArgumentError.new("IllegalArgumentException: point array must contain 0 or >1 elements")
78
- end
69
+ raise ArgumentError, 'IllegalArgumentException: point array must contain 0 or >1 elements' if cs.length <= 1 && !cs.empty?
79
70
 
80
71
  cs.ptr.autorelease = false
81
72
 
82
- cast_geometry_ptr(FFIGeos.GEOSGeom_createLinearRing_r(Geos.current_handle_pointer, cs.ptr), {
83
- :srid => options[:srid]
84
- })
73
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createLinearRing_r(Geos.current_handle_pointer, cs.ptr), srid: options[:srid])
85
74
  end
86
75
 
87
76
  def create_polygon(outer, *args)
88
77
  options = extract_options!(args)
89
78
 
90
- inner_dups = Array(args).flatten.collect { |i|
79
+ inner_dups = Array(args).flatten.collect do |i|
91
80
  force_to_linear_ring(i) or
92
- raise TypeError.new("Expected inner Array to contain Geos::LinearRing or Geos::CoordinateSequence objects")
93
- }
81
+ raise TypeError, 'Expected inner Array to contain Geos::LinearRing or Geos::CoordinateSequence objects'
82
+ end
94
83
 
95
84
  outer_dup = force_to_linear_ring(outer) or
96
- raise TypeError.new("Expected outer shell to be a Geos::LinearRing or Geos::CoordinateSequence")
85
+ raise TypeError, 'Expected outer shell to be a Geos::LinearRing or Geos::CoordinateSequence'
97
86
 
98
87
  ary = FFI::MemoryPointer.new(:pointer, inner_dups.length)
99
88
  ary.write_array_of_pointer(inner_dups.map(&:ptr))
100
89
 
101
90
  outer_dup.ptr.autorelease = false
102
- inner_dups.each { |i|
91
+ inner_dups.each do |i|
103
92
  i.ptr.autorelease = false
104
- }
93
+ end
105
94
 
106
- cast_geometry_ptr(FFIGeos.GEOSGeom_createPolygon_r(Geos.current_handle_pointer, outer_dup.ptr, ary, inner_dups.length), {
107
- :srid => options[:srid]
108
- })
95
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createPolygon_r(Geos.current_handle_pointer, outer_dup.ptr, ary, inner_dups.length), srid: options[:srid])
109
96
  end
110
97
 
111
98
  def create_empty_point(options = {})
112
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPoint_r(Geos.current_handle_pointer), {
113
- :srid => options[:srid]
114
- })
99
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPoint_r(Geos.current_handle_pointer), srid: options[:srid])
115
100
  end
116
101
 
117
102
  def create_empty_line_string(options = {})
118
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyLineString_r(Geos.current_handle_pointer), {
119
- :srid => options[:srid]
120
- })
103
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyLineString_r(Geos.current_handle_pointer), srid: options[:srid])
121
104
  end
122
105
 
123
106
  def create_empty_polygon(options = {})
124
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPolygon_r(Geos.current_handle_pointer), {
125
- :srid => options[:srid]
126
- })
107
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPolygon_r(Geos.current_handle_pointer), srid: options[:srid])
127
108
  end
128
109
 
129
110
  def create_empty_collection(t, options = {})
130
111
  check_enum_value(Geos::GeometryTypes, t)
131
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyCollection_r(Geos.current_handle_pointer, t), {
132
- :srid => options[:srid]
133
- })
112
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyCollection_r(Geos.current_handle_pointer, t), srid: options[:srid])
134
113
  end
135
114
 
136
115
  def create_empty_multi_point(options = {})
@@ -169,23 +148,19 @@ module Geos
169
148
 
170
149
  options = extract_options!(args)
171
150
 
172
- geoms = Array(args).flatten.tap { |i|
173
- if i.detect { |g| !g.is_a?(klass) }
174
- raise TypeError.new("Expected geoms Array to contain #{klass} objects")
175
- end
176
- }
151
+ geoms = Array(args).flatten.tap do |i|
152
+ raise TypeError, "Expected geoms Array to contain #{klass} objects" if i.detect { |g| !g.is_a?(klass) }
153
+ end
177
154
 
178
155
  geoms_dups = geoms.map(&:dup)
179
- geoms_dups.each { |i|
156
+ geoms_dups.each do |i|
180
157
  i.ptr.autorelease = false
181
- }
158
+ end
182
159
 
183
160
  ary = FFI::MemoryPointer.new(:pointer, geoms.length)
184
161
  ary.write_array_of_pointer(geoms_dups.map(&:ptr))
185
162
 
186
- cast_geometry_ptr(FFIGeos.GEOSGeom_createCollection_r(Geos.current_handle_pointer, t, ary, geoms_dups.length), {
187
- :srid => options[:srid]
188
- })
163
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createCollection_r(Geos.current_handle_pointer, t, ary, geoms_dups.length), srid: options[:srid])
189
164
  end
190
165
 
191
166
  def create_multi_point(*args)
@@ -205,6 +180,7 @@ module Geos
205
180
  end
206
181
 
207
182
  private
183
+
208
184
  def cs_from_cs_or_geom(geom_or_cs)
209
185
  case geom_or_cs
210
186
  when Array
@@ -1,7 +1,5 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
5
- VERSION = '1.2.0'.freeze
4
+ VERSION = '2.2.0'
6
5
  end
7
-
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
@@ -24,19 +23,15 @@ module Geos
24
23
  end
25
24
 
26
25
  def read(wkb, options = {})
27
- cast_geometry_ptr(FFIGeos.GEOSWKBReader_read_r(Geos.current_handle_pointer, self.ptr, wkb, wkb.bytesize), {
28
- :srid => options[:srid]
29
- })
26
+ cast_geometry_ptr(FFIGeos.GEOSWKBReader_read_r(Geos.current_handle_pointer, ptr, wkb, wkb.bytesize), srid: options[:srid])
30
27
  rescue Geos::GEOSException => e
31
- raise ParseError.new(e)
28
+ raise ParseError, e
32
29
  end
33
30
 
34
31
  def read_hex(wkb, options = {})
35
- cast_geometry_ptr(FFIGeos.GEOSWKBReader_readHEX_r(Geos.current_handle_pointer, self.ptr, wkb, wkb.bytesize), {
36
- :srid => options[:srid]
37
- })
32
+ cast_geometry_ptr(FFIGeos.GEOSWKBReader_readHEX_r(Geos.current_handle_pointer, ptr, wkb, wkb.bytesize), srid: options[:srid])
38
33
  rescue Geos::GEOSException => e
39
- raise ParseError.new(e)
34
+ raise ParseError, e
40
35
  end
41
36
 
42
37
  def self.release(ptr) #:nodoc:
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
@@ -9,7 +8,7 @@ module Geos
9
8
 
10
9
  def initialize(options = {})
11
10
  options = {
12
- :include_srid => false
11
+ include_srid: false
13
12
  }.merge(options)
14
13
 
15
14
  ptr = FFIGeos.GEOSWKBWriter_create_r(Geos.current_handle_pointer)
@@ -30,14 +29,14 @@ module Geos
30
29
  def write(geom, options = nil)
31
30
  unless options.nil?
32
31
  old_options = {
33
- :include_srid => self.include_srid
32
+ include_srid: include_srid
34
33
  }
35
34
 
36
35
  set_options(options)
37
36
  end
38
37
 
39
38
  size_t = FFI::MemoryPointer.new(:size_t)
40
- FFIGeos.GEOSWKBWriter_write_r(Geos.current_handle_pointer, self.ptr, geom.ptr, size_t).get_bytes(0, size_t.read_int)
39
+ FFIGeos.GEOSWKBWriter_write_r(Geos.current_handle_pointer, ptr, geom.ptr, size_t).get_bytes(0, size_t.read_int)
41
40
  ensure
42
41
  set_options(old_options) unless old_options.nil?
43
42
  end
@@ -45,53 +44,49 @@ module Geos
45
44
  def write_hex(geom, options = nil)
46
45
  unless options.nil?
47
46
  old_options = {
48
- :include_srid => self.include_srid
47
+ include_srid: include_srid
49
48
  }
50
49
 
51
50
  set_options(options)
52
51
  end
53
52
 
54
53
  size_t = FFI::MemoryPointer.new(:size_t)
55
- FFIGeos.GEOSWKBWriter_writeHEX_r(Geos.current_handle_pointer, self.ptr, geom.ptr, size_t).get_string(0, size_t.read_int)
54
+ FFIGeos.GEOSWKBWriter_writeHEX_r(Geos.current_handle_pointer, ptr, geom.ptr, size_t).get_string(0, size_t.read_int)
56
55
  ensure
57
56
  set_options(old_options) unless old_options.nil?
58
57
  end
59
58
 
60
59
  def output_dimensions=(dim)
61
- if dim < 2 || dim > 3
62
- raise ArgumentError.new("Output dimensions must be either 2 or 3")
63
- end
64
- FFIGeos.GEOSWKBWriter_setOutputDimension_r(Geos.current_handle_pointer, self.ptr, dim)
60
+ raise ArgumentError, 'Output dimensions must be either 2 or 3' if dim < 2 || dim > 3
61
+
62
+ FFIGeos.GEOSWKBWriter_setOutputDimension_r(Geos.current_handle_pointer, ptr, dim)
65
63
  end
66
64
 
67
65
  def output_dimensions
68
- FFIGeos.GEOSWKBWriter_getOutputDimension_r(Geos.current_handle_pointer, self.ptr)
66
+ FFIGeos.GEOSWKBWriter_getOutputDimension_r(Geos.current_handle_pointer, ptr)
69
67
  end
70
68
 
71
69
  def include_srid
72
- bool_result(FFIGeos.GEOSWKBWriter_getIncludeSRID_r(Geos.current_handle_pointer, self.ptr))
70
+ bool_result(FFIGeos.GEOSWKBWriter_getIncludeSRID_r(Geos.current_handle_pointer, ptr))
73
71
  end
74
72
 
75
73
  def include_srid=(val)
76
- FFIGeos.GEOSWKBWriter_setIncludeSRID_r(Geos.current_handle_pointer, self.ptr,
77
- Geos::Tools.bool_to_int(val)
78
- )
74
+ FFIGeos.GEOSWKBWriter_setIncludeSRID_r(Geos.current_handle_pointer, ptr, Geos::Tools.bool_to_int(val))
79
75
  end
80
76
 
81
77
  def byte_order
82
- FFIGeos.GEOSWKBWriter_getByteOrder_r(Geos.current_handle_pointer, self.ptr)
78
+ FFIGeos.GEOSWKBWriter_getByteOrder_r(Geos.current_handle_pointer, ptr)
83
79
  end
84
80
 
85
81
  def byte_order=(val)
86
82
  check_enum_value(Geos::ByteOrders, val)
87
- FFIGeos.GEOSWKBWriter_setByteOrder_r(Geos.current_handle_pointer, self.ptr, val)
83
+ FFIGeos.GEOSWKBWriter_setByteOrder_r(Geos.current_handle_pointer, ptr, val)
88
84
  end
89
85
 
90
86
  private
87
+
91
88
  def set_options(options) #:nodoc:
92
- [ :include_srid ].each do |k|
93
- self.send("#{k}=", options[k]) if options.has_key?(k)
94
- end
89
+ self.include_srid = options[:include_srid] if options.key?(:include_srid)
95
90
  end
96
91
  end
97
92
  end
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
@@ -24,11 +23,9 @@ module Geos
24
23
  end
25
24
 
26
25
  def read(wkt, options = {})
27
- cast_geometry_ptr(FFIGeos.GEOSWKTReader_read_r(Geos.current_handle_pointer, self.ptr, wkt), {
28
- :srid => options[:srid]
29
- })
26
+ cast_geometry_ptr(FFIGeos.GEOSWKTReader_read_r(Geos.current_handle_pointer, ptr, wkt), srid: options[:srid])
30
27
  rescue Geos::GEOSException => e
31
- raise ParseError.new(e)
28
+ raise ParseError, e
32
29
  end
33
30
 
34
31
  def self.release(ptr) #:nodoc:
@@ -1,19 +1,15 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
5
4
  class WktWriter
6
- attr_reader :ptr
7
- attr_reader :old_3d
8
- attr_reader :rounding_precision
9
- attr_reader :trim
5
+ attr_reader :ptr, :old_3d, :rounding_precision, :trim
10
6
 
11
7
  def initialize(options = {})
12
8
  options = {
13
- :trim => false,
14
- :old_3d => false,
15
- :rounding_precision => -1,
16
- :output_dimensions => 2
9
+ trim: false,
10
+ old_3d: false,
11
+ rounding_precision: -1,
12
+ output_dimensions: 2
17
13
  }.merge(options)
18
14
 
19
15
  ptr = FFIGeos.GEOSWKTWriter_create_r(Geos.current_handle_pointer)
@@ -30,8 +26,8 @@ module Geos
30
26
  end
31
27
 
32
28
  def set_options(options) #:nodoc:
33
- [ :trim, :old_3d, :rounding_precision, :output_dimensions ].each do |k|
34
- self.send("#{k}=", options[k]) if self.respond_to?("#{k}=") && options.has_key?(k)
29
+ [:trim, :old_3d, :rounding_precision, :output_dimensions].each do |k|
30
+ send("#{k}=", options[k]) if respond_to?("#{k}=") && options.key?(k)
35
31
  end
36
32
  end
37
33
  private :set_options
@@ -42,16 +38,16 @@ module Geos
42
38
  def write(geom, options = nil)
43
39
  unless options.nil?
44
40
  old_options = {
45
- :trim => self.trim,
46
- :old_3d => self.old_3d,
47
- :rounding_precision => self.rounding_precision,
48
- :output_dimensions => self.output_dimensions
41
+ trim: trim,
42
+ old_3d: old_3d,
43
+ rounding_precision: rounding_precision,
44
+ output_dimensions: output_dimensions
49
45
  }
50
46
 
51
47
  set_options(options)
52
48
  end
53
49
 
54
- FFIGeos.GEOSWKTWriter_write_r(Geos.current_handle_pointer, self.ptr, geom.ptr)
50
+ FFIGeos.GEOSWKTWriter_write_r(Geos.current_handle_pointer, ptr, geom.ptr)
55
51
  ensure
56
52
  set_options(old_options) unless options.nil?
57
53
  end
@@ -60,9 +56,7 @@ module Geos
60
56
  # Available in GEOS 3.3+.
61
57
  def trim=(val)
62
58
  @trim = !!val
63
- FFIGeos.GEOSWKTWriter_setTrim_r(Geos.current_handle_pointer, self.ptr,
64
- Geos::Tools.bool_to_int(@trim)
65
- )
59
+ FFIGeos.GEOSWKTWriter_setTrim_r(Geos.current_handle_pointer, ptr, Geos::Tools.bool_to_int(@trim))
66
60
  end
67
61
  end
68
62
 
@@ -70,12 +64,10 @@ module Geos
70
64
  # Available in GEOS 3.3+.
71
65
  def rounding_precision=(r)
72
66
  r = r.to_i
73
- if r > 255
74
- raise ArgumentError.new("Rounding precision cannot be greater than 255")
75
- end
67
+ raise ArgumentError, 'Rounding precision cannot be greater than 255' if r > 255
76
68
 
77
69
  @rounding_precision = r
78
- FFIGeos.GEOSWKTWriter_setRoundingPrecision_r(Geos.current_handle_pointer, self.ptr, @rounding_precision)
70
+ FFIGeos.GEOSWKTWriter_setRoundingPrecision_r(Geos.current_handle_pointer, ptr, @rounding_precision)
79
71
  end
80
72
  end
81
73
 
@@ -83,9 +75,7 @@ module Geos
83
75
  # Available in GEOS 3.3+.
84
76
  def old_3d=(val)
85
77
  @old_3d = !!val
86
- FFIGeos.GEOSWKTWriter_setOld3D_r(Geos.current_handle_pointer, self.ptr,
87
- Geos::Tools.bool_to_int(@old_3d)
88
- )
78
+ FFIGeos.GEOSWKTWriter_setOld3D_r(Geos.current_handle_pointer, ptr, Geos::Tools.bool_to_int(@old_3d))
89
79
  end
90
80
  end
91
81
 
@@ -93,17 +83,16 @@ module Geos
93
83
  # Available in GEOS 3.3+.
94
84
  def output_dimensions=(dim)
95
85
  dim = dim.to_i
96
- if dim < 2 || dim > 3
97
- raise ArgumentError.new("Output dimensions must be either 2 or 3")
98
- end
99
- FFIGeos.GEOSWKTWriter_setOutputDimension_r(Geos.current_handle_pointer, self.ptr, dim)
86
+ raise ArgumentError, 'Output dimensions must be either 2 or 3' if dim < 2 || dim > 3
87
+
88
+ FFIGeos.GEOSWKTWriter_setOutputDimension_r(Geos.current_handle_pointer, ptr, dim)
100
89
  end
101
90
  end
102
91
 
103
92
  if FFIGeos.respond_to?(:GEOSWKTWriter_getOutputDimension_r)
104
93
  # Available in GEOS 3.3+.
105
94
  def output_dimensions
106
- FFIGeos.GEOSWKTWriter_getOutputDimension_r(Geos.current_handle_pointer, self.ptr)
95
+ FFIGeos.GEOSWKTWriter_getOutputDimension_r(Geos.current_handle_pointer, ptr)
107
96
  end
108
97
  end
109
98
  end