changeset 505:7bc63886d4f2

web page modules now return a function
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 May 2015 01:45:49 -0600
parents dbdf4b8193a8
children 342964519194
files http/src/luan/modules/http/HttpServicer.java http/src/luan/modules/http/HttpTest.luan http/src/luan/modules/http/ShellMod.luan http/src/luan/modules/http/run.luan http/src/luan/modules/http/shell.luan lucene/src/luan/modules/lucene/Ab_testing.luan lucene/src/luan/modules/lucene/Web_search.luan scripts/test.luan website/src/Shared.luan website/src/diff.html.luan website/src/docs.html.luan website/src/examples/hi.luan website/src/examples/hi2.luan website/src/examples/hi2_simply_html.luan website/src/index.html.luan website/src/manual.html.luan website/src/pil.html.luan website/src/tutorial.html.luan
diffstat 18 files changed, 101 insertions(+), 145 deletions(-) [+]
line wrap: on
line diff
--- a/http/src/luan/modules/http/HttpServicer.java	Thu May 21 01:09:35 2015 -0600
+++ b/http/src/luan/modules/http/HttpServicer.java	Thu May 21 01:45:49 2015 -0600
@@ -52,9 +52,8 @@
 			Object mod = PackageLuan.load(luan,modName);
 			if( mod==null )
 				return false;
-			if( !(mod instanceof LuanTable) )
-				throw luan.exception( "module '"+modName+"' must return a table" );
-			LuanTable tbl = (LuanTable)mod;
+			if( !(mod instanceof LuanFunction) )
+				throw luan.exception( "module '"+modName+"' must return a function" );
 			if( Boolean.TRUE.equals(per_session_pages.rawGet(mod)) ) {
 				HttpSession session = request.getSession();
 				LuanState sessionLuan  = (LuanState)session.getValue("luan");
@@ -65,13 +64,11 @@
 					luan = (LuanState)cloner.deepClone(luan);
 					session.putValue("luan",luan);
 				}
-				tbl = (LuanTable)PackageLuan.require(luan,modName);
-				fn = getService(luan,tbl);
+				fn = (LuanFunction)PackageLuan.require(luan,modName);
 			} else {
-				fn = getService(luan,tbl);
 				DeepCloner cloner = new DeepCloner();
 				luan = (LuanState)cloner.deepClone(luan);
-				fn = (LuanFunction)cloner.get(fn);
+				fn = (LuanFunction)cloner.get(mod);
 			}
 		}
 
@@ -164,17 +161,6 @@
 		return true;
 	}
 
