woyo-server 0.0.1.pre2 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 873173214680c79536ffbcc4bd9d46c898cd5c80
4
- data.tar.gz: 942fe515cd22eb4ecfe1497841aed756a3fc7ea3
3
+ metadata.gz: 463090a5a8f8f70bc5b6de114d5d1f57f26f08ac
4
+ data.tar.gz: 56378db7ab92e7fe2c062930987953fb7ec1da0b
5
5
  SHA512:
6
- metadata.gz: 4e7d1535fd0656c8212b391a2a2c6e9b91c49d43f169337236ad2baec51df3c657162a803fe628a993c520fe69880e936c128b45ae07688b6b69ae31e23f8b3f
7
- data.tar.gz: 585777572bccd1a4cdcecb19d19acc16a0c3646d662138cb6de55716ed6cb3ee319642e2a0d494ea115a88bda2715698fc77bed7bc0a0668bb3f33201d2a7e4f
6
+ metadata.gz: 8d37fed73e100523edaa6a37019f62587549513cd7f2e2a4075bec8d0eff183a58ef23ed8fdf9f9c8c42c67e665b27d969007a0a0c5bc55a137bb7c48cab5fd6
7
+ data.tar.gz: 88d03ad3e5d1f022d655bdfa448c76dccc0a4755c3cf9f25db6d1f4c8a6a740d9c52c5ac5ef3da7a230a4817037ca1753a8b9ee971227f904305a0d17617cf57
@@ -1,7 +1,10 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- require 'woyo/world'
4
- require 'woyo/server'
3
+ require_relative '../lib/woyo/runner'
4
+
5
+ exit Woyo::Runner.run ARGV
6
+
7
+ =begin
5
8
 
6
9
  @home_world = Woyo::World.new do
7
10
  location :home do
@@ -50,4 +53,6 @@ end
50
53
 
51
54
  Woyo::Server.set :world, @home_world
52
55
  Woyo::Server.run!
56
+
57
+ =end
53
58
 
@@ -0,0 +1,129 @@
1
+ require_relative 'server'
2
+ require 'logger'
3
+
4
+ module Woyo
5
+
6
+ class Runner
7
+
8
+ def self.run args, out: $stdout, err: $stderr
9
+
10
+ @args = args.dup
11
+ @out = out
12
+ @err = err
13
+ $stderr = @err if @err
14
+ $stdout = @out if @out
15
+
16
+ code = case @args.first
17
+ when 'new' then mode_new
18
+ when 'server' then mode_server
19
+ when 'console' then mode_console
20
+ end
21
+ return code if code
22
+
23
+ if @args.empty? || @args.include?('-h') || @args.include?('--help')
24
+ print_help
25
+ return 0
26
+ end
27
+
28
+ if @args.include?('-v') || @args.include?('--version')
29
+ print_version
30
+ return 0
31
+ end
32
+
33
+ end
34
+
35
+ def self.fail msg, code
36
+ print_error msg
37
+ return code
38
+ end
39
+
40
+ def self.mode_new
41
+ if @args.include?('-h') || @args.include?('--help')
42
+ print_help_new
43
+ return 0
44
+ end
45
+ mode, dir = @args.shift 2
46
+ if dir.nil?
47
+ print_error 'No directory provided'
48
+ return -1
49
+ end
50
+ if Dir.exists? dir
51
+ unless @args.include?('-f') || @args.include?('--force')
52
+ print_error 'Directory already exists'
53
+ return -2
54
+ end
55
+ end
56
+ if File.exists? dir
57
+ unless @args.include?('-f') || @args.include?('--force')
58
+ print_error 'File exists with same name'
59
+ return -3
60
+ end
61
+ end
62
+ FileUtils.mkdir_p dir
63
+ [ 'public', 'views', 'world' ].each do |subdir|
64
+ FileUtils.cp_r File.join( __dir__, '../../', subdir ), dir
65
+ end
66
+ return 0
67
+ end
68
+
69
+ def self.mode_server
70
+ if @args.include?('-h') || @args.include?('--help')
71
+ print_help_server
72
+ return 0
73
+ end
74
+ Woyo::Server.run!
75
+ return 0
76
+ end
77
+
78
+ def self.mode_console
79
+ if @args.include?('-h') || @args.include?('--help')
80
+ print_help_console
81
+ return 0
82
+ end
83
+ end
84
+
85
+ def self.print_help
86
+ @err.puts "Usage: woyo ..."
87
+ @err.puts
88
+ @err.puts "............."
89
+ @err.puts "............."
90
+ @err.puts "............."
91
+ end
92
+
93
+ def self.print_help_new
94
+ @err.puts "Usage: woyo new ..."
95
+ @err.puts
96
+ @err.puts "............."
97
+ @err.puts "............."
98
+ @err.puts "............."
99
+ end
100
+
101
+ def self.print_help_server
102
+ @err.puts "Usage: woyo server ..."
103
+ @err.puts
104
+ @err.puts "............."
105
+ @err.puts "............."
106
+ @err.puts "............."
107
+ end
108
+
109
+ def self.print_help_console
110
+ @err.puts "Usage: woyo console ..."
111
+ @err.puts
112
+ @err.puts "............."
113
+ @err.puts "............."
114
+ @err.puts "............."
115
+ end
116
+
117
+ def self.print_error msg
118
+ @err.puts "Error: #{msg}"
119
+ end
120
+
121
+ def self.print_version
122
+ @err.puts "woyo server version #{Woyo::SERVER_VERSION}"
123
+ @err.puts "woyo world version #{Woyo::WORLD_VERSION}"
124
+ end
125
+
126
+ end
127
+
128
+ end
129
+
@@ -6,18 +6,27 @@ module Woyo
6
6
 
