Skip to content

Commit b0e8c18

Browse files
committed
Merge branch 'release/v1.0.5'
2 parents efd6589 + f088960 commit b0e8c18

File tree

10 files changed

+153
-32
lines changed

10 files changed

+153
-32
lines changed

Rakefile

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,49 @@
1+
lib = File.expand_path("../lib", __FILE__)
2+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3+
4+
require "rake/version_task"
15
require "bundler/gem_tasks"
6+
#require "rubygems"
7+
#require "rubygems/package_task"
28
require "rspec/core/rake_task"
39
require "yard"
410
require "yard/rake/yardoc_task"
11+
require "quadtree"
512

613
RSpec::Core::RakeTask.new(:spec)
714

15+
spec = Gem::Specification.new do |s|
16+
s.name = "quadtree"
17+
s.version = Quadtree::VERSION
18+
s.authors = ["Jan Lindblom"]
19+
s.email = ["janlindblom@fastmail.fm"]
20+
21+
s.summary = %q{Quadtrees in Ruby.}
22+
s.homepage = "https://bitbucket.org/janlindblom/ruby-quadtree"
23+
s.license = "MIT"
24+
25+
s.files = `git ls-files -z`.split("\x0").reject do |f|
26+
f.match(%r{^(test|spec|features|.editorconfig|.travis.yml|bitbucket-pipelines.yml|.rspec|.gitignore)/})
27+
end
28+
s.bindir = "exe"
29+
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
30+
s.require_paths = ["lib"]
31+
32+
s.required_ruby_version = '>= 2.4.0'
33+
34+
s.add_development_dependency "bundler", "~> 1.14"
35+
s.add_development_dependency "rake", "~> 10.0"
36+
s.add_development_dependency "rspec", "~> 3.0"
37+
s.add_development_dependency "pry", "~> 0.11"
38+
s.add_development_dependency "yard", "~> 0.9"
39+
s.add_runtime_dependency "version", "~> 1.1"
40+
end
41+
42+
Rake::VersionTask.new do |task|
43+
task.with_gemspec = spec
44+
task.with_git = false
45+
end
46+
847
YARD::Rake::YardocTask.new do |t|
948
t.files = ['lib/**/*.rb']
1049
t.stats_options = ['--list-undoc']

VERSION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1.0.5

bin/console

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,13 @@
33
require "bundler/setup"
44
require "quadtree"
55

6+
def create_random_point
7+
Quadtree::Point.new(-100.0 + SecureRandom.random_number(200.0),
8+
-100.0 + SecureRandom.random_number(200.0))
9+
end
10+
11+
@getaboden = Quadtree::Point.new(19.8470050, 60.3747940)
12+
@mattssons = Quadtree::Point.new(19.9895930, 60.2302620)
13+
614
require "pry"
715
Pry.start

lib/quadtree.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
require "version"
12
require "quadtree/version"
23

4+
require "quadtree/unknown_type_error"
5+
36
require "quadtree/point"
47
require "quadtree/axis_aligned_bounding_box"
58
require "quadtree/quadtree"
@@ -8,5 +11,4 @@
811
#
912
# @author Jan Lindblom <janlindblom@fastmail.fm>
1013
module Quadtree
11-
1214
end

lib/quadtree/point.rb

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,29 @@ module Quadtree
33
class Point
44

55
# The X coordinate of this instance.
6-
# @return [Float] X coordinate.
6+
# @return [Float, Integer] X coordinate.
77
attr_accessor :x
88

99
# The Y coordinate of this instance.
10-
# @return [Float] Y coordinate.
10+
# @return [Float, Integer] Y coordinate.
1111
attr_accessor :y
1212

1313
# Optional payload attached to this instance.
1414
# @return [Object] payload attached to this instance.
1515
attr_accessor :data
1616

17-
# @param x [Float, Numeric] X coordinate.
18-
# @param y [Float, Numeric] Y coordinate.
17+
# @param x [Float, Integer] X coordinate.
18+
# @param y [Float, Integer] Y coordinate.
1919
# @param data [Object] payload payload attached to this instance
2020
# (optional).
21+
# @raise [UnknownTypeError] if one or more input parameters (+x+ and +y+)
22+
# has the wrong type.
2123
def initialize(x, y, data=nil)
22-
@x = x.to_f
23-
@y = y.to_f
24-
@data = data unless data.nil?
24+
25+
self.x = get_typed_numeric(x)
26+
self.y = get_typed_numeric(y)
27+
28+
self.data = data unless data.nil?
2529
end
2630

2731
# This will calculate distance to another {Point}, given that they are
@@ -67,5 +71,37 @@ def haversine_distance_to(other)
6771
# d = R ⋅ c
6872
return r * c
6973
end
74+
75+
private
76+
77+
def get_typed_numeric(any_input)
78+
typed_output = nil
79+
# Try integer first since float will parse integers too
80+
return get_integer(any_input) unless get_integer(any_input).nil?
81+
# Try Float next
82+
return get_float(any_input) unless get_float(any_input).nil?
83+
84+
raise UnknownTypeError.new "Unknown type for parameter: #{any_input.class}"
85+
86+
#typed_output
87+
end
88+
89+
def get_integer(any_input)
90+
return Integer(any_input) if any_input.is_a? String
91+
return any_input if any_input.is_a? Integer
92+
93+
nil
94+
rescue
95+
nil
96+
end
97+
98+
def get_float(any_input)
99+
return Float(any_input) if any_input.is_a? String
100+
return any_input if any_input.is_a? Float
101+
102+
nil
103+
rescue
104+
nil
105+
end
70106
end
71107
end