-	private static LuanFunction getService(LuanState luan,LuanTable tbl)
-		throws LuanException
-	{
-		Object respond = tbl.get(luan,"respond");
-		if( respond == null )
-			throw luan.exception( "function 'respond' is not defined" );
-		if( !(respond instanceof LuanFunction) )
-			throw luan.exception( "'respond' must be a function but is a " + Luan.type(respond) );
-		return (LuanFunction)respond;
-	}
-
 	private static void setResponse(LuanTable module,HttpServletResponse response) throws LuanException {
 		LuanTable responseTbl = (LuanTable)module.rawGet("response");
 		int status = Luan.asInteger(responseTbl.rawGet("status"));
--- a/http/src/luan/modules/http/HttpTest.luan	Thu May 21 01:09:35 2015 -0600
+++ b/http/src/luan/modules/http/HttpTest.luan	Thu May 21 01:45:49 2015 -0600
@@ -12,7 +12,7 @@
 	end
 	local old_out = Io.stdout
 	local mod = require("site:"..path)
-	mod.respond()
+	mod()
 	M.text_writer.close()
 	Io.stdout = old_out
 	return M.result.read_text()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/http/src/luan/modules/http/ShellMod.luan	Thu May 21 01:45:49 2015 -0600
@@ -0,0 +1,72 @@
+local Luan = require "luan:Luan"
+local ipairs = Luan.ipairs
+local load = Luan.load
+local try = Luan.try
+local Io = require "luan:Io"
+local print = Io.print
+local Debug = require "luan:Debug"
+local Http = require "luan:http/Http"
+local Html = require "luan:Html"
+
+local M = {}
+
+local history = {}
+M.env = {}
+
+function M.respond()
+	if Http.request.parameter.clear ~= nil then
+		history = {}
+	else
+		local cmd = Http.request.parameter.cmd
+		if cmd ~= nil then
+			Io.stdout = {}
+			function Io.stdout.write(...)
+				for v in Luan.values(...) do
+					history[#history+1] = v
+				end
+			end
+			print( "% "..cmd )
+			try {
+				function()
+					local line = load(cmd,"<web_shell>",M.env,true)
+					Debug.print_if_something( line() )
+				end;
+				catch = function(e)
+					Io.print_to(Io.stderr,e)
+					print(e)
+				end;
+			}
+		end
+	end
+
+	Io.stdout = Http.response.text_writer()
+%>
+<html>
+	<head>
+		<% Html.simply_html_head() %>
+		<title>Luan Shell</title>
+	</head>
+	<body>
+		<div container>
+			<h3>Luan Shell</h3>
+			<p>This is a command shell.  Enter commands below.</p>
+			<pre><%
+			for _,v in ipairs(history) do
+				Io.stdout.write(v)
+			end
+			%></pre>
+			<form name='form0' method='post'>
+				% <input name='cmd' size="80" autofocus>
+				<input type="submit" value="run" textcolor="white" bgcolor="#337ab7">
+				<input type="submit" name="clear" value="clear" textcolor="white" bgcolor="#337ab7">
+			</form>
+		</div>
+		<% Html.simply_html_body_bottom() %>
+	</body>
+</html>
+<%
+end
+
+Http.per_session(M.respond)
+
+return M
--- a/http/src/luan/modules/http/run.luan	Thu May 21 01:09:35 2015 -0600
+++ b/http/src/luan/modules/http/run.luan	Thu May 21 01:45:49 2015 -0600
@@ -7,7 +7,6 @@
 local String = require "luan:String"
 local Html = require "luan:Html"
 
-local M = {}
 
 local function lines(s)
 	local matcher = s.gmatch "([^\n]*)\n|([^\n])+$"
@@ -49,7 +48,7 @@
 </html>
 <% end
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 	local code = Http.request.parameter.code
 	if code == nil then
@@ -78,5 +77,3 @@
 		end;
 	}
 end
-
-return M
--- a/http/src/luan/modules/http/shell.luan	Thu May 21 01:09:35 2015 -0600
+++ b/http/src/luan/modules/http/shell.luan	Thu May 21 01:45:49 2015 -0600
@@ -1,72 +1,1 @@
-local Luan = require "luan:Luan"
-local ipairs = Luan.ipairs
-local load = Luan.load
-local try = Luan.try
-local Io = require "luan:Io"
-local print = Io.print
-local Debug = require "luan:Debug"
-local Http = require "luan:http/Http"
-local Html = require "luan:Html"
-
-local M = {}
-
-Http.per_session(M)
-
-local history = {}
-M.env = {}
-
-function M.respond()
-	if Http.request.parameter.clear ~= nil then
-		history = {}
-	else
-		local cmd = Http.request.parameter.cmd
-		if cmd ~= nil then
-			Io.stdout = {}
-			function Io.stdout.write(...)
-				for v in Luan.values(...) do
-					history[#history+1] = v
-				end
-			end
-			print( "% "..cmd )
-			try {
-				function()
-					local line = load(cmd,"<web_shell>",M.env,true)
-					Debug.print_if_something( line() )
-				end;
-				catch = function(e)
-					Io.print_to(Io.stderr,e)
-					print(e)
-				end;
-			}
-		end
-	end
-
-	Io.stdout = Http.response.text_writer()
-%>
-<html>
-	<head>
-		<% Html.simply_html_head() %>
-		<title>Luan Shell</title>
-	</head>
-	<body>
-		<div container>
-			<h3>Luan Shell</h3>
-			<p>This is a command shell.  Enter commands below.</p>
-			<pre><%
-			for _,v in ipairs(history) do
-				Io.stdout.write(v)
-			end
-			%></pre>
-			<form name='form0' method='post'>
-				% <input name='cmd' size="80" autofocus>
-				<input type="submit" value="run" textcolor="white" bgcolor="#337ab7">
-				<input type="submit" name="clear" value="clear" textcolor="white" bgcolor="#337ab7">
-			</form>
-		</div>
-		<% Html.simply_html_body_bottom() %>
-	</body>
-</html>
-<%
-end
-
-return M
+return require("luan:http/ShellMod").respond
--- a/lucene/src/luan/modules/lucene/Ab_testing.luan	Thu May 21 01:09:35 2015 -0600
+++ b/lucene/src/luan/modules/lucene/Ab_testing.luan	Thu May 21 01:45:49 2015 -0600
@@ -133,7 +133,7 @@
 	end
 
 	function ab_testing.web_page(test_names)
-		return { respond = function()
+		return function()
 			local results = {}
 			for _, name in ipairs(test_names) do
 				local test = ab_testing.test_map[name]
@@ -142,7 +142,7 @@
 			end
 			Io.stdout = Http.response.text_writer()
 			M.html(test_names,ab_testing.test_map,results)
-		end }
+		end
 	end
 
 	return ab_testing
--- a/lucene/src/luan/modules/lucene/Web_search.luan	Thu May 21 01:09:35 2015 -0600
+++ b/lucene/src/luan/modules/lucene/Web_search.luan	Thu May 21 01:45:49 2015 -0600
@@ -122,7 +122,7 @@
 
 function M.of(index)
 
-	return { respond = function()
+	return function()
 		Io.stdout = Http.response.text_writer()
 		local query_string = Http.request.parameter.query
 		if query_string == nil then
@@ -145,7 +145,7 @@
 			end
 			result(query,sort,headers,table)
 		end )
-	end }
+	end
 
 end
 
--- a/scripts/test.luan	Thu May 21 01:09:35 2015 -0600
+++ b/scripts/test.luan	Thu May 21 01:45:49 2015 -0600
@@ -69,19 +69,19 @@
 end
 
 init()
-ab_testing.web_page{"All","null"}.respond()
+ab_testing.web_page{"All","null"}()
 
 local Web_search = require "luan:lucene/Web_search"
 local web_search = Web_search.of(db)
 
 init()
-web_search.respond()
+web_search()
 
 init()
 Http.request.parameter.query = "Query.all_docs"
 Http.request.parameter.rows = "100"
 Http.request.parameter.sort = ""
-web_search.respond()
+web_search()
 
 
 -- website
--- a/website/src/Shared.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/Shared.luan	Thu May 21 01:45:49 2015 -0600
@@ -4,4 +4,6 @@
 	<div><small><a href="/">Luan</a></small></div>
 <% end
 
+M.heading_options = [[margin-top="2em" margin-bottom=".6em" textcolor="#233E93"]]
+
 return M
--- a/website/src/diff.html.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/diff.html.luan	Thu May 21 01:45:49 2015 -0600
@@ -3,12 +3,10 @@
 local Http = require "luan:http/Http"
 local Shared = require "site:/Shared"
 local Manual = require "site:/manual.html"
-
-local M = {}
+local heading_options = Shared.heading_options
 
-local heading_options = Manual.heading_options
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 %>
 <html>
@@ -208,5 +206,3 @@
 </html>
 <%
 end
-
-return M
--- a/website/src/docs.html.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/docs.html.luan	Thu May 21 01:45:49 2015 -0600
@@ -3,9 +3,8 @@
 local Http = require "luan:http/Http"
 local Shared = require "site:/Shared"
 
-local M = {}
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 %>
 <html>
@@ -33,5 +32,3 @@
 </html>
 <%
 end
-
-return M
--- a/website/src/examples/hi.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/examples/hi.luan	Thu May 21 01:45:49 2015 -0600
@@ -1,9 +1,8 @@
 local Io = require "luan:Io"
 local Http = require "luan:http/Http"
 
-local M = {}
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 	%>
 	<html>
@@ -13,5 +12,3 @@
 	</html>
 	<%
 end
-
-return M
--- a/website/src/examples/hi2.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/examples/hi2.luan	Thu May 21 01:45:49 2015 -0600
@@ -1,7 +1,6 @@
 local Io = require "luan:Io"
 local Http = require "luan:http/Http"
 
-local M = {}
 
 local function form()
 %>
@@ -29,7 +28,7 @@
 <%
 end
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 	local name = Http.request.parameter.name
 	if name == nil then
@@ -38,5 +37,3 @@
 		hello(name)
 	end
 end
-
-return M
--- a/website/src/examples/hi2_simply_html.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/examples/hi2_simply_html.luan	Thu May 21 01:45:49 2015 -0600
@@ -2,7 +2,6 @@
 local Html = require "luan:Html"
 local Http = require "luan:http/Http"
 
-local M = {}
 
 local function form() %>
 			<form>
@@ -18,7 +17,7 @@
 <% end
 
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 	local name = Http.request.parameter.name
 %>
@@ -43,5 +42,3 @@
 </html>
 <%
 end
-
-return M
--- a/website/src/index.html.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/index.html.luan	Thu May 21 01:45:49 2015 -0600
@@ -2,9 +2,8 @@
 local Html = require "luan:Html"
 local Http = require "luan:http/Http"
 
-local M = {}
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 %>
 <html>
@@ -32,5 +31,3 @@
 </html>
 <%
 end
-
-return M
--- a/website/src/manual.html.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/manual.html.luan	Thu May 21 01:45:49 2015 -0600
@@ -3,13 +3,10 @@
 local Html = require "luan:Html"
 local Http = require "luan:http/Http"
 local Shared = require "site:/Shared"
-
-local M = {}
-
-local heading_options = [[margin-top="2em" margin-bottom=".6em" textcolor="#233E93"]]
-M.heading_options = heading_options
-
-function M.respond()
+local heading_options = Shared.heading_options
+
+
+return function()
 	Io.stdout = Http.response.text_writer()
 %>
 <html>
@@ -5132,5 +5129,3 @@
 </html>
 <%
 end
-
-return M
--- a/website/src/pil.html.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/pil.html.luan	Thu May 21 01:45:49 2015 -0600
@@ -3,9 +3,8 @@
 local Http = require "luan:http/Http"
 local Shared = require "site:/Shared"
 
-local M = {}
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 %>
 <html>
@@ -26,5 +25,3 @@
 </html>
 <%
 end
-
-return M
--- a/website/src/tutorial.html.luan	Thu May 21 01:09:35 2015 -0600
+++ b/website/src/tutorial.html.luan	Thu May 21 01:45:49 2015 -0600
@@ -3,9 +3,8 @@
 local Http = require "luan:http/Http"
 local Shared = require "site:/Shared"
 
-local M = {}
 
-function M.respond()
+return function()
 	Io.stdout = Http.response.text_writer()
 %>
 <html>
@@ -110,5 +109,3 @@
 </html>
 <%
 end
-
-return M