ffi-geos 1.2.1 → 1.2.2

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 (49) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +20 -0
  3. data/.travis.yml +7 -3
  4. data/Gemfile +1 -1
  5. data/Guardfile +4 -5
  6. data/ffi-geos.gemspec +1 -1
  7. data/lib/ffi-geos.rb +212 -196
  8. data/lib/ffi-geos/buffer_params.rb +9 -20
  9. data/lib/ffi-geos/coordinate_sequence.rb +342 -58
  10. data/lib/ffi-geos/geometry.rb +167 -178
  11. data/lib/ffi-geos/geometry_collection.rb +60 -12
  12. data/lib/ffi-geos/interrupt.rb +2 -4
  13. data/lib/ffi-geos/line_string.rb +146 -37
  14. data/lib/ffi-geos/linear_ring.rb +2 -3
  15. data/lib/ffi-geos/multi_line_string.rb +1 -2
  16. data/lib/ffi-geos/multi_point.rb +0 -1
  17. data/lib/ffi-geos/multi_polygon.rb +0 -1
  18. data/lib/ffi-geos/point.rb +69 -14
  19. data/lib/ffi-geos/polygon.rb +110 -21
  20. data/lib/ffi-geos/prepared_geometry.rb +11 -12
  21. data/lib/ffi-geos/strtree.rb +41 -52
  22. data/lib/ffi-geos/tools.rb +15 -18
  23. data/lib/ffi-geos/utils.rb +27 -44
  24. data/lib/ffi-geos/version.rb +1 -3
  25. data/lib/ffi-geos/wkb_reader.rb +4 -9
  26. data/lib/ffi-geos/wkb_writer.rb +14 -18
  27. data/lib/ffi-geos/wkt_reader.rb +2 -5
  28. data/lib/ffi-geos/wkt_writer.rb +17 -22
  29. data/test/.rubocop.yml +36 -0
  30. data/test/coordinate_sequence_tests.rb +263 -14
  31. data/test/geometry_collection_tests.rb +412 -1
  32. data/test/geometry_tests.rb +156 -86
  33. data/test/interrupt_tests.rb +2 -4
  34. data/test/line_string_tests.rb +212 -23
  35. data/test/linear_ring_tests.rb +1 -2
  36. data/test/misc_tests.rb +28 -29
  37. data/test/multi_line_string_tests.rb +0 -1
  38. data/test/point_tests.rb +158 -1
  39. data/test/polygon_tests.rb +284 -1
  40. data/test/prepared_geometry_tests.rb +1 -3
  41. data/test/strtree_tests.rb +9 -10
  42. data/test/test_helper.rb +49 -18
  43. data/test/tools_tests.rb +1 -3
  44. data/test/utils_tests.rb +22 -22
  45. data/test/wkb_reader_tests.rb +10 -9
  46. data/test/wkb_writer_tests.rb +5 -13
  47. data/test/wkt_reader_tests.rb +1 -2
  48. data/test/wkt_writer_tests.rb +9 -14
  49. metadata +6 -3
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
@@ -35,102 +34,87 @@ module Geos
35
34
  cs = args.first
36
35
  elsif args.length == 2
37
36
  cs = CoordinateSequence.new(1, 2)
38
- cs.x[0], cs.y[0] = args[0].to_f, args[1].to_f
37
+ cs.x[0] = args[0].to_f
38
+ cs.y[0] = args[1].to_f
39
39
  elsif args.length == 3
40
40
  cs = CoordinateSequence.new(1, 3)
41
41
  cs.x[0], cs.y[0], cs.z[0] = args.map(&:to_f)
42
42
  else
43
- raise ArgumentError.new("Wrong number of arguments (#{args.length} for 1-3)")
43
+ raise ArgumentError, "Wrong number of arguments (#{args.length} for 1-3)"
44
44
  end
45
45
 
46
46
  if cs.length != 1