7
7
  class Server < Sinatra::Application
8
8
 
9
+ def self.load_world
10
+ world = Woyo::World.new
11
+ Dir['world/*.rb'].each do |filename|
12
+ world.instance_eval File.read filename
13
+ end
14
+ world
15
+ end
16
+
9
17
  configure do
10
- set root: '.'
11
18
  enable :sessions
19
+ set root: '.'
20
+ set world: self.load_world
12
21
  end
13
22
 
14
23
  def world
15
- raise 'No world provided' unless settings.respond_to? :world
16
24
  settings.world
17
25
  end
18
26
 
19
27
  get '/' do
20
- @location = world.location :home
28
+ redirect to '/default.html' if world.locations.empty?
29
+ @location ||= world.locations[:home] || world.locations.values.first
21
30
  session[:location] = @location
22
31
  haml :location
23
32
  end
@@ -1,3 +1,3 @@
1
1
  module Woyo
2
- SERVER_VERSION = "0.0.1.pre2"
2
+ SERVER_VERSION = "0.0.1"
3
3
  end
@@ -0,0 +1,15 @@
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/spec/spec_helper.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'woyo/server'
2
1
  require 'rack/test'
3
2
  require 'capybara/rspec'
4
3
  Capybara.app = Woyo::Server
@@ -1,5 +1,5 @@
1
+ require_relative '../../../lib/woyo/server'
1
2
  require 'spec_helper.rb'
2
- require 'woyo/server'
3
3
 
4
4
  describe Woyo::Server, :type => :feature do
5
5
 
@@ -53,9 +53,12 @@ describe Woyo::Server, :type => :feature do
53
53
  end
54
54
  end
55
55
 
56
- it 'requires a world' do
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
59
  visit '/'
58
- status_code.should eq 500
60
+ status_code.should eq 200
61
+ page.should have_content 'Welcome'
59
62
  end
60
63
 
61
64
  it 'accepts a world' do
