woyo-server 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/woyo/runner.rb +49 -13
  3. data/lib/woyo/server/server.rb +4 -2
  4. data/lib/woyo/server/version.rb +1 -1
  5. data/public/server/default.html +42 -0
  6. data/public/server/foundation-5.2.2/css/foundation.css +5263 -0
  7. data/public/server/foundation-5.2.2/css/foundation.min.css +1 -0
  8. data/public/server/foundation-5.2.2/css/normalize.css +423 -0
  9. data/public/server/foundation-5.2.2/humans.txt +8 -0
  10. data/public/server/foundation-5.2.2/img/.gitkeep +1 -0
  11. data/public/server/foundation-5.2.2/index.html +166 -0
  12. data/public/server/foundation-5.2.2/js/foundation/foundation.abide.js +299 -0
  13. data/public/server/foundation-5.2.2/js/foundation/foundation.accordion.js +54 -0
  14. data/public/server/foundation-5.2.2/js/foundation/foundation.alert.js +43 -0
  15. data/public/server/foundation-5.2.2/js/foundation/foundation.clearing.js +531 -0
  16. data/public/server/foundation-5.2.2/js/foundation/foundation.dropdown.js +306 -0
  17. data/public/server/foundation-5.2.2/js/foundation/foundation.equalizer.js +68 -0
  18. data/public/server/foundation-5.2.2/js/foundation/foundation.interchange.js +331 -0
  19. data/public/server/foundation-5.2.2/js/foundation/foundation.joyride.js +849 -0
  20. data/public/server/foundation-5.2.2/js/foundation/foundation.js +609 -0
  21. data/public/server/foundation-5.2.2/js/foundation/foundation.magellan.js +173 -0
  22. data/public/server/foundation-5.2.2/js/foundation/foundation.offcanvas.js +50 -0
  23. data/public/server/foundation-5.2.2/js/foundation/foundation.orbit.js +606 -0
  24. data/public/server/foundation-5.2.2/js/foundation/foundation.reveal.js +427 -0
  25. data/public/server/foundation-5.2.2/js/foundation/foundation.slider.js +200 -0
  26. data/public/server/foundation-5.2.2/js/foundation/foundation.tab.js +168 -0
  27. data/public/server/foundation-5.2.2/js/foundation/foundation.tooltip.js +272 -0
  28. data/public/server/foundation-5.2.2/js/foundation/foundation.topbar.js +422 -0
  29. data/public/server/foundation-5.2.2/js/foundation.min.js +10 -0
  30. data/public/server/foundation-5.2.2/js/vendor/fastclick.js +9 -0
  31. data/public/server/foundation-5.2.2/js/vendor/jquery.cookie.js +8 -0
  32. data/public/server/foundation-5.2.2/js/vendor/jquery.js +26 -0
  33. data/public/server/foundation-5.2.2/js/vendor/modernizr.js +8 -0
  34. data/public/server/foundation-5.2.2/js/vendor/placeholder.js +2 -0
  35. data/public/server/foundation-5.2.2/robots.txt +4 -0
  36. data/public/server/jquery-2.1.1/jquery.js +9190 -0
  37. data/public/server/jquery-2.1.1/jquery.min.js +4 -0
  38. data/public/server/jquery-2.1.1/jquery.min.map +1 -0
  39. data/spec/spec_helper.rb +1 -0
  40. data/spec/woyo/server/1_server_spec.rb +30 -6
  41. data/spec/woyo/server/runner_spec.rb +153 -23
  42. data/views/server/layout.haml +17 -0
  43. data/views/{location.haml → server/location.haml} +0 -0
  44. data/woyo-server.gemspec +1 -1
  45. metadata +42 -10
  46. data/public/default.html +0 -15
  47. data/views/layout.haml +0 -6
  48. data/world/default.rb +0 -76
@@ -8,6 +8,7 @@ describe Woyo::Server, :type => :feature do
8
8
  location :small
9
9
  end
10
10
  @home_world = Woyo::World.new do
11
+ start :home
11
12
  location :home do
12
13
  name 'Home'
13
14
  description 'Where the heart is.'
@@ -53,21 +54,44 @@ describe Woyo::Server, :type => :feature do
53
54
  end