47
- raise ArgumentError.new("IllegalArgumentException: Point coordinate list must contain a single element")
47
+ raise ArgumentError, 'IllegalArgumentException: Point coordinate list must contain a single element'
48
48
  end
49
49
 
50
50
  cs_dup = cs.dup
51
51
  cs_dup.ptr.autorelease = false
52
52
 
53
- cast_geometry_ptr(FFIGeos.GEOSGeom_createPoint_r(Geos.current_handle_pointer, cs_dup.ptr), {
54
- :srid => options[:srid]
55
- })
53
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createPoint_r(Geos.current_handle_pointer, cs_dup.ptr), srid: options[:srid])
56
54
  end
57
55
 
58
56
  def create_line_string(cs, options = {})
59
57
  cs = cs_from_cs_or_geom(cs)
60
58
 
61
59
  if cs.length <= 1 && cs.length != 0
62
- raise ArgumentError.new("IllegalArgumentException: point array must contain 0 or >1 elements")
60
+ raise ArgumentError, 'IllegalArgumentException: point array must contain 0 or >1 elements'
63
61
  end
64
62
 
65
63
  cs_dup = cs.dup
66
64
  cs_dup.ptr.autorelease = false
67
65
 
68
- cast_geometry_ptr(FFIGeos.GEOSGeom_createLineString_r(Geos.current_handle_pointer, cs_dup.ptr), {
69
- :srid => options[:srid]
70
- })
66
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createLineString_r(Geos.current_handle_pointer, cs_dup.ptr), srid: options[:srid])
71
67
  end
72
68
 
73
69
  def create_linear_ring(cs, options = {})
74
70
  cs = cs_from_cs_or_geom(cs)
75
71
 
76
72
  if cs.length <= 1 && cs.length != 0
77
- raise ArgumentError.new("IllegalArgumentException: point array must contain 0 or >1 elements")
73
+ raise ArgumentError, 'IllegalArgumentException: point array must contain 0 or >1 elements'
78
74
  end
79
75
 
80
76
  cs.ptr.autorelease = false
81
77
 
82
- cast_geometry_ptr(FFIGeos.GEOSGeom_createLinearRing_r(Geos.current_handle_pointer, cs.ptr), {
83
- :srid => options[:srid]
84
- })
78
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createLinearRing_r(Geos.current_handle_pointer, cs.ptr), srid: options[:srid])
85
79
  end
86
80
 
87
81
  def create_polygon(outer, *args)
88
82
  options = extract_options!(args)
89
83
 
90
- inner_dups = Array(args).flatten.collect { |i|
84
+ inner_dups = Array(args).flatten.collect do |i|
91
85
  force_to_linear_ring(i) or
92
- raise TypeError.new("Expected inner Array to contain Geos::LinearRing or Geos::CoordinateSequence objects")
93
- }
86
+ raise TypeError, 'Expected inner Array to contain Geos::LinearRing or Geos::CoordinateSequence objects'
87
+ end
94
88
 
95
89
  outer_dup = force_to_linear_ring(outer) or
96
- raise TypeError.new("Expected outer shell to be a Geos::LinearRing or Geos::CoordinateSequence")
90
+ raise TypeError, 'Expected outer shell to be a Geos::LinearRing or Geos::CoordinateSequence'
97
91
 
98
92
  ary = FFI::MemoryPointer.new(:pointer, inner_dups.length)
99
93
  ary.write_array_of_pointer(inner_dups.map(&:ptr))
100
94
 
101
95
  outer_dup.ptr.autorelease = false
102
- inner_dups.each { |i|
96
+ inner_dups.each do |i|
103
97
  i.ptr.autorelease = false
104
- }
98
+ end
105
99
 
106
- cast_geometry_ptr(FFIGeos.GEOSGeom_createPolygon_r(Geos.current_handle_pointer, outer_dup.ptr, ary, inner_dups.length), {
107
- :srid => options[:srid]
108
- })
100
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createPolygon_r(Geos.current_handle_pointer, outer_dup.ptr, ary, inner_dups.length), srid: options[:srid])
109
101
  end
