quadtree 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 241f5c8388464e4a8b97acf7d22a4242af1e30d0
4
- data.tar.gz: f9094be225bc087ec070794b994d1062a8627bf3
3
+ metadata.gz: 93b38a02013f5c97126e742d2262be25f388e4c1
4
+ data.tar.gz: 82bb915f6bddf1f6c1f187cbaf5a3a6eb3a47b0d
5
5
  SHA512:
6
- metadata.gz: ec1a8b45c55ac668e07b72b38623f3ba0b0e8ef6519e227c557c39727db56d7935eb0537f059e8d23c9f6cfc3580a52fd0a5f888c63749391c3d05149dacd21b
7
- data.tar.gz: a436dc867d33241dc15b0b77fdefdec5811b4c94a8b97efa1e50a32d73a0f2f1e2ccffdfb6b6305e07cccd0a3466fbbab9d6a2863c22979412aaef505fddebe7
6
+ metadata.gz: f18c67ee620d739ddda87a0550f06eb770bb512a7781a0f1d534bdb3cbc51ee1d39fab47e96af94b2d7e75ad298d3b85bdc98ddb48d102efc53fe62be6233397
7
+ data.tar.gz: 3265235a06f9b067928906086849cca271a78eba0eec2efa48b6e4b6a1e065f006fa8d9274501724101c84e1ba0b69c7687eeac317312bd367f12bf4e7772381
data/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # Quadtree
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/quadtree.svg)](https://badge.fury.io/rb/quadtree)
4
- ![Build Status](https://codebuild.us-east-1.amazonaws.com/badges?uuid=eyJlbmNyeXB0ZWREYXRhIjoibFBLaWRWODEwbjl4dWV1UWdFUDlKa3dqVkZOb3RJTytBRHg5WVU3bGV6TUdTSjFRSWtRYnVZdC9zWkVvUldTdkMwOFQ2cU8rdGQ4dzFBeFN3UE9jR1g4PSIsIml2UGFyYW1ldGVyU3BlYyI6IkJUSU0rdFJhWXRIbDVzckciLCJtYXRlcmlhbFNldFNlcmlhbCI6MX0%3D&branch=master)
3
+ ![Build Status](https://codebuild.us-east-1.amazonaws.com/badges?uuid=eyJlbmNyeXB0ZWREYXRhIjoidk1aMm1Ya212SjRsU1pVdWNVZ2FRTDVPUXlVM2NsY0dWU2UxL1dEUlh2VTdxdURhcmxRK1JDTGg5OXJxeURKeFRiZXV5VEtTbmRBZCt6bTdDTms1Rm5ZPSIsIml2UGFyYW1ldGVyU3BlYyI6ImlUamttMGtUckZRT0tvM0EiLCJtYXRlcmlhbFNldFNlcmlhbCI6MX0%3D&branch=master)
4
+ [![Bitbucket Pipelines](https://img.shields.io/bitbucket/pipelines/janlindblom/ruby-quadtree.png)](https://bitbucket.org/janlindblom/ruby-quadtree)
5
+ [![Gem](https://img.shields.io/gem/v/quadtree.png)](https://rubygems.org/gems/quadtree)
6
+ [![Documentation](https://img.shields.io/badge/docs-rdoc.info-yellow.png)](http://www.rubydoc.info/gems/quadtree/frames)
5
7
 
6
8
  Quadtrees in Ruby. For searching spatially related nodes in some space, you know.
7
9
 
@@ -50,7 +52,7 @@ qt.query_range(boundary2)
50
52
 
51
53
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
52
54
 
53
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
55
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number using `rake version:create` or `rake version:bump`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
54
56
 
55
57
  ## Contributing
56
58
 
data/Rakefile CHANGED
@@ -3,11 +3,10 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  require "rake/version_task"
5
5
  require "bundler/gem_tasks"
6
- #require "rubygems"
7
- #require "rubygems/package_task"
8
6
  require "rspec/core/rake_task"
9
7
  require "yard"
10
8
  require "yard/rake/yardoc_task"
9
+ require 'rubocop/rake_task'
11
10
  require "quadtree"
12
11
 
13
12
  RSpec::Core::RakeTask.new(:spec)
@@ -39,6 +38,8 @@ spec = Gem::Specification.new do |s|
39
38
  s.add_development_dependency "rspec", "~> 3.0"
40
39
  s.add_development_dependency "pry", "~> 0.11"
41
40
  s.add_development_dependency "yard", "~> 0.9"
41
+ s.add_development_dependency "simplecov", "~> 0.16"
42
+ s.add_development_dependency "rubocop", "~> 0.54"
42
43
  s.add_runtime_dependency "version", "~> 1.1"
43
44
  end
44
45
 
@@ -52,4 +53,12 @@ YARD::Rake::YardocTask.new do |t|
52
53
  t.stats_options = ['--list-undoc']
53
54
  end
54
55
 
56
+ RuboCop::RakeTask.new(:rubocop) do |task|
57
+ task.patterns = ['lib/**/*.rb']
58
+ # only show the files with failures
59
+ task.formatters = ['worst']
60
+ # don't abort rake on failure
61
+ task.fail_on_error = false
62
+ end
63
+
55
64
  task :default => :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.6
1
+ 1.0.7
@@ -1,7 +1,6 @@
1
1
  module Quadtree
2
2
  # A Quadtree.
3
3
  class Quadtree
4
-
5
4
  # Arbitrary constant to indicate how many elements can be stored in this
6
5
  # quad tree node.
7
6
  # @return [Integer] number of {Point}s this {Quadtree} can hold.
@@ -34,7 +33,7 @@ module Quadtree
34
33
  # @return [Quadtree]
35
34
  attr_accessor :south_east
36
35
 
37
- # @param boundary [AxisAlignedBoundingBox] the boundary for this {Quadtree}
36
+ # @param boundary [AxisAlignedBoundingBox] the boundary for this {Quadtree}.
38
37
  def initialize(boundary)
39
38
  self.boundary = boundary
40
39
  self.points = []
@@ -49,69 +48,92 @@ module Quadtree
49
48
  # @param point [Point] the point to insert.
50
49
  # @return [Boolean] +true+ on success, +false+ otherwise.
51
50
  def insert!(point)
52
- return false unless self.boundary.contains_point?(point)
51
+ return false unless boundary.contains_point?(point)
53
52
 
54
- if self.points.size < NODE_CAPACITY
55
- self.points << point
53
+ if points.size < NODE_CAPACITY
54
+ points << point
56
55
  return true
57
56
  end
58
57
 
59
- subdivide! if self.north_west.nil?
60
- return true if self.north_west.insert!(point)
61
- return true if self.north_east.insert!(point)
62
- return true if self.south_west.insert!(point)
63
- return true if self.south_east.insert!(point)
58
+ subdivide! if north_west.nil?
59
+ return true if north_west.insert!(point)
60
+ return true if north_east.insert!(point)
61
+ return true if south_west.insert!(point)
62
+ return true if south_east.insert!(point)
64
63
 
65
64
  false
66
65
  end
67
66
 
67
+ # Return the size of this instance, the number of {Point}s stored in this
68
+ # {Quadtree}.
69
+ # @return [Integer] the size of this instance.
70
+ def size
71
+ count = 0
72
+ count += points.size
73
+ unless north_west.nil?
74
+ count += north_west.size
75
+ count += north_east.size
76
+ count += south_west.size
77
+ count += south_east.size
78
+ end
79
+ count
80
+ end
81
+
68
82
  # Finds all points contained within a range.
69
83
  #
70
84
  # @param range [AxisAlignedBoundingBox] the range to search within.
71
- # @return [Array<Point>]
85
+ # @return [Array<Point>] all {Point}s in given range.
72
86
  def query_range(range)
73
87
  # Prepare an array of results
74
88
  points_in_range = []
75
89
 
76
90
  # Automatically abort if the range does not intersect this quad
77
- return points_in_range unless self.boundary.intersects?(range)
91
+ return points_in_range unless boundary.intersects?(range)
78
92
 
79
93
  # Check objects at this quad level
80
- self.points.each do |point|
94
+ points.each do |point|
81
95
  points_in_range << point if range.contains_point?(point)
82
96
  end
83
97
 
84
98
  # Terminate here, if there are no children
85
- return points_in_range if self.north_west.nil?
99
+ return points_in_range if north_west.nil?
86
100
 
87
101
  # Otherwise, add the points from the children
88
- points_in_range += self.north_west.query_range(range)
89
- points_in_range += self.north_east.query_range(range)
90
- points_in_range += self.south_west.query_range(range)
91
- points_in_range += self.south_east.query_range(range)
102
+ points_in_range += north_west.query_range(range)
103
+ points_in_range += north_east.query_range(range)
104
+ points_in_range += south_west.query_range(range)
105
+ points_in_range += south_east.query_range(range)
92
106
 
93
107
  points_in_range
94
108
  end
95
109
 
96
110
  private
97
111
 
98
- # @return [Boolean]
112
+ # @return [Boolean] +true+ on success, +false+ otherwise.
99
113
  def subdivide!
100
- left_edge = self.boundary.left
101
- right_edge = self.boundary.right
102
- top_edge = self.boundary.top
103
- bottom_edge = self.boundary.bottom
104
- quad_half_dimension = self.boundary.half_dimension / 2
105
-
106
- north_west_center = Point.new left_edge + quad_half_dimension, top_edge - quad_half_dimension
107
- north_east_center = Point.new right_edge - quad_half_dimension, top_edge - quad_half_dimension
108
- south_east_center = Point.new left_edge + quad_half_dimension, bottom_edge + quad_half_dimension
109
- south_west_center = Point.new right_edge - quad_half_dimension, bottom_edge + quad_half_dimension
110
-
111
- north_west_boundary = AxisAlignedBoundingBox.new north_west_center, quad_half_dimension
112
- north_east_boundary = AxisAlignedBoundingBox.new north_east_center, quad_half_dimension
113
- south_west_boundary = AxisAlignedBoundingBox.new south_west_center, quad_half_dimension
114
- south_east_boundary = AxisAlignedBoundingBox.new south_east_center, quad_half_dimension
114
+ left_edge = boundary.left
115
+ right_edge = boundary.right
116
+ top_edge = boundary.top
117
+ bottom_edge = boundary.bottom
118
+ quad_half_dimension = boundary.half_dimension / 2
119
+
120
+ north_west_center = Point.new(left_edge + quad_half_dimension,
121
+ top_edge - quad_half_dimension)
122
+ north_east_center = Point.new(right_edge - quad_half_dimension,
123
+ top_edge - quad_half_dimension)
124
+ south_east_center = Point.new(left_edge + quad_half_dimension,
125
+ bottom_edge + quad_half_dimension)
126
+ south_west_center = Point.new(right_edge - quad_half_dimension,
127
+ bottom_edge + quad_half_dimension)
128
+
129
+ north_west_boundary = AxisAlignedBoundingBox.new(north_west_center,
130
+ quad_half_dimension)
131
+ north_east_boundary = AxisAlignedBoundingBox.new(north_east_center,
132
+ quad_half_dimension)
133
+ south_west_boundary = AxisAlignedBoundingBox.new(south_west_center,
134
+ quad_half_dimension)
135
+ south_east_boundary = AxisAlignedBoundingBox.new(south_east_center,
136
+ quad_half_dimension)
115
137
 
116
138
  self.north_west = Quadtree.new north_west_boundary
117
139
  self.north_east = Quadtree.new north_east_boundary
@@ -119,8 +141,7 @@ module Quadtree
119
141
  self.south_east = Quadtree.new south_east_boundary
120
142
 
121
143
  true
122
- rescue => error
123
- puts "Something went wrong: #{error}"
144
+ rescue StandardError
124
145
  false
125
146
  end
126
147
  end
data/quadtree.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: quadtree 1.0.6 ruby lib
2
+ # stub: quadtree 1.0.7 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "quadtree".freeze
6
- s.version = "1.0.6"
6
+ s.version = "1.0.7"
7
7
 
8
- s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
8
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Jan Lindblom".freeze]
11
11
  s.bindir = "exe".freeze
12
- s.date = "2018-04-03"
12
+ s.date = "2018-04-04"
13
13
  s.email = ["janlindblom@fastmail.fm".freeze]
14
14
  s.files = [".editorconfig".freeze, ".gitignore".freeze, ".rspec".freeze, "CODE_OF_CONDUCT.md".freeze, "Gemfile".freeze, "LICENSE.txt".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "lib/quadtree.rb".freeze, "lib/quadtree/axis_aligned_bounding_box.rb".freeze, "lib/quadtree/point.rb".freeze, "lib/quadtree/quadtree.rb".freeze, "lib/quadtree/unknown_type_error.rb".freeze, "lib/quadtree/version.rb".freeze, "quadtree.gemspec".freeze]
15
15
  s.homepage = "https://bitbucket.org/janlindblom/ruby-quadtree".freeze
@@ -27,6 +27,8 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency(%q<rspec>.freeze, ["~> 3.0"])
28
28
  s.add_development_dependency(%q<pry>.freeze, ["~> 0.11"])
29
29
  s.add_development_dependency(%q<yard>.freeze, ["~> 0.9"])
30
+ s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.16"])
31
+ s.add_development_dependency(%q<rubocop>.freeze, ["~> 0.54"])
30
32
  s.add_runtime_dependency(%q<version>.freeze, ["~> 1.1"])
31
33
  else
32
34
  s.add_dependency(%q<bundler>.freeze, ["~> 1.14"])
@@ -34,6 +36,8 @@ Gem::Specification.new do |s|
34
36
  s.add_dependency(%q<rspec>.freeze, ["~> 3.0"])
35
37
  s.add_dependency(%q<pry>.freeze, ["~> 0.11"])
36
38
  s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
39
+ s.add_dependency(%q<simplecov>.freeze, ["~> 0.16"])
40
+ s.add_dependency(%q<rubocop>.freeze, ["~> 0.54"])
37
41
  s.add_dependency(%q<version>.freeze, ["~> 1.1"])
38
42
  end
39
43
  else
@@ -42,6 +46,8 @@ Gem::Specification.new do |s|
42
46
  s.add_dependency(%q<rspec>.freeze, ["~> 3.0"])
43
47
  s.add_dependency(%q<pry>.freeze, ["~> 0.11"])
44
48
  s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
49
+ s.add_dependency(%q<simplecov>.freeze, ["~> 0.16"])
50
+ s.add_dependency(%q<rubocop>.freeze, ["~> 0.54"])
45
51
  s.add_dependency(%q<version>.freeze, ["~> 1.1"])
46
52
  end
47
53
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quadtree
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Lindblom
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-03 00:00:00.000000000 Z
11
+ date: 2018-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.9'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.16'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.16'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.54'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.54'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: version
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -132,9 +160,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
132
160
  version: 2.3.0
133
161
  required_rubygems_version: !ruby/object:Gem::Requirement
134
162
  requirements:
135
- - - ">="
163
+ - - ">"
136
164
  - !ruby/object:Gem::Version
137
- version: '0'
165
+ version: 1.3.1
138
166
  requirements: []
139
167
  rubyforge_project:
140
168
  rubygems_version: 2.6.13