54
55
  end
55
56
 
56
- it 'displays a welcome page if there is no world' do
57
- # this must be the first test so that Woyo::Server.setting.world is not set
58
- # that is why this file is name 1_server_spec.rb
57
+ # these must be the first tests so that Woyo::Server.setting.world is not set
58
+ # that is why this file is name 1_server_spec.rb
59
+
60
+ it 'welcome page is displayed if there is no world' do
61
+ visit '/'
62
+ status_code.should eq 200
63
+ page.should have_content 'Woyo'
64
+ end
65
+
66
+ it 'welcome page links to github docs' do
67
+ visit '/'
68
+ status_code.should eq 200
69
+ page.should have_link '', href: 'https://github.com/iqeo/woyo-world/wiki'
70
+ page.should have_link '', href: 'https://github.com/iqeo/woyo-server/wiki'
71
+ end
72
+
73
+ it 'uses foundation framework' do
74
+ visit '/'
75
+ status_code.should eq 200
76
+ page.should have_css 'head link[href="foundation/css/foundation.css"]'
77
+ page.should have_css 'head script[src="foundation/js/vendor/modernizr.js"]'
78
+ end
79
+
80
+ it 'accepts a world (without start - display welcome)' do
81
+ Woyo::Server.set :world, @small_world
59
82
  visit '/'
60
83
  status_code.should eq 200
61
- page.should have_content 'Welcome'
84
+ page.should have_content 'Woyo'
62
85
  end
63
86
 
64
- it 'accepts a world' do
87
+ it 'accepts a world (with start)' do
88
+ @small_world.start = :small
65
89
  Woyo::Server.set :world, @small_world
66
90
  visit '/'
67
91
  status_code.should eq 200
68
92
  end
69
93
 
70
- it 'describes a location' do
94
+ it 'describes the start location' do
71
95
  Woyo::Server.set :world, @home_world
72
96
  visit '/'
73
97
  page.should have_selector '.location#location_home'
@@ -3,6 +3,9 @@ require 'fileutils'
3
3
  require 'stringio'
4
4
  require 'open-uri'
5
5
 
6
+ STDERR.sync = true
7
+ STDERR.sync = true
8
+
6
9
  describe Woyo::Runner do
7
10
 
8
11
  before :each do
@@ -11,6 +14,17 @@ describe Woyo::Runner do
11
14
  end
12
15
 
13
16
  before :all do
17
+ @expected_entries = [ 'public', 'views', 'world' ]
18
+ @contents = {
19
+ '.' => %w( . .. world views public ),
20
+ 'world' => %w( . .. ),
21
+ 'views' => %w( . .. app server ),
22
+ 'views/app' => %w( . .. ),
23
+ 'views/server' => %w( . .. layout.haml location.haml ),
24
+ 'public' => %w( . .. app server ),
25
+ 'public/app' => %w( . .. html images js css ),
26
+ 'public/server' => %w( . .. default.html foundation foundation-5.2.2 jquery jquery-2.1.1 ),
27
+ }
14
28
  @original_path = Dir.pwd
15
29
  File.basename(@original_path).should eq 'woyo-server'
16
30
  @test_dir = 'tmp/test'
@@ -34,10 +48,6 @@ describe Woyo::Runner do
34
48
 
35
49
  context 'new' do
36
50
 
37
- before :all do
38
- @expected_entries = [ 'public', 'views', 'world' ]
39
- end
40
-
41
51
  before :each do
42
52
  Dir.pwd.should eq @original_path
43
53
  FileUtils.rm_rf @test_dir
@@ -56,21 +66,18 @@ describe Woyo::Runner do
56
66
  end
57
67
 
58
68
  it 'creates a world application directory' do
59
- [['new','testworld'],['new','test/testworld']].each do |args|
60
- Woyo::Runner.run( args, out: @output, err: @error ).should eq 0
61
- Dir.should exist args[1]
62
- (Dir.entries(args[1]) & @expected_entries).sort.should eq @expected_entries
69
+ [['new','testworld'],['new','test/testworld']].each do |cmd,dir|
70
+ Woyo::Runner.run( [cmd,dir], out: @output, err: @error ).should eq 0
71
+ Dir.should exist dir
72
+ Dir.entries(dir).sort.should eq @contents['.'].sort
63
73
  end
