tortoise 0.9.6 → 0.9.8
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/README.markdown +11 -1
- data/lib/tortoise/interpreter.rb +41 -7
- data/lib/tortoise/version.rb +1 -1
- data/spec/data/complex.logo +2 -1
- data/spec/data/{simple_out.ascii → ruby.ascii} +0 -0
- data/spec/data/{simple_out.html → ruby.html} +0 -0
- data/spec/data/{simple.logo → ruby.logo} +1 -0
- data/spec/data/smile.ascii +20 -0
- data/spec/data/smile.logo +25 -0
- data/spec/helpers/interpreter_helper.rb +5 -0
- data/spec/integration/tortoise_integration_spec.rb +24 -10
- data/spec/tortoise/interpreter_spec.rb +117 -9
- data/spec/tortoise/presenter_spec.rb +1 -0
- metadata +20 -14
data/README.markdown
CHANGED
@@ -5,10 +5,11 @@ Tortoise [](htt
|
|
5
5
|
|
6
6
|
Tortoise is a [Logo][logo] interpreter for Ruby. To demonstrate the
|
7
7
|
awesomeness of Logo, we'll draw a ruby! This example can be found in the
|
8
|
-
repository at `spec/data/
|
8
|
+
repository at `spec/data/ruby.logo`.
|
9
9
|
|
10
10
|
> Tortoise::Interpreter.new <<-LOGO
|
11
11
|
61
|
12
|
+
PD
|
12
13
|
RT 135
|
13
14
|
FD 5
|
14
15
|
REPEAT 2 [ RT 90 FD 15 ]
|
@@ -59,18 +60,24 @@ any of the supported Logo commands.
|
|
59
60
|
interpreter = Tortoise::Interpreter.new(canvas_size)
|
60
61
|
|
61
62
|
# execute any supported commands
|
63
|
+
interpreter.pd
|
64
|
+
interpreter.setpos(1, 2)
|
62
65
|
interpreter.rt(90)
|
63
66
|
interpreter.fd(3)
|
64
67
|
interpreter.lt(45)
|
65
68
|
interpreter.bk(4)
|
69
|
+
interpreter.pu
|
66
70
|
|
67
71
|
Tortoise also accepts commands as an input string:
|
68
72
|
|
69
73
|
interpreter = Tortoise::Interpreter.new(11)
|
74
|
+
interpreter.draw "PD"
|
75
|
+
interpreter.draw "SETPOS 1 2"
|
70
76
|
interpreter.draw "RT 90"
|
71
77
|
interpreter.draw "FD 3"
|
72
78
|
interpreter.draw "LT 45"
|
73
79
|
interpreter.draw "BK 4"
|
80
|
+
interpreter.draw "PU"
|
74
81
|
|
75
82
|
You can execute entire blocks of commands at once:
|
76
83
|
|
@@ -143,8 +150,11 @@ Supported Commands
|
|
143
150
|
------------------
|
144
151
|
Tortoise only supports a small subset of all [Logo][logo] commands.
|
145
152
|
|
153
|
+
- `PU`: Lift the pen from the canvas
|
154
|
+
- `PD`: Place the pen onto the canvas
|
146
155
|
- `RT x`: Turn the tortoise `x` degrees to the right (increments of 45)
|
147
156
|
- `LT x`: Turn the tortoise `x` degrees to the right (increments of 45)
|
148
157
|
- `FD x`: Move the tortoise `x` steps forward
|
149
158
|
- `BK x`: Move the tortoise `x` steps backward
|
159
|
+
- `SETPOS x y`: Move the tortoise to position `x, y` (with pen up)
|
150
160
|
- `REPEAT n [ x ]`: Repeat commands `x` a total of `n` times
|
data/lib/tortoise/interpreter.rb
CHANGED
@@ -8,12 +8,31 @@ module Tortoise
|
|
8
8
|
@size = lines.shift.to_i
|
9
9
|
@canvas = new_canvas
|
10
10
|
@direction = 0
|
11
|
+
@pen_down = false
|
11
12
|
center = (@size - @size/2) - 1
|
12
13
|
|
13
14
|
update_position(center, center)
|
14
15
|
draw(lines)
|
15
16
|
end
|
16
17
|
|
18
|
+
def setpos(x, y)
|
19
|
+
@position = place_in_canvas_bounds(x, y)
|
20
|
+
update_canvas
|
21
|
+
end
|
22
|
+
|
23
|
+
def pu
|
24
|
+
@pen_down = false
|
25
|
+
end
|
26
|
+
|
27
|
+
def pd
|
28
|
+
@pen_down = true
|
29
|
+
update_canvas
|
30
|
+
end
|
31
|
+
|
32
|
+
def pen_down?
|
33
|
+
@pen_down
|
34
|
+
end
|
35
|
+
|
17
36
|
def rt(degrees)
|
18
37
|
rotate(degrees)
|
19
38
|
end
|
@@ -59,14 +78,28 @@ module Tortoise
|
|
59
78
|
end
|
60
79
|
|
61
80
|
def execute(command)
|
62
|
-
|
63
|
-
if
|
64
|
-
|
65
|
-
|
81
|
+
commands = command.split(' ')
|
82
|
+
return if commands.empty?
|
83
|
+
|
84
|
+
command = commands.shift.downcase
|
85
|
+
if command == 'repeat'
|
86
|
+
count = commands.shift.to_i
|
87
|
+
commands = commands[1..commands.size-2]
|
88
|
+
repeat(commands, count)
|
66
89
|
else
|
67
|
-
|
68
|
-
|
69
|
-
|
90
|
+
params = commands.map(&:to_i)
|
91
|
+
self.send(command, *params)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def repeat(commands, count)
|
96
|
+
count.times do
|
97
|
+
c = commands.dup
|
98
|
+
while c.size > 0
|
99
|
+
command = c.shift
|
100
|
+
params = []
|
101
|
+
params << c.shift while c[0].to_s.match(/[0-9]/)
|
102
|
+
execute("#{command} #{params.join(' ')}")
|
70
103
|
end
|
71
104
|
end
|
72
105
|
end
|
@@ -92,6 +125,7 @@ module Tortoise
|
|
92
125
|
end
|
93
126
|
|
94
127
|
def update_canvas
|
128
|
+
return unless pen_down?
|
95
129
|
x, y = @position
|
96
130
|
@canvas[x][y] = true
|
97
131
|
end
|
data/lib/tortoise/version.rb
CHANGED
data/spec/data/complex.logo
CHANGED
@@ -1,3 +1,4 @@
|
|
1
1
|
1001
|
2
2
|
|
3
|
-
|
3
|
+
PD
|
4
|
+
REPEAT 4 [ FD 200 LT 45 FD 100 LT 45 FD 50 LT 45 FD 25 LT 45 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 RT 90 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 LT 45 BK 25 RT 90 FD 25 LT 45 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 RT 90 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 LT 45 BK 25 LT 45 BK 50 RT 90 FD 50 LT 45 FD 25 LT 45 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 RT 90 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 LT 45 BK 25 RT 90 FD 25 LT 45 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 RT 90 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 LT 45 BK 25 LT 45 BK 50 LT 45 BK 100 RT 90 FD 100 LT 45 FD 50 LT 45 FD 25 LT 45 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 RT 90 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 LT 45 BK 25 RT 90 FD 25 LT 45 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 RT 90 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 LT 45 BK 25 LT 45 BK 50 RT 90 FD 50 LT 45 FD 25 LT 45 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 RT 90 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 LT 45 BK 25 RT 90 FD 25 LT 45 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 RT 90 FD 12 LT 45 FD 6 LT 45 RT 90 LT 45 BK 6 RT 90 FD 6 LT 45 RT 90 LT 45 BK 6 LT 45 BK 12 LT 45 BK 25 LT 45 BK 50 LT 45 BK 100 LT 45 BK 200 RT 90 ]
|
File without changes
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
. . . . . . . . . . . . . . . . . . . .
|
2
|
+
. . . . . . . . . . . . . . . . . . . .
|
3
|
+
. . . . . . . . . . . . . . . . . . . .
|
4
|
+
. . . X X X . . . . . . . . X X X . . .
|
5
|
+
. . . X X X . . . . . . . . X X X . . .
|
6
|
+
. . . X X X . . . . . . . . X X X . . .
|
7
|
+
. . . . . . . . . . . . . . . . . . . .
|
8
|
+
. . . . . . . . . X X . . . . . . . . .
|
9
|
+
. . . . . . . . . X X . . . . . . . . .
|
10
|
+
. X . . . . . . . . . . . . . . . . X .
|
11
|
+
. . X . . . . . . . . . . . . . . X . .
|
12
|
+
. . . X . . . . . . . . . . . . X . . .
|
13
|
+
. . . . X . . . . . . . . . . X . . . .
|
14
|
+
. . . . . X . . . . . . . . X . . . . .
|
15
|
+
. . . . . . X . . . . . . X . . . . . .
|
16
|
+
. . . . . . . X . . . . X . . . . . . .
|
17
|
+
. . . . . . . . X X X X . . . . . . . .
|
18
|
+
. . . . . . . . . . . . . . . . . . . .
|
19
|
+
. . . . . . . . . . . . . . . . . . . .
|
20
|
+
. . . . . . . . . . . . . . . . . . . .
|
@@ -0,0 +1,25 @@
|
|
1
|
+
20
|
2
|
+
|
3
|
+
SETPOS 3 16
|
4
|
+
PD
|
5
|
+
REPEAT 4 [ RT 90 FD 2 ]
|
6
|
+
REPEAT 4 [ RT 90 FD 1 ]
|
7
|
+
PU
|
8
|
+
RT 90
|
9
|
+
FD 11
|
10
|
+
LT 90
|
11
|
+
PD
|
12
|
+
REPEAT 4 [ RT 90 FD 2 ]
|
13
|
+
REPEAT 4 [ RT 90 FD 1 ]
|
14
|
+
|
15
|
+
SETPOS 9 12
|
16
|
+
REPEAT 4 [ RT 90 FD 1 ]
|
17
|
+
|
18
|
+
SETPOS 1 10
|
19
|
+
PD
|
20
|
+
RT 135
|
21
|
+
FD 7
|
22
|
+
RT 135
|
23
|
+
BK 3
|
24
|
+
LT 45
|
25
|
+
BK 7
|
@@ -1,18 +1,32 @@
|
|
1
1
|
require 'tortoise'
|
2
2
|
|
3
3
|
describe Tortoise::Interpreter do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
context 'when rendering the ruby' do
|
5
|
+
before do
|
6
|
+
input = File.new('./spec/data/ruby.logo').read
|
7
|
+
@interpreter = Tortoise::Interpreter.new(input)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'produces the expected ascii output' do
|
11
|
+
ascii = File.new('./spec/data/ruby.ascii').read
|
12
|
+
@interpreter.to_ascii.should == ascii
|
13
|
+
end
|
8
14
|
|
9
|
-
|
10
|
-
|
11
|
-
|
15
|
+
it 'produces the expected html output' do
|
16
|
+
html = File.new('./spec/data/ruby.html').read
|
17
|
+
@interpreter.to_html.should == html
|
18
|
+
end
|
12
19
|
end
|
13
20
|
|
14
|
-
|
15
|
-
|
16
|
-
|
21
|
+
context 'when rendering the smiley face' do
|
22
|
+
before do
|
23
|
+
input = File.new('./spec/data/smile.logo').read
|
24
|
+
@interpreter = Tortoise::Interpreter.new(input)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'produces the expected ascii output' do
|
28
|
+
ascii = File.new('./spec/data/smile.ascii').read
|
29
|
+
@interpreter.to_ascii.should == ascii
|
30
|
+
end
|
17
31
|
end
|
18
32
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'tortoise/interpreter'
|
2
|
+
require 'helpers/interpreter_helper'
|
2
3
|
|
3
4
|
describe Tortoise::Interpreter do
|
4
5
|
let(:tortoise) { Tortoise::Interpreter.new(11) }
|
@@ -20,12 +21,8 @@ describe Tortoise::Interpreter do
|
|
20
21
|
tortoise.position.should == [3, 2]
|
21
22
|
end
|
22
23
|
|
23
|
-
it 'starts with
|
24
|
-
|
25
|
-
tortoise.canvas.each do |column|
|
26
|
-
column.each { |pixel| count += 1 if pixel }
|
27
|
-
end
|
28
|
-
count.should == 1
|
24
|
+
it 'starts with no marked pixels on the canvas' do
|
25
|
+
filled_pixels(tortoise.canvas).should == 0
|
29
26
|
end
|
30
27
|
|
31
28
|
it 'defaults tortoise position to the center of the canvas' do
|
@@ -36,10 +33,15 @@ describe Tortoise::Interpreter do
|
|
36
33
|
tortoise.direction.should == 0
|
37
34
|
end
|
38
35
|
|
36
|
+
it 'defaults with the tortoise pen up' do
|
37
|
+
tortoise.pen_down?.should == false
|
38
|
+
end
|
39
|
+
|
39
40
|
describe '#draw' do
|
40
41
|
it 'draws the image on the canvas when given a string' do
|
41
42
|
tortoise = Tortoise::Interpreter.new(5)
|
42
43
|
tortoise.draw <<-STEPS
|
44
|
+
PD
|
43
45
|
RT 90
|
44
46
|
FD 1
|
45
47
|
REPEAT 2 [ RT 45 ]
|
@@ -60,6 +62,7 @@ describe Tortoise::Interpreter do
|
|
60
62
|
it 'draws the image on the canvas when given an array' do
|
61
63
|
tortoise = Tortoise::Interpreter.new(5)
|
62
64
|
tortoise.draw([
|
65
|
+
'PD',
|
63
66
|
'RT 90',
|
64
67
|
'FD 1',
|
65
68
|
'REPEAT 2 [ RT 45 ]',
|
@@ -77,6 +80,59 @@ describe Tortoise::Interpreter do
|
|
77
80
|
end
|
78
81
|
end
|
79
82
|
|
83
|
+
describe '#setpos' do
|
84
|
+
it 'moves the tortoise to the specified position' do
|
85
|
+
tortoise.position.should == [5, 5]
|
86
|
+
tortoise.setpos(2, 4)
|
87
|
+
tortoise.position.should == [2, 4]
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'fills in landing spot when pen is down' do
|
91
|
+
filled_pixels(tortoise.canvas).should == 0
|
92
|
+
tortoise.pd
|
93
|
+
tortoise.setpos(0, 0)
|
94
|
+
filled_pixels(tortoise.canvas).should == 2
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'does not fill in landing spot when pen is up' do
|
98
|
+
filled_pixels(tortoise.canvas).should == 0
|
99
|
+
tortoise.pu
|
100
|
+
tortoise.setpos(0, 0)
|
101
|
+
filled_pixels(tortoise.canvas).should == 0
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'does not set a position outside the canvas' do
|
105
|
+
tortoise.setpos(100, 100)
|
106
|
+
tortoise.position.should == [10, 10]
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe '#pu' do
|
111
|
+
it 'lifts the pen from the canvas' do
|
112
|
+
tortoise.pd
|
113
|
+
tortoise.pen_down?.should == true
|
114
|
+
tortoise.pu
|
115
|
+
tortoise.pen_down?.should == false
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '#pd' do
|
120
|
+
it 'places the pen onto the canvas' do
|
121
|
+
tortoise.pu
|
122
|
+
tortoise.pen_down?.should == false
|
123
|
+
tortoise.pd
|
124
|
+
tortoise.pen_down?.should == true
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'fills in a pixel when the pen hits the canvas' do
|
128
|
+
filled_pixels(tortoise.canvas).should == 0
|
129
|
+
tortoise.pu
|
130
|
+
tortoise.fd(2)
|
131
|
+
tortoise.pd
|
132
|
+
filled_pixels(tortoise.canvas).should == 1
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
80
136
|
describe '#rt' do
|
81
137
|
it 'can rotate the tortoise 45 degrees to the right' do
|
82
138
|
tortoise.rt(45)
|
@@ -274,8 +330,9 @@ describe Tortoise::Interpreter do
|
|
274
330
|
x.should >= 0
|
275
331
|
end
|
276
332
|
|
277
|
-
it 'draws on traveled areas of the canvas' do
|
333
|
+
it 'draws on traveled areas of the canvas when pen is down' do
|
278
334
|
tortoise = Tortoise::Interpreter.new(5)
|
335
|
+
tortoise.pd
|
279
336
|
tortoise.rt(90)
|
280
337
|
tortoise.fd(1)
|
281
338
|
tortoise.rt(90)
|
@@ -291,6 +348,13 @@ describe Tortoise::Interpreter do
|
|
291
348
|
[true , true , true , false, false],
|
292
349
|
[true , false, false, false, false]]
|
293
350
|
end
|
351
|
+
|
352
|
+
it 'does not draw on traveled areas of the canvas when pen is up' do
|
353
|
+
tortoise = Tortoise::Interpreter.new(5)
|
354
|
+
tortoise.stub(:pen_down? => false)
|
355
|
+
tortoise.fd(2)
|
356
|
+
filled_pixels(tortoise.canvas).should == 0
|
357
|
+
end
|
294
358
|
end
|
295
359
|
|
296
360
|
describe '#bk' do
|
@@ -376,8 +440,9 @@ describe Tortoise::Interpreter do
|
|
376
440
|
x.should < tortoise.size
|
377
441
|
end
|
378
442
|
|
379
|
-
it 'draws on traveled areas of the canvas' do
|
443
|
+
it 'draws on traveled areas of the canvas when pen is down' do
|
380
444
|
tortoise = Tortoise::Interpreter.new(5)
|
445
|
+
tortoise.pd
|
381
446
|
tortoise.lt(90)
|
382
447
|
tortoise.bk(1)
|
383
448
|
tortoise.rt(90)
|
@@ -393,6 +458,13 @@ describe Tortoise::Interpreter do
|
|
393
458
|
[true , true , true , false, false],
|
394
459
|
[true , false, false, false, false]]
|
395
460
|
end
|
461
|
+
|
462
|
+
it 'does not draw on traveled areas of the canvas when pen is up' do
|
463
|
+
tortoise = Tortoise::Interpreter.new(5)
|
464
|
+
tortoise.stub(:pen_down? => false)
|
465
|
+
tortoise.bk(2)
|
466
|
+
filled_pixels(tortoise.canvas).should == 0
|
467
|
+
end
|
396
468
|
end
|
397
469
|
|
398
470
|
describe '#execute' do
|
@@ -401,6 +473,26 @@ describe Tortoise::Interpreter do
|
|
401
473
|
tortoise.direction.should == 90
|
402
474
|
end
|
403
475
|
|
476
|
+
it 'can execute putting the pen down' do
|
477
|
+
tortoise.pu
|
478
|
+
tortoise.pen_down?.should == false
|
479
|
+
tortoise.send(:execute, 'PD')
|
480
|
+
tortoise.pen_down?.should == true
|
481
|
+
end
|
482
|
+
|
483
|
+
it 'can execute lifting the pen up' do
|
484
|
+
tortoise.pd
|
485
|
+
tortoise.pen_down?.should == true
|
486
|
+
tortoise.send(:execute, 'PU')
|
487
|
+
tortoise.pen_down?.should == false
|
488
|
+
end
|
489
|
+
|
490
|
+
it 'can execute setpos commands' do
|
491
|
+
tortoise.position.should == [5, 5]
|
492
|
+
tortoise.send(:execute, 'SETPOS 2 4')
|
493
|
+
tortoise.position.should == [2, 4]
|
494
|
+
end
|
495
|
+
|
404
496
|
it 'can execute right turns' do
|
405
497
|
tortoise.send(:execute, 'RT 90')
|
406
498
|
tortoise.direction.should == 90
|
@@ -429,14 +521,30 @@ describe Tortoise::Interpreter do
|
|
429
521
|
end
|
430
522
|
|
431
523
|
it 'can execute multi-item repeat blocks' do
|
432
|
-
tortoise.send(:execute, 'REPEAT 2 [ RT 45 LT 90 ]')
|
524
|
+
tortoise.send(:execute, 'REPEAT 2 [ PD RT 45 SETPOS 0 0 LT 90 ]')
|
433
525
|
tortoise.direction.should == 270
|
526
|
+
tortoise.position.should == [0, 0]
|
434
527
|
end
|
435
528
|
|
436
529
|
it 'can execute commands with extra whitespace' do
|
437
530
|
tortoise.send(:execute, ' RT 90 ')
|
438
531
|
tortoise.direction.should == 90
|
439
532
|
end
|
533
|
+
|
534
|
+
it 'does not raise error with blank lines' do
|
535
|
+
command = lambda { tortoise.send(:execute, ' ') }
|
536
|
+
command.should_not raise_error
|
537
|
+
end
|
538
|
+
|
539
|
+
it 'does not raise error with zero params in repeat command' do
|
540
|
+
command = lambda { tortoise.send(:execute, 'REPEAT 2 [ RT 0 PD ]') }
|
541
|
+
command.should_not raise_error
|
542
|
+
end
|
543
|
+
|
544
|
+
it 'raises error with unknown commands' do
|
545
|
+
command = lambda { tortoise.send(:execute, 'UNKNOWN') }
|
546
|
+
command.should raise_error
|
547
|
+
end
|
440
548
|
end
|
441
549
|
|
442
550
|
%w(ascii html png).each do |format|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tortoise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chunky_png
|
16
|
-
requirement: &
|
16
|
+
requirement: &70206441498960 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70206441498960
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70206441498060 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70206441498060
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70206441495660 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70206441495660
|
47
47
|
description: Tortoise is a Logo interpreter for ruby.
|
48
48
|
email:
|
49
49
|
- huntca@gmail.com
|
@@ -63,9 +63,12 @@ files:
|
|
63
63
|
- lib/tortoise/presenter.rb
|
64
64
|
- lib/tortoise/version.rb
|
65
65
|
- spec/data/complex.logo
|
66
|
-
- spec/data/
|
67
|
-
- spec/data/
|
68
|
-
- spec/data/
|
66
|
+
- spec/data/ruby.ascii
|
67
|
+
- spec/data/ruby.html
|
68
|
+
- spec/data/ruby.logo
|
69
|
+
- spec/data/smile.ascii
|
70
|
+
- spec/data/smile.logo
|
71
|
+
- spec/helpers/interpreter_helper.rb
|
69
72
|
- spec/integration/tortoise_integration_spec.rb
|
70
73
|
- spec/tortoise/interpreter_spec.rb
|
71
74
|
- spec/tortoise/presenter_spec.rb
|
@@ -96,9 +99,12 @@ specification_version: 3
|
|
96
99
|
summary: Tortoise is a Logo interpreter for ruby.
|
97
100
|
test_files:
|
98
101
|
- spec/data/complex.logo
|
99
|
-
- spec/data/
|
100
|
-
- spec/data/
|
101
|
-
- spec/data/
|
102
|
+
- spec/data/ruby.ascii
|
103
|
+
- spec/data/ruby.html
|
104
|
+
- spec/data/ruby.logo
|
105
|
+
- spec/data/smile.ascii
|
106
|
+
- spec/data/smile.logo
|
107
|
+
- spec/helpers/interpreter_helper.rb
|
102
108
|
- spec/integration/tortoise_integration_spec.rb
|
103
109
|
- spec/tortoise/interpreter_spec.rb
|
104
110
|
- spec/tortoise/presenter_spec.rb
|