110
102
 
111
103
  def create_empty_point(options = {})
112
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPoint_r(Geos.current_handle_pointer), {
113
- :srid => options[:srid]
114
- })
104
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPoint_r(Geos.current_handle_pointer), srid: options[:srid])
115
105
  end
116
106
 
117
107
  def create_empty_line_string(options = {})
118
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyLineString_r(Geos.current_handle_pointer), {
119
- :srid => options[:srid]
120
- })
108
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyLineString_r(Geos.current_handle_pointer), srid: options[:srid])
121
109
  end
122
110
 
123
111
  def create_empty_polygon(options = {})
124
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPolygon_r(Geos.current_handle_pointer), {
125
- :srid => options[:srid]
126
- })
112
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPolygon_r(Geos.current_handle_pointer), srid: options[:srid])
127
113
  end
128
114
 
129
115
  def create_empty_collection(t, options = {})
130
116
  check_enum_value(Geos::GeometryTypes, t)
131
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyCollection_r(Geos.current_handle_pointer, t), {
132
- :srid => options[:srid]
133
- })
117
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyCollection_r(Geos.current_handle_pointer, t), srid: options[:srid])
134
118
  end
135
119
 
136
120
  def create_empty_multi_point(options = {})
@@ -169,23 +153,21 @@ module Geos
169
153
 
170
154
  options = extract_options!(args)
171
155
 
172
- geoms = Array(args).flatten.tap { |i|
156
+ geoms = Array(args).flatten.tap do |i|
173
157
  if i.detect { |g| !g.is_a?(klass) }
174
- raise TypeError.new("Expected geoms Array to contain #{klass} objects")
158
+ raise TypeError, "Expected geoms Array to contain #{klass} objects"
175
159
  end
176
- }
160
+ end
177
161
 
178
162
  geoms_dups = geoms.map(&:dup)
179
- geoms_dups.each { |i|
163
+ geoms_dups.each do |i|
180
164
  i.ptr.autorelease = false
181
- }
165
+ end
182
166
 
183
167
  ary = FFI::MemoryPointer.new(:pointer, geoms.length)
184
168
  ary.write_array_of_pointer(geoms_dups.map(&:ptr))
185
169
 
186
- cast_geometry_ptr(FFIGeos.GEOSGeom_createCollection_r(Geos.current_handle_pointer, t, ary, geoms_dups.length), {
187
- :srid => options[:srid]
188
- })
170
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createCollection_r(Geos.current_handle_pointer, t, ary, geoms_dups.length), srid: options[:srid])
189
171
  end
190
172
 
191
173
  def create_multi_point(*args)
@@ -205,6 +187,7 @@ module Geos
205
187
  end
206
188
 
207
189
  private
190
+
208
191
  def cs_from_cs_or_geom(geom_or_cs)
209
192
  case geom_or_cs
210
193
  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.1'.freeze
4
+ VERSION = '1.2.2'.freeze
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,50 @@ 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
60
  if dim < 2 || dim > 3
62
- raise ArgumentError.new("Output dimensions must be either 2 or 3")
61
+ raise ArgumentError, 'Output dimensions must be either 2 or 3'
63
62
  end
64
- FFIGeos.GEOSWKBWriter_setOutputDimension_r(Geos.current_handle_pointer, self.ptr, dim)
63
+ FFIGeos.GEOSWKBWriter_setOutputDimension_r(Geos.current_handle_pointer, ptr, dim)
65
64
  end
66
65
 
67
66
  def output_dimensions
68
- FFIGeos.GEOSWKBWriter_getOutputDimension_r(Geos.current_handle_pointer, self.ptr)
67
+ FFIGeos.GEOSWKBWriter_getOutputDimension_r(Geos.current_handle_pointer, ptr)
69
68
  end
70
69
 
71
70
  def include_srid
