# HG changeset patch # User jbe # Date 1426588954 -3600 # Node ID c3d539e33710c1bc01dc1864215f408efbc4f0a8 # Parent 343f9af7f61ffa4fe95430ffed9044a83f798792 Replaced request.add_initializer(...) and request.add_variable(...) with request.for_each(...) and request.configure(...) which both execute the passed function once in any case when being called diff -r 343f9af7f61f -r c3d539e33710 framework/env/charset/__init.lua --- a/framework/env/charset/__init.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/charset/__init.lua Tue Mar 17 11:42:34 2015 +0100 @@ -1,1 +1,3 @@ -request.add_variable(charset, "_current", "UTF-8") +request.for_each(function() + charset._current = "UTF-8" +end) diff -r 343f9af7f61f -r c3d539e33710 framework/env/charset/set.lua --- a/framework/env/charset/set.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/charset/set.lua Tue Mar 17 11:42:34 2015 +0100 @@ -8,5 +8,7 @@ --]]-- function charset.set(charset_ident) - charset._current = charset_ident + request.configure(function() + charset._current = charset_ident + end) end diff -r 343f9af7f61f -r c3d539e33710 framework/env/locale/__init.lua --- a/framework/env/locale/__init.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/locale/__init.lua Tue Mar 17 11:42:34 2015 +0100 @@ -1,4 +1,6 @@ -request.add_variable(locale, "_current_data", {}) locale._translation_tables = {} locale._empty_translation_table = {} +request.for_each(function() + locale._current_data = {} +end) diff -r 343f9af7f61f -r c3d539e33710 framework/env/locale/do_with.lua --- a/framework/env/locale/do_with.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/locale/do_with.lua Tue Mar 17 11:42:34 2015 +0100 @@ -11,12 +11,16 @@ --]]-- function locale.do_with(locale_options, block) - local old_data = {} - for key, value in pairs(locale._current_data) do - old_data[key] = value + local old_data = table.new(locale._current_data) + if locale_options.reset then + locale._current_data = {} + end + for key, value in pairs(locale_options) do + if key ~= "reset" then + locale._current_data[key] = value + end end locale.set(locale_options) block() - old_data.reset = true - locale.set(old_data) + locale._current_data = old_data end diff -r 343f9af7f61f -r c3d539e33710 framework/env/locale/set.lua --- a/framework/env/locale/set.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/locale/set.lua Tue Mar 17 11:42:34 2015 +0100 @@ -8,12 +8,14 @@ --]]-- function locale.set(locale_options) - if locale_options.reset then - locale._current_data = {} - end - for key, value in pairs(locale_options) do - if key ~= "reset" then - locale._current_data[key] = value + request.configure(function() + if locale_options.reset then + locale._current_data = {} end - end + for key, value in pairs(locale_options) do + if key ~= "reset" then + locale._current_data[key] = value + end + end + end) end diff -r 343f9af7f61f -r c3d539e33710 framework/env/param/__init.lua --- a/framework/env/param/__init.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/param/__init.lua Tue Mar 17 11:42:34 2015 +0100 @@ -1,4 +1,4 @@ -request.add_initializer(function() +request.for_each(function() param._exchanged = false -- important to be false, not nil param._saved = {} -- stack end) diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/__init.lua --- a/framework/env/request/__init.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/request/__init.lua Tue Mar 17 11:42:34 2015 +0100 @@ -5,18 +5,20 @@ request._absolute_baseurl = nil request._http_options = {} --- initialize once and re-initialize per request -request.add_variable(request, "_response_headers", {}) -request.add_variable(request, "_force_absolute_baseurl", false) -request.add_variable(request, "_perm_params", {}) -request.add_variable(request, "_404_route", nil) +request.for_each(function() --- initialize per request -request.add_initializer(function() + -- configurable + request._response_headers = {} + request._force_absolute_baseurl = false + request._perm_params = {} + request._404_route = nil + + -- non-configurable request._http_request = nil request._status = nil request._forward = nil request._forward_processed = false request._redirect = nil request._csrf_secret = nil + end) diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/add_header.lua --- a/framework/env/request/add_header.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/request/add_header.lua Tue Mar 17 11:42:34 2015 +0100 @@ -2,5 +2,8 @@ if value == nil then error("Function request.add_header(...) requires two arguments") end - request._response_headers[#request._response_headers+1] = {key, value} + request.configure(function() + local headers = request._response_headers + headers[#headers+1] = {key, value} + end) end diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/add_initializer.lua --- a/framework/env/request/add_initializer.lua Mon Mar 16 23:21:18 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ ---[[-- -request.add_initializer( - func -- function to be called on every request -) - -Registers a function to be called on every request. This mechanism can be used for __init.lua files in the environment to perform a per-request initialization. See env/request/__init.lua for an example. - ---]]-- - -function request.add_initializer(func) - local initializers = request._initializers - initializers[#initializers+1] = func - if request._in_progress then - func(true) - end -end diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/add_variable.lua --- a/framework/env/request/add_variable.lua Mon Mar 16 23:21:18 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ ---[[-- -request.add_variable( - tbl, -- table where the variable is stored - key, -- name of variable (key within the table) - value -- optional value for initialization -) - -Marks a field of a table to be re-initialized for every request. If this variable (i.e. the field of the table) is modified before the first requst is being handled (e.g. during configuration or pre-/post-fork initializers), then the modified value will be used for re-initialization on every request. If the (modified) value is a table, the table will be cloned on every request to avoid side-effects between different requests. Note, however, that only the first level of the table is cloned. See env/request/__init.lua for examples. - ---]]-- - -function request.add_variable(tbl, key, value) - local initval, istable - tbl[key] = value - request.add_initializer(function(first) - if first then - initval = tbl[key] - istable = type(initval) == "table" - else - if istable then - tbl[key] = table.new(initval) - else - tbl[key] = initval - end - end - end) -end diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/configure.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/framework/env/request/configure.lua Tue Mar 17 11:42:34 2015 +0100 @@ -0,0 +1,16 @@ +--[[-- +request.configure( + func -- function which is performing the configuration +) + +Registers a function to be called on every request only if a request is not in progress yet. Executes the function once in any case. + +--]]-- + +function request.configure(func) + if not request._in_progress then + local initializers = request._initializers + initializers[#initializers+1] = func + end + func() +end diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/for_each.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/framework/env/request/for_each.lua Tue Mar 17 11:42:34 2015 +0100 @@ -0,0 +1,14 @@ +--[[-- +request.for_each( + func -- function to be called on every request +) + +Registers a function to be called on every request and executes it once. This mechanism can be used for __init.lua files in the environment to perform a per-request initialization. See env/request/__init.lua for an example. + +--]]-- + +function request.for_each(func) + local initializers = request._initializers + initializers[#initializers+1] = func + func() +end diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/force_absolute_baseurl.lua --- a/framework/env/request/force_absolute_baseurl.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/request/force_absolute_baseurl.lua Tue Mar 17 11:42:34 2015 +0100 @@ -6,5 +6,7 @@ --]]-- function request.force_absolute_baseurl() - request._force_absolute_baseurl = true + request.configure(function() + request._force_absolute_baseurl = true + end end diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/handler.lua --- a/framework/env/request/handler.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/request/handler.lua Tue Mar 17 11:42:34 2015 +0100 @@ -21,10 +21,9 @@ function request.handler(http_request) _G.app = {} -- may be overwritten or modified by request initializers do - local first = not request._in_progress request._in_progress = true -- NOTE: must be set to true before initializer functions are called for i, func in ipairs(request._initializers) do - func(first) + func() end end diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/set_404_route.lua --- a/framework/env/request/set_404_route.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/request/set_404_route.lua Tue Mar 17 11:42:34 2015 +0100 @@ -9,5 +9,7 @@ --]]-- function request.set_404_route(tbl) - request._404_route = tbl + request.configure(function() + request._404_route = tbl -- TODO: clone? + end) end diff -r 343f9af7f61f -r c3d539e33710 framework/env/request/set_perm_param.lua --- a/framework/env/request/set_perm_param.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/request/set_perm_param.lua Tue Mar 17 11:42:34 2015 +0100 @@ -9,5 +9,7 @@ --]]-- function request.set_perm_param(name, value) - request._perm_params[name] = value + request.configure(function() + request._perm_params[name] = value + end) end diff -r 343f9af7f61f -r c3d539e33710 framework/env/slot/__init.lua --- a/framework/env/slot/__init.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/slot/__init.lua Tue Mar 17 11:42:34 2015 +0100 @@ -1,8 +1,9 @@ -request.add_variable(slot, "_active_slot", "default") -request.add_variable(slot, "_current_layout", "default") -request.add_variable(slot, "_content_type", nil) +request.for_each(function() -request.add_initializer(function() + slot._active_slot = "default" + + slot._current_layout = "default" + slot._content_type = nil slot._data = nil slot.reset_all() diff -r 343f9af7f61f -r c3d539e33710 framework/env/slot/set_layout.lua --- a/framework/env/slot/set_layout.lua Mon Mar 16 23:21:18 2015 +0100 +++ b/framework/env/slot/set_layout.lua Tue Mar 17 11:42:34 2015 +0100 @@ -9,6 +9,8 @@ --]]-- function slot.set_layout(layout_ident, content_type) - slot._current_layout = layout_ident - slot._content_type = content_type + request.configure(function() + slot._current_layout = layout_ident + slot._content_type = content_type + end) end