@@ -0,0 +1,155 @@
1
+ require_relative '../../../lib/woyo/runner'
2
+ require 'fileutils'
3
+ require 'stringio'
4
+ require 'open-uri'
5
+
6
+ describe Woyo::Runner do
7
+
8
+ before :each do
9
+ @output = StringIO.new
10
+ @error = StringIO.new
11
+ end
12
+
13
+ before :all do
14
+ @original_path = Dir.pwd
15
+ File.basename(@original_path).should eq 'woyo-server'
16
+ @test_dir = 'tmp/test'
17
+ end
18
+
19
+ it 'prints a helpful message to stderr for help (-h/--help) switch' do
20
+ [['-h'],['--help']].each do |args|
21
+ Woyo::Runner.run( args, out: @output, err: @error ).should eq 0
22
+ @error.string.should include 'woyo'
23
+ end
24
+ end
25
+
26
+ it 'prints version info to stderr for version (-v/--version) switch' do
27
+ [['-v'],['--version']].each do |args|
28
+ Woyo::Runner.run( args, out: @output, err: @error ).should eq 0
29
+ @error.string.should include 'woyo'
30
+ @error.string.should include Woyo::SERVER_VERSION
31
+ @error.string.should include Woyo::WORLD_VERSION
32
+ end
33
+ end
34
+
35
+ context 'new' do
36
+
37
+ before :all do
38
+ @expected_entries = [ 'public', 'views', 'world' ]
39
+ end
40
+
41
+ before :each do
42
+ Dir.pwd.should eq @original_path
43
+ FileUtils.rm_rf @test_dir
44
+ FileUtils.mkdir_p @test_dir
45
+ Dir.chdir @test_dir
46
+ Dir.pwd.should eq File.join( @original_path, @test_dir )
47
+ end
48
+
49
+ after :each do
50
+ Dir.chdir @original_path
51
+ Dir.pwd.should eq @original_path
52
+ end
53
+
54
+ it 'requires a directory be specified' do
55
+ Woyo::Runner.run( ['new'], out: @output, err: @error ).should eq -1
56
+ end
57
+
58
+ 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
63
+ end
64
+ end
65
+
66
+ 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
74
+ end
75
+
76
+ it 'requires force (-f/--force) for existing directory' do
77
+ [['new','testworld'],['new','test/testworld'],['new','.']].each do |args|
78
+ dir = args[1]
79
+ FileUtils.mkdir_p dir
80
+ Dir.should exist dir
81
+ Woyo::Runner.run( args, out: @output, err: @error ).should eq -2
82
+ [['--force'],['-f']].each do |force|
83
+ FileUtils.mkdir_p dir
84
+ Dir.should exist dir
85
+ Woyo::Runner.run( args + force, out: @output, err: @error ).should eq 0
86
+ Dir.should exist dir
87
+ (Dir.entries(dir) & @expected_entries).sort.should eq @expected_entries # subset
88
+ FileUtils.rm_rf dir
89
+ end
90
+ end
91
+ end
92
+
93
+ it 'help (-h/--help) explains new command' do
94
+ [['-h'],['--help']].each do |help|
95
+ Woyo::Runner.run( ['new'] + help, out: @output, err: @error ).should eq 0
96
+ @error.string.should include 'woyo new'
97
+ end
98
+ end
99
+
100
+ end
101
+
102
+ context 'server' do
103
+
104
+ before :all do
105
+ Dir.pwd.should eq @original_path
106
+ FileUtils.rm_rf @test_dir
107
+ FileUtils.mkdir_p @test_dir
108
+ Dir.chdir @test_dir
109
+ Dir.pwd.should eq File.join( @original_path, @test_dir )
110
+ Woyo::Runner.run( ['new','testworld'], out: @output, err: @error ).should eq 0
111
+ Dir.chdir 'testworld'
112
+ Dir.pwd.should eq File.join( @original_path, @test_dir, 'testworld' )
113
+ end
114
+
115
+ after :all do
116
+ Dir.chdir @original_path
117
+ Dir.pwd.should eq @original_path
118
+ end
119
+
120
+ it 'starts a world application server' do
121
+ thread = Thread.new { Woyo::Runner.run( ['server'], out: @output, err: @error ) }
122
+ thread.should be_alive
123
+ sleep 2
124
+ @error.string.should include 'has taken the stage'
125
+ Woyo::Server.set :world, Woyo::World.new { location(:home) { name 'Home' } }
126
+ page = ''
127
+ expect { page = open("http://127.0.0.1:4567/").read }.to_not raise_error
128
+ page.should include 'Home'
129
+ Woyo::Server.stop!
130
+ thread.join
131
+ end
132
+
133
+ it 'help (-h/--help) explains server command' do
134
+ [['-h'],['--help']].each do |help|
135
+ Woyo::Runner.run( ['server'] + help, out: @output, err: @error ).should eq 0
136
+ @error.string.should include 'woyo server'
137
+ end
138
+ end
139
+
140
+ end
141
+
142
+ context 'console' do
143
+
144
+ it 'starts a world application console'
145
+
146
+ it 'help (-h/--help) explains console command' do
147
+ [['-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'
150
+ end
151
+ end
152
+
153
+ end
154
+
155
+ end
data/world/default.rb ADDED
@@ -0,0 +1,76 @@
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
+
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.pre2
4
+ version: 0.0.1
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-04-25 00:00:00.000000000 Z
11
+ date: 2014-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -140,7 +140,7 @@ description: Game world server
140
140
  email:
141
141
  - gerard.fowley@iqeo.net
142
142
  executables:
143
- - woyo.rb
143
+ - woyo
144
144
  extensions: []
145
145
  extra_rdoc_files: []
146
146
  files:
@@ -151,15 +151,19 @@ files:
151
151
  - LICENSE.txt
152
152
  - README.md
153
153
  - Rakefile
154
- - bin/woyo.rb
154
+ - bin/woyo
155
+ - lib/woyo/runner.rb
155
156
  - lib/woyo/server.rb
156
157
  - lib/woyo/server/server.rb
157
158
  - lib/woyo/server/version.rb
159
+ - public/default.html
158
160
  - spec/spec_helper.rb
159
- - spec/woyo/server/server_spec.rb
161
+ - spec/woyo/server/1_server_spec.rb
162
+ - spec/woyo/server/runner_spec.rb
160
163
  - tmux
161
164
  - views/layout.haml
162
165
  - views/location.haml
166
+ - world/default.rb
163
167
  - woyo-server.gemspec
164
168
  homepage: ''
165
169
  licenses:
@@ -176,9 +180,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
180
  version: '0'
177
181
  required_rubygems_version: !ruby/object:Gem::Requirement
178
182
  requirements:
179
- - - ">"
183
+ - - ">="
180
184
  - !ruby/object:Gem::Version
181
- version: 1.3.1
185
+ version: '0'
182
186
  requirements: []
183
187
  rubyforge_project:
184
188
  rubygems_version: 2.2.2
@@ -187,4 +191,5 @@ specification_version: 4
187
191
  summary: World of Your Own
188
192
  test_files:
189
193
  - spec/spec_helper.rb
190
- - spec/woyo/server/server_spec.rb
194
+ - spec/woyo/server/1_server_spec.rb
195
+ - spec/woyo/server/runner_spec.rb