64
74
  end
65
75
 
66
76
  it 'populates directories' do
67
- Woyo::Runner.run( ['new','testworld'], out: @output, err: @error ).should eq 0
68
- @expected_entries.each do |dir|
69
- dir_entries = Dir.entries(File.join('testworld',dir)).sort
70
- dir_entries.count.should be > 2
71
- original_entries = Dir.entries(File.join(@original_path,dir)).sort
72
- (dir_entries & original_entries).should eq original_entries
73
- end
77
+ Woyo::Runner.run( ['new','testworld'], out: @output, err: @error ).should eq 0
78
+ @contents.each do |dir,contents|
79
+ Dir.entries(File.join('testworld',dir)).sort.should eq contents.sort
80
+ end
74
81
  end
75
82
 
76
83
  it 'requires force (-f/--force) for existing directory' do
@@ -84,12 +91,22 @@ describe Woyo::Runner do
84
91
  Dir.should exist dir
85
92
  Woyo::Runner.run( args + force, out: @output, err: @error ).should eq 0
86
93
  Dir.should exist dir
87
- (Dir.entries(dir) & @expected_entries).sort.should eq @expected_entries # subset
94
+ (Dir.entries(dir) & @expected_entries).sort.should eq @expected_entries
88
95
  FileUtils.rm_rf dir
89
96
  end
90
97
  end
91
98
  end
92
99
 
100
+ it 'refuses for existing file' do
101
+ [['new','testworld'],['new','test/testworld']].each do |args|
102
+ dir = args[1]
103
+ FileUtils.mkdir_p File.dirname(dir)
104
+ FileUtils.touch dir
105
+ File.should exist dir
106
+ Woyo::Runner.run( args, out: @output, err: @error ).should eq -3
107
+ end
108
+ end
109
+
93
110
  it 'help (-h/--help) explains new command' do
94
111
  [['-h'],['--help']].each do |help|
95
112
  Woyo::Runner.run( ['new'] + help, out: @output, err: @error ).should eq 0
@@ -109,7 +126,13 @@ describe Woyo::Runner do
109
126
  Dir.pwd.should eq File.join( @original_path, @test_dir )
110
127
  Woyo::Runner.run( ['new','testworld'], out: @output, err: @error ).should eq 0
111
128
  Dir.chdir 'testworld'
112
- Dir.pwd.should eq File.join( @original_path, @test_dir, 'testworld' )
129
+ @this_world_path = File.join( @original_path, @test_dir, 'testworld' )
130
+ Dir.pwd.should eq @this_world_path
131
+ end
132
+
133
+ before :each do
134
+ Dir.chdir @this_world_path
135
+ Dir.pwd.should eq @this_world_path
113
136
  end
114
137
 
115
138
  after :all do
@@ -117,12 +140,17 @@ describe Woyo::Runner do
117
140
  Dir.pwd.should eq @original_path
118
141
  end
119
142
 
143
+ it 'must be run within a world application directory' do
144
+ Dir.chdir '..'
145
+ Woyo::Runner.run( ['server'], out: @output, err: @error ).should eq -4
146
+ end
147
+
120
148
  it 'starts a world application server' do
121
149
  thread = Thread.new { Woyo::Runner.run( ['server'], out: @output, err: @error ) }
122
150
  thread.should be_alive
123
151
  sleep 2
124
152
  @error.string.should include 'has taken the stage'
125
- Woyo::Server.set :world, Woyo::World.new { location(:home) { name 'Home' } }
153
+ Woyo::Server.set :world, Woyo::World.new { start :home ; location(:home) { name 'Home' } }
126
154
  page = ''
127
155
  expect { page = open("http://127.0.0.1:4567/").read }.to_not raise_error
128
156
  page.should include 'Home'
@@ -141,15 +169,117 @@ describe Woyo::Runner do
141
169
 
142
170
  context 'console' do
143
171
 
