ffi-geos 1.2.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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