muding 0.1.0 → 0.1.1
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/CHANGELOG +6 -0
- data/lib/acts/expireable.rb +1 -1
- data/lib/commands/server.rb +0 -1
- data/lib/controller.rb +58 -39
- data/lib/handle.rb +19 -6
- data/lib/muding.rb +7 -1
- metadata +2 -2
data/CHANGELOG
CHANGED
data/lib/acts/expireable.rb
CHANGED
data/lib/commands/server.rb
CHANGED
data/lib/controller.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
module Controller
|
2
2
|
Log = Log4r::Logger.new 'controller'
|
3
3
|
Log.outputters = Log4r::Outputter.stdout
|
4
|
+
|
5
|
+
class NoCommandException < Exception;end
|
6
|
+
|
7
|
+
|
4
8
|
|
5
9
|
class Base
|
10
|
+
alias :route :class
|
6
11
|
attr_accessor :input, :body, :rendered
|
7
12
|
attr_accessor :new_route, :default_command, :prompt
|
8
13
|
|
@@ -12,6 +17,7 @@ module Controller
|
|
12
17
|
#next command controller, or default command.
|
13
18
|
#
|
14
19
|
# route_to :route =>StartController, :command=>:begin, :prompt=>">"
|
20
|
+
#
|
15
21
|
# This will make the user's next input goto the StartController
|
16
22
|
# with the command "begin". After rendering the command
|
17
23
|
# it will output ">" to the user.
|
@@ -28,59 +34,82 @@ module Controller
|
|
28
34
|
|
29
35
|
self.new_route = config[:controller]
|
30
36
|
self.default_command = config[:command]
|
37
|
+
|
31
38
|
self.prompt = config[:prompt] if config[:prompt] != ""
|
32
39
|
self.prompt = render_template(before_view_file) if config[:view] == :default && @@before_view[config[:command]]
|
33
40
|
end
|
34
41
|
|
35
42
|
#TODO: Implement this.
|
36
|
-
#Should jump to next controller method right
|
37
|
-
#
|
38
|
-
#
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
#Should jump to next controller method right after this one finishes
|
44
|
+
#def redirect_to(options={})
|
45
|
+
# config = {:route => self.class, :command => nil, :prompt => "", :view => :default}
|
46
|
+
# config.update options if options.is_a?(Hash)
|
47
|
+
#end
|
48
|
+
|
49
|
+
#render sets the text that will be sent back as a response to this command
|
50
|
+
#you can only render once per controller. This is in place to avoid magical
|
51
|
+
#renderings from happening out of the developers control.
|
52
|
+
#
|
53
|
+
#render called with no options yields the view file rendered if one exists.
|
54
|
+
#
|
55
|
+
# render #=> renders /mud/views/controller/view.rhtml
|
56
|
+
#
|
57
|
+
# render :text => "send this to them" #=> send this to them
|
45
58
|
def render(options = {})
|
46
59
|
raise "Double Render Error" if self.rendered
|
47
|
-
|
48
60
|
self.rendered = true
|
49
61
|
return if options[:nothing]
|
50
62
|
if options[:text]
|
51
63
|
@body = options[:text]
|
52
64
|
return
|
53
65
|
end
|
54
|
-
@body = render_template(view_file)
|
55
|
-
|
56
|
-
@body += self.prompt if self.prompt
|
66
|
+
@body = render_template(view_file(@method))
|
57
67
|
end
|
58
|
-
|
68
|
+
|
59
69
|
def initialize(command, s = {}) #:nodoc:
|
60
70
|
@method = command.downcase
|
61
71
|
@session = s
|
62
72
|
end
|
63
73
|
|
64
|
-
|
65
|
-
|
74
|
+
#service is the main method that controlls the flow through the controller.
|
75
|
+
#first it runs the method,
|
76
|
+
#then it renders the view if something hasn't already been rendered
|
77
|
+
#then it tacks the prompt onto the end of the command.
|
78
|
+
def service(*a)
|
79
|
+
if respond_to? @method
|
80
|
+
if self.method(@method).arity >= 1
|
81
|
+
send(@method, *a)
|
82
|
+
else
|
83
|
+
send(@method)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
if !self.rendered
|
87
|
+
render
|
88
|
+
end
|
89
|
+
|
90
|
+
@body += self.prompt if self.prompt
|
91
|
+
|
92
|
+
session[:handle].puts(@body)
|
93
|
+
|
94
|
+
self
|
66
95
|
end
|
67
|
-
|
68
|
-
def view_file
|
69
|
-
command_file =
|
96
|
+
|
97
|
+
def view_file(method)
|
98
|
+
command_file = method + ".rhtml"
|
70
99
|
load_and_read_file(command_file)
|
71
100
|
end
|
72
101
|
|
73
102
|
def before_view_file
|
74
|
-
|
75
|
-
load_and_read_file(command_file)
|
103
|
+
view_file @@before_view[default_command].to_s
|
76
104
|
end
|
77
105
|
|
106
|
+
#this method uses view_dir...
|
78
107
|
def load_and_read_file(file_name)
|
79
108
|
file = File.open(File.join(view_dir, file_name))
|
80
109
|
file.read
|
81
|
-
|
82
|
-
|
83
|
-
|
110
|
+
rescue Errno::ENOENT
|
111
|
+
#if we haven't at least rendered something, we are going to through a nocommand exception here..
|
112
|
+
raise Controller::NoCommandException
|
84
113
|
end
|
85
114
|
|
86
115
|
def view_dir
|
@@ -91,14 +120,6 @@ module Controller
|
|
91
120
|
ERB.new(vf, nil, '-').result(binding)
|
92
121
|
end
|
93
122
|
|
94
|
-
def service(*a)
|
95
|
-
send(@method, *a) if respond_to? @method
|
96
|
-
if !self.rendered
|
97
|
-
render
|
98
|
-
end
|
99
|
-
self
|
100
|
-
end
|
101
|
-
|
102
123
|
def session()
|
103
124
|
return @session
|
104
125
|
end
|
@@ -113,8 +134,8 @@ module Controller
|
|
113
134
|
end
|
114
135
|
|
115
136
|
class NotFound < Base
|
116
|
-
def get
|
117
|
-
render :text=>"
|
137
|
+
def get
|
138
|
+
render :text=>"There is no command for that."
|
118
139
|
end
|
119
140
|
end
|
120
141
|
|
@@ -124,9 +145,7 @@ module Controller
|
|
124
145
|
end
|
125
146
|
end
|
126
147
|
|
127
|
-
|
128
|
-
|
129
|
-
|
148
|
+
#Load all the controllers.
|
149
|
+
load "./mud/controllers/mud.rb"
|
150
|
+
Dir["./mud/controllers/*_controller.rb"].sort.each { |ext| load ext.to_s }
|
130
151
|
end
|
131
|
-
|
132
|
-
|
data/lib/handle.rb
CHANGED
@@ -25,18 +25,31 @@ class Handle
|
|
25
25
|
response = Muding.run("begin", self)
|
26
26
|
|
27
27
|
while true
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
self.default_command = nil
|
32
|
-
self.default_command = response.default_command if response.default_command
|
33
|
-
response = Muding.run(peer.gets, self)
|
28
|
+
update_route(response) if response
|
29
|
+
response = Muding.run(peer.gets, self) #blocks on peer.gets
|
34
30
|
end
|
31
|
+
|
35
32
|
rescue Errno::EPIPE
|
36
33
|
Log.info "Connection " + self.object_id.to_s + " Severed"
|
37
34
|
end
|
38
35
|
|
36
|
+
def update_route(response)
|
37
|
+
self.route = response.new_route if response.new_route
|
38
|
+
self.default_command = nil
|
39
|
+
self.default_command = response.default_command if response.default_command
|
40
|
+
end
|
41
|
+
|
39
42
|
def message(message_string)
|
40
43
|
peer.puts message_string
|
41
44
|
end
|
45
|
+
|
46
|
+
def puts(string)
|
47
|
+
peer.puts(string)
|
48
|
+
rescue Error
|
49
|
+
end
|
50
|
+
|
51
|
+
def shutdown()
|
52
|
+
read_and_write = 2
|
53
|
+
peer.shutdown(read_and_write)
|
54
|
+
end
|
42
55
|
end
|
data/lib/muding.rb
CHANGED
@@ -30,13 +30,19 @@ module Muding
|
|
30
30
|
args = input
|
31
31
|
end
|
32
32
|
|
33
|
+
if command == nil
|
34
|
+
raise Controller::NoCommandException
|
35
|
+
end
|
36
|
+
|
33
37
|
return route.new(command, session).service(*args)
|
34
38
|
|
39
|
+
rescue Controller::NoCommandException
|
40
|
+
return Controller::NotFound.new("get",session).service()
|
35
41
|
rescue Errno::EPIPE
|
36
42
|
raise
|
37
43
|
rescue Exception => x
|
38
44
|
Log.warn x
|
39
|
-
return
|
45
|
+
return Controller::ServerError.new("get",session).service()
|
40
46
|
end
|
41
47
|
def reload_controller_code
|
42
48
|
load "./mud/controllers/mud.rb"
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: muding
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2006-07-
|
6
|
+
version: 0.1.1
|
7
|
+
date: 2006-07-25 00:00:00 -05:00
|
8
8
|
summary: an application framework for building multi-user environments.
|
9
9
|
require_paths:
|
10
10
|
- lib
|