vector2d 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +17 -10
- data/lib/vector2d.rb +20 -1
- data/lib/vector2d/calculations.rb +17 -1
- data/lib/vector2d/coercions.rb +10 -1
- data/lib/vector2d/fitting.rb +5 -1
- data/lib/vector2d/properties.rb +8 -1
- data/lib/vector2d/transformations.rb +16 -2
- data/lib/vector2d/version.rb +1 -1
- data/spec/lib/vector2d/properties_spec.rb +3 -3
- data/spec/lib/vector2d_spec.rb +4 -4
- data/vector2d.gemspec +3 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12566131225e489c9e3f3404fbe3a223d51adf44
|
4
|
+
data.tar.gz: 45476593bbdbab2330fe991f1aa96aea00b9d3bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ded7745491872050fc9c92a98d11b6757478f5f7ab13e5c91031921854007adcd3d417d606fd8bf91d9ff6267296a2d363d792af4b77b4c6bf1e9095dc2a7ef
|
7
|
+
data.tar.gz: da6376921f75c0ccbe9ee65048b465f039379f18aead466620a9d36ffaa8258d83c1b96b8cf38c2b26e630804e762ad3782f3b9ac0c2ca9e1daeb592a511393e
|
data/Gemfile.lock
CHANGED
@@ -1,25 +1,32 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
vector2d (2.
|
4
|
+
vector2d (2.2.0)
|
5
|
+
contracts
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: http://rubygems.org/
|
8
9
|
specs:
|
9
10
|
codeclimate-test-reporter (0.3.0)
|
10
11
|
simplecov (>= 0.7.1, < 1.0.0)
|
12
|
+
contracts (0.7)
|
11
13
|
diff-lcs (1.2.5)
|
12
14
|
docile (1.1.4)
|
13
15
|
multi_json (1.10.1)
|
14
16
|
rake (10.3.2)
|
15
|
-
rspec (2.
|
16
|
-
rspec-core (~> 2.
|
17
|
-
rspec-expectations (~> 2.
|
18
|
-
rspec-mocks (~> 2.
|
19
|
-
rspec-core (2.
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
rspec (3.2.0)
|
18
|
+
rspec-core (~> 3.2.0)
|
19
|
+
rspec-expectations (~> 3.2.0)
|
20
|
+
rspec-mocks (~> 3.2.0)
|
21
|
+
rspec-core (3.2.1)
|
22
|
+
rspec-support (~> 3.2.0)
|
23
|
+
rspec-expectations (3.2.0)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.2.0)
|
26
|
+
rspec-mocks (3.2.1)
|
27
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
28
|
+
rspec-support (~> 3.2.0)
|
29
|
+
rspec-support (3.2.2)
|
23
30
|
simplecov (0.8.2)
|
24
31
|
docile (~> 1.1.0)
|
25
32
|
multi_json
|
@@ -32,5 +39,5 @@ PLATFORMS
|
|
32
39
|
DEPENDENCIES
|
33
40
|
codeclimate-test-reporter
|
34
41
|
rake (~> 10.3)
|
35
|
-
rspec (~> 2
|
42
|
+
rspec (~> 3.2)
|
36
43
|
vector2d!
|
data/lib/vector2d.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
require "contracts"
|
4
|
+
|
5
|
+
class Vector2d
|
6
|
+
include Contracts
|
7
|
+
VectorLike = Or[
|
8
|
+
[Num, Num],
|
9
|
+
{ x: Num, y: Num },
|
10
|
+
{ 'x' => Num, 'y' => Num },
|
11
|
+
Num,
|
12
|
+
String,
|
13
|
+
Vector2d
|
14
|
+
]
|
15
|
+
end
|
16
|
+
|
3
17
|
require 'vector2d/calculations'
|
4
18
|
require 'vector2d/coercions'
|
5
19
|
require 'vector2d/fitting'
|
@@ -27,6 +41,7 @@ class Vector2d
|
|
27
41
|
# Vector2d.parse({x: 150, y: 100})
|
28
42
|
# Vector2d.parse({"x" => 150.0, "y" => 100.0})
|
29
43
|
# Vector2d.parse(Vector2d(150, 100))
|
44
|
+
Contract VectorLike => Vector2d
|
30
45
|
def parse(arg, second_arg=nil)
|
31
46
|
if second_arg.nil?
|
32
47
|
parse_single_arg(arg)
|
@@ -37,6 +52,7 @@ class Vector2d
|
|
37
52
|
|
38
53
|
private
|
39
54
|
|
55
|
+
Contract VectorLike => Vector2d
|
40
56
|
def parse_single_arg(arg)
|
41
57
|
case arg
|
42
58
|
when Vector2d
|
@@ -52,12 +68,14 @@ class Vector2d
|
|
52
68
|
end
|
53
69
|
end
|
54
70
|
|
71
|
+
Contract Hash => Vector2d
|
55
72
|
def parse_hash(hash)
|
56
73
|
hash[:x] ||= hash['x'] if hash.has_key?('x')
|
57
74
|
hash[:y] ||= hash['y'] if hash.has_key?('y')
|
58
75
|
self.new(hash[:x], hash[:y])
|
59
76
|
end
|
60
77
|
|
78
|
+
Contract String => Vector2d
|
61
79
|
def parse_str(str)
|
62
80
|
if str =~ /^[\s]*[\d\.]*[\s]*x[\s]*[\d\.]*[\s]*$/
|
63
81
|
self.new(*str.split("x").map(&:to_f))
|
@@ -78,6 +96,7 @@ class Vector2d
|
|
78
96
|
# Vector2d(2, 3) == Vector2d(2, 3) # => true
|
79
97
|
# Vector2d(2, 3) == Vector2d(1, 0) # => false
|
80
98
|
#
|
99
|
+
Contract Vector2d => Bool
|
81
100
|
def ==(comp)
|
82
101
|
comp.x === x && comp.y === y
|
83
102
|
end
|
@@ -89,4 +108,4 @@ end
|
|
89
108
|
#
|
90
109
|
def Vector2d(*args)
|
91
110
|
Vector2d.parse(*args)
|
92
|
-
end
|
111
|
+
end
|
@@ -2,13 +2,18 @@
|
|
2
2
|
|
3
3
|
class Vector2d
|
4
4
|
module Calculations
|
5
|
+
include Contracts
|
6
|
+
|
5
7
|
module ClassMethods
|
8
|
+
include Contracts
|
9
|
+
|
6
10
|
# Calculates cross product of two vectors.
|
7
11
|
#
|
8
12
|
# v1 = Vector2d(2, 1)
|
9
13
|
# v2 = Vector2d(2, 3)
|
10
14
|
# Vector2d.cross_product(v1, v2) # => 4
|
11
15
|
#
|
16
|
+
Contract Vector2d, Vector2d => Num
|
12
17
|
def cross_product(vector1, vector2)
|
13
18
|
vector1.x * vector2.y - vector1.y * vector2.x
|
14
19
|
end
|
@@ -19,6 +24,7 @@ class Vector2d
|
|
19
24
|
# v2 = Vector2d(2, 3)
|
20
25
|
# Vector2d.dot_product(v1, v2) # => 10
|
21
26
|
#
|
27
|
+
Contract Vector2d, Vector2d => Num
|
22
28
|
def dot_product(vector1, vector2)
|
23
29
|
vector1.x * vector2.x + vector1.y * vector2.y
|
24
30
|
end
|
@@ -29,6 +35,7 @@ class Vector2d
|
|
29
35
|
# v2 = Vector2d(4, 5)
|
30
36
|
# Vector2d.angle_between(v1, v2) # => 0.0867..
|
31
37
|
#
|
38
|
+
Contract Vector2d, Vector2d => Num
|
32
39
|
def angle_between(vector1, vector2)
|
33
40
|
one = vector1.normalized? ? vector1 : vector1.normalize
|
34
41
|
two = vector2.normalized? ? vector2 : vector2.normalize
|
@@ -41,6 +48,7 @@ class Vector2d
|
|
41
48
|
# Vector2d(1, 2) * Vector2d(2, 3) # => Vector2d(2, 6)
|
42
49
|
# Vector2d(1, 2) * 2 # => Vector2d(2, 4)
|
43
50
|
#
|
51
|
+
Contract VectorLike => Vector2d
|
44
52
|
def *(other)
|
45
53
|
calculate_each(:*, other)
|
46
54
|
end
|
@@ -50,6 +58,7 @@ class Vector2d
|
|
50
58
|
# Vector2d(4, 2) / Vector2d(2, 1) # => Vector2d(2, 2)
|
51
59
|
# Vector2d(4, 2) / 2 # => Vector2d(2, 1)
|
52
60
|
#
|
61
|
+
Contract VectorLike => Vector2d
|
53
62
|
def /(other)
|
54
63
|
calculate_each(:/, other)
|
55
64
|
end
|
@@ -59,6 +68,7 @@ class Vector2d
|
|
59
68
|
# Vector2d(1, 2) + Vector2d(2, 3) # => Vector2d(3, 5)
|
60
69
|
# Vector2d(1, 2) + 2 # => Vector2d(3, 4)
|
61
70
|
#
|
71
|
+
Contract VectorLike => Vector2d
|
62
72
|
def +(other)
|
63
73
|
calculate_each(:+, other)
|
64
74
|
end
|
@@ -68,6 +78,7 @@ class Vector2d
|
|
68
78
|
# Vector2d(2, 3) - Vector2d(2, 1) # => Vector2d(0, 2)
|
69
79
|
# Vector2d(4, 3) - 1 # => Vector2d(3, 2)
|
70
80
|
#
|
81
|
+
Contract VectorLike => Vector2d
|
71
82
|
def -(other)
|
72
83
|
calculate_each(:-, other)
|
73
84
|
end
|
@@ -78,6 +89,7 @@ class Vector2d
|
|
78
89
|
# v2 = Vector2d(5, 6)
|
79
90
|
# v1.distance(v2) # => 1.4142..
|
80
91
|
#
|
92
|
+
Contract VectorLike => Num
|
81
93
|
def distance(other)
|
82
94
|
Math.sqrt(squared_distance(other))
|
83
95
|
end
|
@@ -88,6 +100,7 @@ class Vector2d
|
|
88
100
|
# v2 = Vector2d(5, 6)
|
89
101
|
# v1.distance_squared(v2) # => 18
|
90
102
|
#
|
103
|
+
Contract VectorLike => Num
|
91
104
|
def squared_distance(other)
|
92
105
|
v, _ = coerce(other)
|
93
106
|
dx = v.x - x
|
@@ -101,6 +114,7 @@ class Vector2d
|
|
101
114
|
# v2 = Vector2d(2, 3)
|
102
115
|
# v1.dot_product(v2) # => 10
|
103
116
|
#
|
117
|
+
Contract VectorLike => Num
|
104
118
|
def dot_product(other)
|
105
119
|
v, _ = coerce(other)
|
106
120
|
self.class.dot_product(self, v)
|
@@ -112,6 +126,7 @@ class Vector2d
|
|
112
126
|
# v2 = Vector2d(2, 3)
|
113
127
|
# v1.cross_product(v2) # => 4
|
114
128
|
#
|
129
|
+
Contract VectorLike => Num
|
115
130
|
def cross_product(other)
|
116
131
|
v, _ = coerce(other)
|
117
132
|
self.class.cross_product(self, v)
|
@@ -123,6 +138,7 @@ class Vector2d
|
|
123
138
|
# v2 = Vector2d(4, 5)
|
124
139
|
# v1.angle_between(v2) # => 0.0867..
|
125
140
|
#
|
141
|
+
Contract VectorLike => Num
|
126
142
|
def angle_between(other)
|
127
143
|
v, _ = coerce(other)
|
128
144
|
self.class.angle_between(self, v)
|
@@ -138,4 +154,4 @@ class Vector2d
|
|
138
154
|
)
|
139
155
|
end
|
140
156
|
end
|
141
|
-
end
|
157
|
+
end
|
data/lib/vector2d/coercions.rb
CHANGED
@@ -2,6 +2,9 @@
|
|
2
2
|
|
3
3
|
class Vector2d
|
4
4
|
module Coercions
|
5
|
+
include Contracts
|
6
|
+
|
7
|
+
Contract VectorLike => [Vector2d, Vector2d]
|
5
8
|
def coerce(other)
|
6
9
|
case other
|
7
10
|
when Vector2d
|
@@ -17,6 +20,7 @@ class Vector2d
|
|
17
20
|
#
|
18
21
|
# Vector2d(2, 3).inspect # => "Vector2d(2,3)"
|
19
22
|
#
|
23
|
+
Contract None => String
|
20
24
|
def inspect
|
21
25
|
"Vector2d(#{x},#{y})"
|
22
26
|
end
|
@@ -25,6 +29,7 @@ class Vector2d
|
|
25
29
|
#
|
26
30
|
# Vector2d(2, 3).to_a # => [2,3]
|
27
31
|
#
|
32
|
+
Contract None => [Num, Num]
|
28
33
|
def to_a
|
29
34
|
[x, y]
|
30
35
|
end
|
@@ -33,6 +38,7 @@ class Vector2d
|
|
33
38
|
#
|
34
39
|
# Vector2d(2, 3).to_hash # => {x: 2, y: 3}
|
35
40
|
#
|
41
|
+
Contract None => Hash
|
36
42
|
def to_hash
|
37
43
|
{ x: x, y: y }
|
38
44
|
end
|
@@ -41,6 +47,7 @@ class Vector2d
|
|
41
47
|
#
|
42
48
|
# Vector2d(2.0, 3.0).to_i_vector # => Vector2d(2,3)
|
43
49
|
#
|
50
|
+
Contract None => Vector2d
|
44
51
|
def to_i_vector
|
45
52
|
self.class.new(x.to_i, y.to_i)
|
46
53
|
end
|
@@ -49,6 +56,7 @@ class Vector2d
|
|
49
56
|
#
|
50
57
|
# Vector2d(2, 3).to_f_vector # => Vector2d(2.0,3.0)
|
51
58
|
#
|
59
|
+
Contract None => Vector2d
|
52
60
|
def to_f_vector
|
53
61
|
self.class.new(x.to_f, y.to_f)
|
54
62
|
end
|
@@ -57,8 +65,9 @@ class Vector2d
|
|
57
65
|
#
|
58
66
|
# Vector2d.new(150, 100).to_s # => "150x100"
|
59
67
|
#
|
68
|
+
Contract None => String
|
60
69
|
def to_s
|
61
70
|
"#{x}x#{y}"
|
62
71
|
end
|
63
72
|
end
|
64
|
-
end
|
73
|
+
end
|
data/lib/vector2d/fitting.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
class Vector2d
|
4
4
|
module Fitting
|
5
|
+
include Contracts
|
5
6
|
|
6
7
|
# Scales down the given vector unless it fits inside.
|
7
8
|
#
|
@@ -10,6 +11,7 @@ class Vector2d
|
|
10
11
|
# vector.contain(Vector2d(40, 20)) # => Vector2d(20,10)
|
11
12
|
# vector.contain(Vector2d(20, 40)) # => Vector2d(10,20)
|
12
13
|
#
|
14
|
+
Contract VectorLike => Vector2d
|
13
15
|
def contain(other)
|
14
16
|
v, _ = coerce(other)
|
15
17
|
(v.x > x || v.y > y) ? other.fit(self) : other
|
@@ -24,6 +26,7 @@ class Vector2d
|
|
24
26
|
#
|
25
27
|
# Note: Either axis will be disregarded if zero or nil. This is a feature, not a bug.
|
26
28
|
#
|
29
|
+
Contract VectorLike => Vector2d
|
27
30
|
def fit(other)
|
28
31
|
v, _ = coerce(other)
|
29
32
|
scale = v.to_f_vector / self
|
@@ -37,6 +40,7 @@ class Vector2d
|
|
37
40
|
# Vector2d(20, 10).fit_either(constraint) # => Vector2d(10,5)
|
38
41
|
# Vector2d(10, 20).fit_either(constraint) # => Vector2d(5,10)
|
39
42
|
#
|
43
|
+
Contract VectorLike => Vector2d
|
40
44
|
def fit_either(other)
|
41
45
|
v, _ = coerce(other)
|
42
46
|
scale = v.to_f_vector / self
|
@@ -49,4 +53,4 @@ class Vector2d
|
|
49
53
|
end
|
50
54
|
alias_method :constrain_one, :fit_either
|
51
55
|
end
|
52
|
-
end
|
56
|
+
end
|
data/lib/vector2d/properties.rb
CHANGED
@@ -2,10 +2,13 @@
|
|
2
2
|
|
3
3
|
class Vector2d
|
4
4
|
module Properties
|
5
|
+
include Contracts
|
6
|
+
|
5
7
|
# Angle of vector.
|
6
8
|
#
|
7
9
|
# Vector2d(2, 3).angle # => 0.9827..
|
8
10
|
#
|
11
|
+
Contract None => Num
|
9
12
|
def angle
|
10
13
|
Math.atan2(y, x)
|
11
14
|
end
|
@@ -14,6 +17,7 @@ class Vector2d
|
|
14
17
|
#
|
15
18
|
# Vector2d(2, 3).aspect_ratio # => 0.6667..
|
16
19
|
#
|
20
|
+
Contract None => Num
|
17
21
|
def aspect_ratio
|
18
22
|
(x.to_f / y.to_f).abs
|
19
23
|
end
|
@@ -22,6 +26,7 @@ class Vector2d
|
|
22
26
|
#
|
23
27
|
# Vector2d(2, 3).length # => 3.6055..
|
24
28
|
#
|
29
|
+
Contract None => Num
|
25
30
|
def length
|
26
31
|
Math.sqrt(squared_length)
|
27
32
|
end
|
@@ -30,6 +35,7 @@ class Vector2d
|
|
30
35
|
#
|
31
36
|
# Vector2d(2, 3).squared_length # => 13
|
32
37
|
#
|
38
|
+
Contract None => Num
|
33
39
|
def squared_length
|
34
40
|
x * x + y * y
|
35
41
|
end
|
@@ -39,8 +45,9 @@ class Vector2d
|
|
39
45
|
# Vector2d(0, 1).normalized? # => true
|
40
46
|
# Vector2d(2, 3).normalized? # => false
|
41
47
|
#
|
48
|
+
Contract None => Bool
|
42
49
|
def normalized?
|
43
50
|
self.length.to_f == 1.0
|
44
51
|
end
|
45
52
|
end
|
46
|
-
end
|
53
|
+
end
|
@@ -2,10 +2,13 @@
|
|
2
2
|
|
3
3
|
class Vector2d
|
4
4
|
module Transformations
|
5
|
+
include Contracts
|
6
|
+
|
5
7
|
# Rounds vector to up nearest integer.
|
6
8
|
#
|
7
9
|
# Vector2d(2.4, 3.6).ceil # => Vector2d(3,4)
|
8
10
|
#
|
11
|
+
Contract None => Vector2d
|
9
12
|
def ceil
|
10
13
|
self.class.new(x.ceil, y.ceil)
|
11
14
|
end
|
@@ -14,6 +17,7 @@ class Vector2d
|
|
14
17
|
#
|
15
18
|
# Vector2d(2.4, 3.6).floor # => Vector2d(2,3)
|
16
19
|
#
|
20
|
+
Contract None => Vector2d
|
17
21
|
def floor
|
18
22
|
self.class.new(x.floor, y.floor)
|
19
23
|
end
|
@@ -24,6 +28,7 @@ class Vector2d
|
|
24
28
|
# vector.normalize # => Vector2d(0.5547.., 0.8320..)
|
25
29
|
# vector.normalize.length # => 1.0
|
26
30
|
#
|
31
|
+
Contract None => Vector2d
|
27
32
|
def normalize
|
28
33
|
resize(1.0)
|
29
34
|
end
|
@@ -32,6 +37,7 @@ class Vector2d
|
|
32
37
|
#
|
33
38
|
# Vector2d(2, 3).perpendicular # => Vector2d(-3,2)
|
34
39
|
#
|
40
|
+
Contract None => Vector2d
|
35
41
|
def perpendicular
|
36
42
|
Vector2d.new(-y, x)
|
37
43
|
end
|
@@ -40,6 +46,7 @@ class Vector2d
|
|
40
46
|
#
|
41
47
|
# Vector2d(2, 3).resize(1.0) # => Vector2d(0.5547.., 0.8320..)
|
42
48
|
#
|
49
|
+
Contract Num => Vector2d
|
43
50
|
def resize(new_length)
|
44
51
|
self * (new_length / self.length)
|
45
52
|
end
|
@@ -48,6 +55,7 @@ class Vector2d
|
|
48
55
|
#
|
49
56
|
# Vector2d(2, 3).reverse # => Vector2d(-2,-3)
|
50
57
|
#
|
58
|
+
Contract None => Vector2d
|
51
59
|
def reverse
|
52
60
|
self.class.new(-x, -y)
|
53
61
|
end
|
@@ -56,8 +64,12 @@ class Vector2d
|
|
56
64
|
#
|
57
65
|
# Vector2d(1, 0).rotate(Math:PI/2) => Vector2d(1,0)
|
58
66
|
#
|
67
|
+
Contract Num => Vector2d
|
59
68
|
def rotate(angle)
|
60
|
-
Vector2d.new(
|
69
|
+
Vector2d.new(
|
70
|
+
x * Math.cos(angle) - y * Math.sin(angle),
|
71
|
+
x * Math.sin(angle) + y * Math.cos(angle)
|
72
|
+
)
|
61
73
|
end
|
62
74
|
|
63
75
|
# Rounds vector to nearest integer.
|
@@ -65,6 +77,7 @@ class Vector2d
|
|
65
77
|
# Vector2d(2.4, 3.6).round # => Vector2d(2,4)
|
66
78
|
# Vector2d(2.4444, 3.666).round(2) # => Vector2d(2.44, 3.67)
|
67
79
|
#
|
80
|
+
Contract Or[None, Num] => Vector2d
|
68
81
|
def round(digits=0)
|
69
82
|
self.class.new(x.round(digits), y.round(digits))
|
70
83
|
end
|
@@ -75,8 +88,9 @@ class Vector2d
|
|
75
88
|
# vector.truncate(5.0) # => Vector2d(2.0, 3.0)
|
76
89
|
# vector.truncate(1.0) # => Vector2d(0.5547.., 0.8320..)
|
77
90
|
#
|
91
|
+
Contract Num => Vector2d
|
78
92
|
def truncate(max)
|
79
93
|
resize([max, self.length].min)
|
80
94
|
end
|
81
95
|
end
|
82
|
-
end
|
96
|
+
end
|
data/lib/vector2d/version.rb
CHANGED
@@ -33,11 +33,11 @@ describe Vector2d::Properties do
|
|
33
33
|
subject { vector.normalized? }
|
34
34
|
context "when vector is normalized" do
|
35
35
|
let(:vector) { Vector2d.new(2, 3).normalize }
|
36
|
-
it {
|
36
|
+
it { is_expected.to eq(true) }
|
37
37
|
end
|
38
38
|
context "when vector isn't normalized" do
|
39
39
|
let(:vector) { Vector2d.new(2, 3) }
|
40
|
-
it {
|
40
|
+
it { is_expected.to eq(false) }
|
41
41
|
end
|
42
42
|
end
|
43
|
-
end
|
43
|
+
end
|
data/spec/lib/vector2d_spec.rb
CHANGED
@@ -70,17 +70,17 @@ describe Vector2d do
|
|
70
70
|
|
71
71
|
context "with both arguments equal" do
|
72
72
|
let(:comp) { Vector2d.new(2, 3) }
|
73
|
-
it {
|
73
|
+
it { is_expected.to eq(true) }
|
74
74
|
end
|
75
75
|
|
76
76
|
context "with x differing" do
|
77
77
|
let(:comp) { Vector2d.new(3, 3) }
|
78
|
-
it {
|
78
|
+
it { is_expected.to eq(false) }
|
79
79
|
end
|
80
80
|
|
81
81
|
context "with y differing" do
|
82
82
|
let(:comp) { Vector2d.new(2, 4) }
|
83
|
-
it {
|
83
|
+
it { is_expected.to eq(false) }
|
84
84
|
end
|
85
85
|
end
|
86
|
-
end
|
86
|
+
end
|
data/vector2d.gemspec
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
# Generated by jeweler
|
2
3
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
4
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
@@ -25,5 +26,6 @@ Gem::Specification.new do |s|
|
|
25
26
|
|
26
27
|
# specify any dependencies here; for example:
|
27
28
|
s.add_development_dependency "rake", "~> 10.3"
|
28
|
-
s.add_development_dependency "rspec", "~> 2
|
29
|
+
s.add_development_dependency "rspec", "~> 3.2"
|
30
|
+
s.add_dependency "contracts"
|
29
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vector2d
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Inge Jørgensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -30,14 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '2
|
33
|
+
version: '3.2'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '2
|
40
|
+
version: '3.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: contracts
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: Vector2d allows for easy handling of two-dimensionals coordinates and
|
42
56
|
vectors
|
43
57
|
email:
|