144
- it 'starts a world application console'
172
+ before :all do
173
+ Dir.pwd.should eq @original_path
174
+ FileUtils.rm_rf @test_dir
175
+ FileUtils.mkdir_p @test_dir
176
+ Dir.chdir @test_dir
177
+ Dir.pwd.should eq File.join( @original_path, @test_dir )
178
+ Woyo::Runner.run( ['new','testworld'], out: @output, err: @error ).should eq 0
179
+ Dir.chdir 'testworld'
180
+ Dir.pwd.should eq File.join( @original_path, @test_dir, 'testworld' )
181
+ end
182
+
183
+ after :all do
184
+ Dir.chdir @original_path
185
+ Dir.pwd.should eq @original_path
186
+ end
187
+
188
+ it 'must be run within a world application directory' do
189
+ Dir.chdir '..'
190
+ Woyo::Runner.run( ['console'], out: @output, err: @error ).should eq -4
191
+ end
192
+
193
+ # it 'starts a world application console'
194
+
195
+ # it 'help (-h/--help) explains console command' do
196
+ # [['-h'],['--help']].each do |help|
197
+ # Woyo::Runner.run( ['console'] + help, out: @output, err: @error ).should eq 0
198
+ # @error.string.should include 'woyo console'
199
+ # end
200
+ # end
145
201
 
146
- it 'help (-h/--help) explains console command' do
202
+ end
203
+
204
+ context 'update' do
205
+
206
+ before :all do
207
+ Dir.pwd.should eq @original_path
208
+ FileUtils.rm_rf @test_dir
209
+ FileUtils.mkdir_p @test_dir
210
+ Dir.chdir @test_dir
211
+ Dir.pwd.should eq File.join( @original_path, @test_dir )
212
+ Woyo::Runner.run( ['new','testworld'], out: @output, err: @error ).should eq 0
213
+ Dir.chdir 'testworld'
214
+ @this_world_path = File.join( @original_path, @test_dir, 'testworld' )
215
+ Dir.pwd.should eq @this_world_path
216
+ end
217
+
218
+ before :each do
219
+ Dir.chdir @this_world_path
220
+ Dir.pwd.should eq @this_world_path
221
+ end
222
+
223
+ after :all do
224
+ Dir.chdir @original_path
225
+ Dir.pwd.should eq @original_path
226
+ end
227
+
228
+ it 'runs in a world application directory' do
229
+ Woyo::Runner.run( ['update'], out: @output, err: @error ).should eq 0
230
+ end
231
+
232
+ it 'updates existing standard files and directories' do
233
+ before = Time.now - 30 # new directory was deployed within last 60 seconds
234
+ Woyo::Runner.run( ['update'], out: @output, err: @error ).should eq 0
235
+ @contents.each do |dir,contents|
236
+ contents.each do |file|
237
+ unless ['.','..'].include?( file ) || File.symlink?( File.join(dir,file) )
238
+ File.mtime(File.join(dir,file)).should be < before
239
+ end
240
+ end
241
+ end
242
+ end
243
+
244
+ it 'replaces missing standard files and directories' do
245
+ FileUtils.rm_rf 'views/server'
246
+ FileUtils.rm_rf 'public/server'
247
+ Woyo::Runner.run( ['update'], out: @output, err: @error ).should eq 0
248
+ @contents.each do |dir,contents|
249
+ contents.each do |file|
250
+ File.should exist File.join(dir,file)
251
+ end
252
+ end
253
+ end
254
+
255
+ it 'preserves custom files and directories' do
256
+ custom = %w( world/custom.rb views/app/custom.haml public/app/html/custom.html public/app/images/custom.png public/app/js/custom.js public/app/css/custom.css )
257
+ custom.each { |f| FileUtils.touch f }
258
+ Woyo::Runner.run( ['update'], out: @output, err: @error ).should eq 0
259
+ custom.each { |f| File.should exist f }
260
+ end
261
+
262
+ it 'must be run within a world application directory' do
263
+ FileUtils.mkdir_p '../not-a-server'
264
+ Dir.chdir '../not-a-server'
265
+ Woyo::Runner.run( ['update'], out: @output, err: @error ).should eq -4
266
+ end
267
+
268
+ it 'requires force (-f/--force) to run in incomplete or non world application directory' do
269
+ FileUtils.mkdir_p '../not-a-server'
270
+ Dir.chdir '../not-a-server'
271
+ Woyo::Runner.run( ['update','--force'], out: @output, err: @error ).should eq 0
272
+ FileUtils.mkdir_p '../also-not-a-server'
273
+ Dir.chdir '../also-not-a-server'
274
+ Woyo::Runner.run( ['update','-f'], out: @output, err: @error ).should eq 0
275
+ end
276
+
277
+ it 'help (-h/--help) explains update command' do
147
278
  [['-h'],['--help']].each do |help|