lib/quadtree/unknown_type_error.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module Quadtree
2+
# An error for unknown types.
3+
# @since 1.0.5
4+
class UnknownTypeError < StandardError
5+
6+
end
7+
end

lib/quadtree/version.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
require "version"
2+
13
module Quadtree
2-
# Current version
3-
VERSION = "1.0.4"
4+
is_versioned
45
end

quadtree.gemspec

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,47 @@
1+
# -*- encoding: utf-8 -*-
2+
# stub: quadtree 1.0.5 ruby lib
13

2-
lib = File.expand_path("../lib", __FILE__)
3-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4-
require "quadtree/version"
4+
Gem::Specification.new do |s|
5+
s.name = "quadtree".freeze
6+
s.version = "1.0.5"
57

6-
Gem::Specification.new do |spec|
7-
spec.name = "quadtree"
8-
spec.version = Quadtree::VERSION
9-
spec.authors = ["Jan Lindblom"]
10-
spec.email = ["jan.lindblom@mittmedia.se"]
8+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
9+
s.require_paths = ["lib".freeze]
10+
s.authors = ["Jan Lindblom".freeze]
11+
s.bindir = "exe".freeze
12+
s.date = "2018-04-03"
13+
s.email = ["janlindblom@fastmail.fm".freeze]
14+
s.files = [".editorconfig".freeze, ".gitignore".freeze, ".rspec".freeze, ".travis.yml".freeze, "CODE_OF_CONDUCT.md".freeze, "Gemfile".freeze, "LICENSE.txt".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/console".freeze, "bin/setup".freeze, "bitbucket-pipelines.yml".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+
s.homepage = "https://bitbucket.org/janlindblom/ruby-quadtree".freeze
16+
s.licenses = ["MIT".freeze]
17+
s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
18+
s.rubygems_version = "2.6.13".freeze
19+
s.summary = "Quadtrees in Ruby.".freeze
1120

12-
spec.summary = %q{Quadtrees in Ruby.}
13-
spec.homepage = "https://bitbucket.org/janlindblom/ruby-quadtree"
14-
spec.license = "MIT"
21+
if s.respond_to? :specification_version then
22+
s.specification_version = 4
1523

16-
spec.files = `git ls-files -z`.split("\x0").reject do |f|
17-
f.match(%r{^(test|spec|features)/})
24+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
25+
s.add_development_dependency(%q<bundler>.freeze, ["~> 1.14"])
26+
s.add_development_dependency(%q<rake>.freeze, ["~> 10.0"])
27+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.0"])
28+
s.add_development_dependency(%q<pry>.freeze, ["~> 0.11"])
29+
s.add_development_dependency(%q<yard>.freeze, ["~> 0.9"])
30+
s.add_runtime_dependency(%q<version>.freeze, ["~> 1.1"])
31+
else
32+
s.add_dependency(%q<bundler>.freeze, ["~> 1.14"])
33+
s.add_dependency(%q<rake>.freeze, ["~> 10.0"])
34+
s.add_dependency(%q<rspec>.freeze, ["~> 3.0"])
35+
s.add_dependency(%q<pry>.freeze, ["~> 0.11"])
36+
s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
37+
s.add_dependency(%q<version>.freeze, ["~> 1.1"])
38+
end
39+
else
40+
s.add_dependency(%q<bundler>.freeze, ["~> 1.14"])
41+
s.add_dependency(%q<rake>.freeze, ["~> 10.0"])
42+
s.add_dependency(%q<rspec>.freeze, ["~> 3.0"])
43+
s.add_dependency(%q<pry>.freeze, ["~> 0.11"])
44+
s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
45+
s.add_dependency(%q<version>.freeze, ["~> 1.1"])
1846
end
19-
spec.bindir = "exe"
20-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21-
spec.require_paths = ["lib"]
22-
23-
spec.add_development_dependency "bundler", "~> 1.14"
24-
spec.add_development_dependency "rake", "~> 10.0"
25-
spec.add_development_dependency "rspec", "~> 3.0"
26-
spec.add_development_dependency "pry", "~> 0.11"
27-
spec.add_development_dependency "yard", "~> 0.9"
2847
end

spec/quadtree_point_spec.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
RSpec.describe Quadtree::Point do
44
before :all do
55
@point = create_random_point
6+
@integer_point = create_random_integer_point
67
@getaboden = create_point_getaboden
78
@mattssons = create_point_mattssons
89
end
@@ -14,10 +15,12 @@
1415

1516
it "has an X coordinate" do
1617
expect(@point.x).to be_a Float
18+
expect(@integer_point.x).to be_a Integer
1719
end
1820

1921
it "has a Y coordinate" do
2022
expect(@point.y).to be_a Float
23+
expect(@integer_point.y).to be_a Integer
2124
end
2225

2326
it "can carry a payload" do

spec/spec_helper.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ def create_random_point
77
-100.0 + SecureRandom.random_number(200.0))
88
end
99

10+
def create_random_integer_point
11+
Quadtree::Point.new((-100.0 + SecureRandom.random_number(200.0)).to_i,
12+
(-100.0 + SecureRandom.random_number(200.0)).to_i)
13+
end
14+
1015
def create_point_getaboden
1116
Quadtree::Point.new(19.8470050, 60.3747940)
1217
end

0 commit comments

Comments
 (0)