quadtree 1.0.6 → 1.0.7

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.
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