72
- bool_result(FFIGeos.GEOSWKBWriter_getIncludeSRID_r(Geos.current_handle_pointer, self.ptr))
71
+ bool_result(FFIGeos.GEOSWKBWriter_getIncludeSRID_r(Geos.current_handle_pointer, ptr))
73
72
  end
74
73
 
75
74
  def include_srid=(val)
76
- FFIGeos.GEOSWKBWriter_setIncludeSRID_r(Geos.current_handle_pointer, self.ptr,
77
- Geos::Tools.bool_to_int(val)
78
- )
75
+ FFIGeos.GEOSWKBWriter_setIncludeSRID_r(Geos.current_handle_pointer, ptr, Geos::Tools.bool_to_int(val))
79
76
  end
80
77
 
81
78
  def byte_order
82
- FFIGeos.GEOSWKBWriter_getByteOrder_r(Geos.current_handle_pointer, self.ptr)
79
+ FFIGeos.GEOSWKBWriter_getByteOrder_r(Geos.current_handle_pointer, ptr)
83
80
  end
84
81
 
85
82
  def byte_order=(val)
86
83
  check_enum_value(Geos::ByteOrders, val)
87
- FFIGeos.GEOSWKBWriter_setByteOrder_r(Geos.current_handle_pointer, self.ptr, val)
84
+ FFIGeos.GEOSWKBWriter_setByteOrder_r(Geos.current_handle_pointer, ptr, val)
88
85
  end
89
86
 
90
87
  private
88
+
91
89
  def set_options(options) #:nodoc:
92
- [ :include_srid ].each do |k|
93
- self.send("#{k}=", options[k]) if options.has_key?(k)
94
- end
90
+ self.include_srid = options[:include_srid] if options.key?(:include_srid)
95
91
  end
96
92
  end
97
93
  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,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Geos
@@ -10,10 +9,10 @@ module Geos
10
9
 
11
10
  def initialize(options = {})
12
11
  options = {
13
- :trim => false,
14
- :old_3d => false,
15
- :rounding_precision => -1,
16
- :output_dimensions => 2
12
+ trim: false,
13
+ old_3d: false,
14
+ rounding_precision: -1,
15
+ output_dimensions: 2
17
16
  }.merge(options)
18
17
 
19
18
  ptr = FFIGeos.GEOSWKTWriter_create_r(Geos.current_handle_pointer)
@@ -31,7 +30,7 @@ module Geos
31
30
 
32
31
  def set_options(options) #:nodoc:
33
32
  [ :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)
33
+ send("#{k}=", options[k]) if respond_to?("#{k}=") && options.key?(k)
35
34
  end
36
35
  end
37
36
  private :set_options
@@ -42,16 +41,16 @@ module Geos
42
41
  def write(geom, options = nil)
43
42
  unless options.nil?
44
43
  old_options = {
45
- :trim => self.trim,
46
- :old_3d => self.old_3d,
47
- :rounding_precision => self.rounding_precision,
48
- :output_dimensions => self.output_dimensions
44
+ trim: trim,
45
+ old_3d: old_3d,
46
+ rounding_precision: rounding_precision,
47
+ output_dimensions: output_dimensions
49
48
  }
50
49
 
51
50
  set_options(options)
52
51
  end
53
52
 
54
- FFIGeos.GEOSWKTWriter_write_r(Geos.current_handle_pointer, self.ptr, geom.ptr)
53
+ FFIGeos.GEOSWKTWriter_write_r(Geos.current_handle_pointer, ptr, geom.ptr)
55
54
  ensure
56
55
  set_options(old_options) unless options.nil?
57
56
  end
@@ -60,9 +59,7 @@ module Geos
60
59
  # Available in GEOS 3.3+.
61
60
  def trim=(val)
62
61
  @trim = !!val
63
- FFIGeos.GEOSWKTWriter_setTrim_r(Geos.current_handle_pointer, self.ptr,
64
- Geos::Tools.bool_to_int(@trim)
65
- )
62
+ FFIGeos.GEOSWKTWriter_setTrim_r(Geos.current_handle_pointer, ptr, Geos::Tools.bool_to_int(@trim))
66
63
  end