148
- Woyo::Runner.run( ['console'] + help, out: @output, err: @error ).should eq 0
149
- @error.string.should include 'woyo console'
279
+ Woyo::Runner.run( ['update'] + help, out: @output, err: @error ).should eq 0
280
+ @error.string.should include 'woyo update'
150
281
  end
151
282
  end
152
283
 
153
284
  end
154
-
155
285
  end
@@ -0,0 +1,17 @@
1
+ %html
2
+
3
+ %head
4
+ %meta{ :charset => "utf-8" }
5
+ %meta{ :name => "viewport", :content => "width=device-width, initial-scale=1.0" }
6
+ %link{ :rel => "stylesheet", :href => "/foundation/css/foundation.css" }
7
+ %script{ :src => "/foundation/js/vendor/modernizr.js" }
8
+ %title WOYO - World of Your Own
9
+
10
+ %body
11
+
12
+ = yield
13
+
14
+ %script{ :src => "/foundation/js/vendor/jquery.js" }
15
+ %script{ :src => "/foundation/js/foundation.min.js" }
16
+ %script $(document).foundation();
17
+
File without changes
data/woyo-server.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rspec"
25
25
  spec.add_development_dependency "capybara"
26
26
 
27
- spec.add_runtime_dependency "woyo-world"
27
+ spec.add_runtime_dependency "woyo-world", Woyo::SERVER_VERSION
28
28
  spec.add_runtime_dependency "sinatra", "~> 1.4.5"
29
29
  spec.add_runtime_dependency "sinatra-contrib", "~> 1.4.2"
30
30
  spec.add_runtime_dependency "haml"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: woyo-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerard Fowley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-01 00:00:00.000000000 Z
11
+ date: 2014-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,16 +84,16 @@ dependencies:
84
84
  name: woyo-world
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 0.0.2
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 0.0.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: sinatra
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +156,46 @@ files:
156
156
  - lib/woyo/server.rb
157
157
  - lib/woyo/server/server.rb
158
158
  - lib/woyo/server/version.rb
159
- - public/default.html
159
+ - public/server/default.html
160
+ - public/server/foundation-5.2.2/css/foundation.css
161
+ - public/server/foundation-5.2.2/css/foundation.min.css
162
+ - public/server/foundation-5.2.2/css/normalize.css
163
+ - public/server/foundation-5.2.2/humans.txt
164
+ - public/server/foundation-5.2.2/img/.gitkeep
165
+ - public/server/foundation-5.2.2/index.html
166
+ - public/server/foundation-5.2.2/js/foundation.min.js
167
+ - public/server/foundation-5.2.2/js/foundation/foundation.abide.js
168
+ - public/server/foundation-5.2.2/js/foundation/foundation.accordion.js
169
+ - public/server/foundation-5.2.2/js/foundation/foundation.alert.js
170
+ - public/server/foundation-5.2.2/js/foundation/foundation.clearing.js
171
+ - public/server/foundation-5.2.2/js/foundation/foundation.dropdown.js
172
+ - public/server/foundation-5.2.2/js/foundation/foundation.equalizer.js
173
+ - public/server/foundation-5.2.2/js/foundation/foundation.interchange.js
174
+ - public/server/foundation-5.2.2/js/foundation/foundation.joyride.js
175
+ - public/server/foundation-5.2.2/js/foundation/foundation.js
176
+ - public/server/foundation-5.2.2/js/foundation/foundation.magellan.js
177
+ - public/server/foundation-5.2.2/js/foundation/foundation.offcanvas.js
178
+ - public/server/foundation-5.2.2/js/foundation/foundation.orbit.js
179
+ - public/server/foundation-5.2.2/js/foundation/foundation.reveal.js
180
+ - public/server/foundation-5.2.2/js/foundation/foundation.slider.js
181
+ - public/server/foundation-5.2.2/js/foundation/foundation.tab.js
182
+ - public/server/foundation-5.2.2/js/foundation/foundation.tooltip.js
183
+ - public/server/foundation-5.2.2/js/foundation/foundation.topbar.js
184
+ - public/server/foundation-5.2.2/js/vendor/fastclick.js
185
+ - public/server/foundation-5.2.2/js/vendor/jquery.cookie.js
186
+ - public/server/foundation-5.2.2/js/vendor/jquery.js
187
+ - public/server/foundation-5.2.2/js/vendor/modernizr.js
188
+ - public/server/foundation-5.2.2/js/vendor/placeholder.js
189
+ - public/server/foundation-5.2.2/robots.txt
190
+ - public/server/jquery-2.1.1/jquery.js
191
+ - public/server/jquery-2.1.1/jquery.min.js
192
+ - public/server/jquery-2.1.1/jquery.min.map
160
193
  - spec/spec_helper.rb
