cellular_map 0.1.0 → 0.2.0
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.
- data/lib/cellular_map/zone.rb +25 -10
- data/test/test_zone.rb +6 -0
- metadata +1 -1
data/lib/cellular_map/zone.rb
CHANGED
@@ -13,8 +13,7 @@ module CellularMap
|
|
13
13
|
attr_reader :map
|
14
14
|
|
15
15
|
def initialize(x, y, map) # :nodoc:
|
16
|
-
@x = x
|
17
|
-
@y = y.respond_to?(:to_i) ? (y.to_i..y.to_i) : y
|
16
|
+
@x, @y = rangeize(x, y)
|
18
17
|
@map = map
|
19
18
|
end
|
20
19
|
|
@@ -35,14 +34,12 @@ module CellularMap
|
|
35
34
|
|
36
35
|
# Access to a cell inside the zone.
|
37
36
|
def [](x, y)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
(@y.min + y.min)..(@y.min + y.max)]
|
45
|
-
end
|
37
|
+
@map[*relative(x, y)]
|
38
|
+
end
|
39
|
+
|
40
|
+
# Modification of a cell's content inside the zone.
|
41
|
+
def []=(x, y, content)
|
42
|
+
@map[*relative(x, y)] = content
|
46
43
|
end
|
47
44
|
|
48
45
|
def ==(other) # :nodoc:
|
@@ -62,5 +59,23 @@ module CellularMap
|
|
62
59
|
def to_a
|
63
60
|
@y.collect { |y| @x.collect { |x| Cell.new(x, y, @map) } }
|
64
61
|
end
|
62
|
+
|
63
|
+
protected
|
64
|
+
|
65
|
+
# Converts coordinates to coordinates relative to inside the map.
|
66
|
+
def relative(x, y)
|
67
|
+
if x.respond_to?(:to_i) && y.respond_to?(:to_i)
|
68
|
+
[@x.min + x.to_i, @y.min + y.to_i]
|
69
|
+
else
|
70
|
+
x, y = rangeize(x, y)
|
71
|
+
[ (@x.min + x.min)..(@x.min + x.max),
|
72
|
+
(@y.min + y.min)..(@y.min + y.max) ]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Converts given coordinates to ranges if necessary.
|
77
|
+
def rangeize(x, y)
|
78
|
+
[x, y].collect { |i| i.respond_to?(:to_i) ? (i.to_i..i.to_i) : i }
|
79
|
+
end
|
65
80
|
end
|
66
81
|
end
|
data/test/test_zone.rb
CHANGED
@@ -20,6 +20,12 @@ class TestZone < Test::Unit::TestCase
|
|
20
20
|
|
21
21
|
should("allow access to other zones relatively to boundaries") {
|
22
22
|
assert_equal @map[-2..5, 6..11], @zone[-1..6, 9..14] }
|
23
|
+
|
24
|
+
should("allow to fill cells relatively to its boundaries") {
|
25
|
+
@zone[2, 1] = 'thingy'
|
26
|
+
assert_equal 'thingy', @zone[2, 1].content
|
27
|
+
assert_equal 'thingy', @map[1, -2].content
|
28
|
+
}
|
23
29
|
}
|
24
30
|
|
25
31
|
context("with a few filled cells") {
|