67
64
  end
68
65
 
@@ -71,11 +68,11 @@ module Geos
71
68
  def rounding_precision=(r)
72
69
  r = r.to_i
73
70
  if r > 255
74
- raise ArgumentError.new("Rounding precision cannot be greater than 255")
71
+ raise ArgumentError, 'Rounding precision cannot be greater than 255'
75
72
  end
76
73
 
77
74
  @rounding_precision = r
78
- FFIGeos.GEOSWKTWriter_setRoundingPrecision_r(Geos.current_handle_pointer, self.ptr, @rounding_precision)
75
+ FFIGeos.GEOSWKTWriter_setRoundingPrecision_r(Geos.current_handle_pointer, ptr, @rounding_precision)
79
76
  end
80
77
  end
81
78
 
@@ -83,9 +80,7 @@ module Geos
83
80
  # Available in GEOS 3.3+.
84
81
  def old_3d=(val)
85
82
  @old_3d = !!val
86
- FFIGeos.GEOSWKTWriter_setOld3D_r(Geos.current_handle_pointer, self.ptr,
87
- Geos::Tools.bool_to_int(@old_3d)
88
- )
83
+ FFIGeos.GEOSWKTWriter_setOld3D_r(Geos.current_handle_pointer, ptr, Geos::Tools.bool_to_int(@old_3d))
89
84
  end
90
85
  end
91
86
 
@@ -94,16 +89,16 @@ module Geos
94
89
  def output_dimensions=(dim)
95
90
  dim = dim.to_i
96
91
  if dim < 2 || dim > 3
97
- raise ArgumentError.new("Output dimensions must be either 2 or 3")
92
+ raise ArgumentError, 'Output dimensions must be either 2 or 3'
98
93
  end
99
- FFIGeos.GEOSWKTWriter_setOutputDimension_r(Geos.current_handle_pointer, self.ptr, dim)
94
+ FFIGeos.GEOSWKTWriter_setOutputDimension_r(Geos.current_handle_pointer, ptr, dim)
100
95
  end
101
96
  end
102
97
 
103
98
  if FFIGeos.respond_to?(:GEOSWKTWriter_getOutputDimension_r)
104
99
  # Available in GEOS 3.3+.
105
100
  def output_dimensions
106
- FFIGeos.GEOSWKTWriter_getOutputDimension_r(Geos.current_handle_pointer, self.ptr)
101
+ FFIGeos.GEOSWKTWriter_getOutputDimension_r(Geos.current_handle_pointer, ptr)
107
102
  end
108
103
  end
109
104
  end
@@ -0,0 +1,36 @@
1
+
2
+ inherit_from:
3
+ - ../.rubocop.yml
4
+
5
+ Metrics/BlockLength:
6
+ Description: 'Avoid long blocks with many lines.'
7
+ Enabled: false
8
+
9
+ Metrics/ModuleLength:
10
+ Description: 'Avoid modules longer than 300 lines of code.'
11
+ Enabled: false
12
+ Max: 300
13
+
14
+ Metrics/MethodLength:
15
+ Description: 'Avoid methods longer than 10 lines of code.'
16
+ StyleGuide: '#short-methods'
17
+ Enabled: false
18
+ Max: 50
19
+
20
+ Metrics/AbcSize:
21
+ Description: >-
22
+ A calculated magnitude based on number of assignments,
23
+ branches, and conditions.
24
+ Reference: 'http://c2.com/cgi/wiki?AbcMetric'
25
+ Enabled: true
26
+ Max: 50
27
+
28
+ Metrics/ClassLength:
29
+ Description: 'Avoid classes longer than 300 lines of code.'
30
+ Enabled: false
31
+ Max: 300
32
+
33
+ Metrics/ParameterLists:
34
+ Description: 'Avoid parameter lists longer than three or four parameters.'
35
+ StyleGuide: '#too-many-params'
36
+ Enabled: false