161
194
  - spec/woyo/server/1_server_spec.rb
162
195
  - spec/woyo/server/runner_spec.rb
163
196
  - tmux
164
- - views/layout.haml
165
- - views/location.haml
166
- - world/default.rb
197
+ - views/server/layout.haml
198
+ - views/server/location.haml
167
199
  - woyo-server.gemspec
168
200
  homepage: ''
169
201
  licenses:
data/public/default.html DELETED
@@ -1,15 +0,0 @@
1
- <html>
2
- <head>
3
- <title>Welcome to WOYO - World Of Your Own</title>
4
- </head>
5
- <body>
6
- <h1>Welcome to WOYO - World Of Your Own</h1>
7
- <p>This is the default page on a Woyo server. You are seeing this page because the Woyo World has not been created yet.</p>
8
- <p>To create the World, create and edit .rb files in the world/ directory.</p>
9
- <h2>Links</h2>
10
- <ul>
11
- <li><a href='http://github.com/iqeo/woyo'>Woyo on github</a></li>
12
- <li>...</li>
13
- </ul>
14
- </body>
15
- </html>
data/views/layout.haml DELETED
@@ -1,6 +0,0 @@
1
- %html
2
- %head
3
- %title The Title
4
- %body
5
- = yield
6
-
data/world/default.rb DELETED
@@ -1,76 +0,0 @@
1
-
2
- =begin
3
-
4
- # there may be multiple files in this world/ directory
5
- # this is a Woyo world file
6
- # it describe objects in a Woyo world
7
- # it has an .rb extension
8
- # it is just Ruby
9
- # it is evaluated in the context of a Woyo::World instance
10
- # methods avalable for World object creation include
11
- # location
12
- # character
13
- # item
14
- # etc...
15
-
16
- # to see this example world in action delete the =begin and =end lines at the top and bottom of this file
17
-
18
- location :home do
19
-
20
- name 'Home'
21
- description 'Where the heart is.'
22
-
23
- way :out do
24
- name 'Door'
25
- description 'A sturdy wooden door, old fashioned farmhouse style of a bygone era.'
26
- to :garden
27
- end
28
-
29
- way :down do
30
- name 'Stairs'
31
- description 'Rickety stairs lead down into darkness. A dank smell emanates from the darkness below'
32
- to :cellar
33
- end
34
-
35
- end
36
-
37
- location :garden do
38
-
39
- name 'Garden'
40
- description 'A peaceful green oasis of life in the midst of a gray city'
41
-
42
- way :in do
43
- name 'Door'
44
- description 'Door leads inside a cute cottage'
45
- to :home
46
- end
47
-
48
- way :down do
49
- name 'Bulkhead'
50
- description 'Rusty bulkhead door and stairs'
51
- to :cellar
52
- end
53
-
54
- end
55
-
56
- location :cellar do
57
-
58
- name 'Cellar'
59
- description 'Dark and damp, full of shadows and strange sounds'
60
-
61
- way :out do
62
- name 'Bulkhead'
63
- description 'Rusty bulkhead stairs and door'
64
- to :garden
65
- end
66
-
67
- way :up do
68
- name 'Stairs'
69
- description 'Rickety stairs lead up into light'
70
- to :home
71
- end
72
-
73
- end
74
-
75
- =end
76
-