webmcp

changeset 262:c3d539e33710

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
author jbe
date Tue Mar 17 11:42:34 2015 +0100 (2015-03-17)
parents 343f9af7f61f
children b0f5e7955ffd
files framework/env/charset/__init.lua framework/env/charset/set.lua framework/env/locale/__init.lua framework/env/locale/do_with.lua framework/env/locale/set.lua framework/env/param/__init.lua framework/env/request/__init.lua framework/env/request/add_header.lua framework/env/request/add_initializer.lua framework/env/request/add_variable.lua framework/env/request/configure.lua framework/env/request/for_each.lua framework/env/request/force_absolute_baseurl.lua framework/env/request/handler.lua framework/env/request/set_404_route.lua framework/env/request/set_perm_param.lua framework/env/slot/__init.lua framework/env/slot/set_layout.lua
line diff
     1.1 --- a/framework/env/charset/__init.lua	Mon Mar 16 23:21:18 2015 +0100
     1.2 +++ b/framework/env/charset/__init.lua	Tue Mar 17 11:42:34 2015 +0100
     1.3 @@ -1,1 +1,3 @@
     1.4 -request.add_variable(charset, "_current", "UTF-8")
     1.5 +request.for_each(function()
     1.6 +  charset._current = "UTF-8"
     1.7 +end)
     2.1 --- a/framework/env/charset/set.lua	Mon Mar 16 23:21:18 2015 +0100
     2.2 +++ b/framework/env/charset/set.lua	Tue Mar 17 11:42:34 2015 +0100
     2.3 @@ -8,5 +8,7 @@
     2.4  --]]--
     2.5  
     2.6  function charset.set(charset_ident)
     2.7 -  charset._current = charset_ident
     2.8 +  request.configure(function()
     2.9 +    charset._current = charset_ident
    2.10 +  end)
    2.11  end
     3.1 --- a/framework/env/locale/__init.lua	Mon Mar 16 23:21:18 2015 +0100
     3.2 +++ b/framework/env/locale/__init.lua	Tue Mar 17 11:42:34 2015 +0100
     3.3 @@ -1,4 +1,6 @@
     3.4 -request.add_variable(locale, "_current_data", {})
     3.5  locale._translation_tables = {}
     3.6  locale._empty_translation_table = {}
     3.7  
     3.8 +request.for_each(function()
     3.9 +  locale._current_data = {}
    3.10 +end)
     4.1 --- a/framework/env/locale/do_with.lua	Mon Mar 16 23:21:18 2015 +0100
     4.2 +++ b/framework/env/locale/do_with.lua	Tue Mar 17 11:42:34 2015 +0100
     4.3 @@ -11,12 +11,16 @@
     4.4  --]]--
     4.5  
     4.6  function locale.do_with(locale_options, block)
     4.7 -  local old_data = {}
     4.8 -  for key, value in pairs(locale._current_data) do
     4.9 -    old_data[key] = value
    4.10 +  local old_data = table.new(locale._current_data)
    4.11 +  if locale_options.reset then
    4.12 +    locale._current_data = {}
    4.13 +  end
    4.14 +  for key, value in pairs(locale_options) do
    4.15 +    if key ~= "reset" then
    4.16 +      locale._current_data[key] = value
    4.17 +    end
    4.18    end
    4.19    locale.set(locale_options)
    4.20    block()
    4.21 -  old_data.reset = true
    4.22 -  locale.set(old_data)
    4.23 +  locale._current_data = old_data
    4.24  end
     5.1 --- a/framework/env/locale/set.lua	Mon Mar 16 23:21:18 2015 +0100
     5.2 +++ b/framework/env/locale/set.lua	Tue Mar 17 11:42:34 2015 +0100
     5.3 @@ -8,12 +8,14 @@
     5.4  --]]--
     5.5  
     5.6  function locale.set(locale_options)
     5.7 -  if locale_options.reset then
     5.8 -    locale._current_data = {}
     5.9 -  end
    5.10 -  for key, value in pairs(locale_options) do
    5.11 -    if key ~= "reset" then
    5.12 -      locale._current_data[key] = value
    5.13 +  request.configure(function()
    5.14 +    if locale_options.reset then
    5.15 +      locale._current_data = {}
    5.16      end
    5.17 -  end
    5.18 +    for key, value in pairs(locale_options) do
    5.19 +      if key ~= "reset" then
    5.20 +        locale._current_data[key] = value
    5.21 +      end
    5.22 +    end
    5.23 +  end)
    5.24  end
     6.1 --- a/framework/env/param/__init.lua	Mon Mar 16 23:21:18 2015 +0100
     6.2 +++ b/framework/env/param/__init.lua	Tue Mar 17 11:42:34 2015 +0100
     6.3 @@ -1,4 +1,4 @@
     6.4 -request.add_initializer(function()
     6.5 +request.for_each(function()
     6.6    param._exchanged = false  -- important to be false, not nil
     6.7    param._saved = {}  -- stack
     6.8  end)
     7.1 --- a/framework/env/request/__init.lua	Mon Mar 16 23:21:18 2015 +0100
     7.2 +++ b/framework/env/request/__init.lua	Tue Mar 17 11:42:34 2015 +0100
     7.3 @@ -5,18 +5,20 @@
     7.4  request._absolute_baseurl = nil
     7.5  request._http_options = {}
     7.6  
     7.7 --- initialize once and re-initialize per request
     7.8 -request.add_variable(request, "_response_headers", {})
     7.9 -request.add_variable(request, "_force_absolute_baseurl", false)
    7.10 -request.add_variable(request, "_perm_params", {})
    7.11 -request.add_variable(request, "_404_route", nil)
    7.12 +request.for_each(function()
    7.13  
    7.14 --- initialize per request
    7.15 -request.add_initializer(function()
    7.16 +  -- configurable
    7.17 +  request._response_headers = {}
    7.18 +  request._force_absolute_baseurl = false
    7.19 +  request._perm_params = {}
    7.20 +  request._404_route = nil
    7.21 +
    7.22 +  -- non-configurable
    7.23    request._http_request = nil
    7.24    request._status = nil
    7.25    request._forward = nil
    7.26    request._forward_processed = false
    7.27    request._redirect = nil
    7.28    request._csrf_secret = nil
    7.29 +
    7.30  end)
     8.1 --- a/framework/env/request/add_header.lua	Mon Mar 16 23:21:18 2015 +0100
     8.2 +++ b/framework/env/request/add_header.lua	Tue Mar 17 11:42:34 2015 +0100
     8.3 @@ -2,5 +2,8 @@
     8.4    if value == nil then
     8.5      error("Function request.add_header(...) requires two arguments")
     8.6    end
     8.7 -  request._response_headers[#request._response_headers+1] = {key, value}
     8.8 +  request.configure(function()
     8.9 +    local headers = request._response_headers
    8.10 +    headers[#headers+1] = {key, value}
    8.11 +  end)
    8.12  end
     9.1 --- a/framework/env/request/add_initializer.lua	Mon Mar 16 23:21:18 2015 +0100
     9.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.3 @@ -1,16 +0,0 @@
     9.4 ---[[--
     9.5 -request.add_initializer(
     9.6 -  func                    -- function to be called on every request
     9.7 -)
     9.8 -
     9.9 -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.
    9.10 -
    9.11 ---]]--
    9.12 -
    9.13 -function request.add_initializer(func)
    9.14 -  local initializers = request._initializers
    9.15 -  initializers[#initializers+1] = func
    9.16 -  if request._in_progress then
    9.17 -    func(true)
    9.18 -  end
    9.19 -end
    10.1 --- a/framework/env/request/add_variable.lua	Mon Mar 16 23:21:18 2015 +0100
    10.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.3 @@ -1,27 +0,0 @@
    10.4 ---[[--
    10.5 -request.add_variable(
    10.6 -  tbl,                 -- table where the variable is stored
    10.7 -  key,                 -- name of variable (key within the table)
    10.8 -  value                -- optional value for initialization
    10.9 -)
   10.10 -
   10.11 -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.
   10.12 -
   10.13 ---]]--
   10.14 -
   10.15 -function request.add_variable(tbl, key, value)
   10.16 -  local initval, istable
   10.17 -  tbl[key] = value
   10.18 -  request.add_initializer(function(first)
   10.19 -    if first then
   10.20 -      initval = tbl[key]
   10.21 -      istable = type(initval) == "table"
   10.22 -    else
   10.23 -      if istable then
   10.24 -        tbl[key] = table.new(initval)
   10.25 -      else
   10.26 -        tbl[key] = initval
   10.27 -      end
   10.28 -    end
   10.29 -  end)
   10.30 -end
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/framework/env/request/configure.lua	Tue Mar 17 11:42:34 2015 +0100
    11.3 @@ -0,0 +1,16 @@
    11.4 +--[[--
    11.5 +request.configure(
    11.6 +  func              -- function which is performing the configuration
    11.7 +)
    11.8 +
    11.9 +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.
   11.10 +
   11.11 +--]]--
   11.12 +
   11.13 +function request.configure(func)
   11.14 +  if not request._in_progress then
   11.15 +    local initializers = request._initializers
   11.16 +    initializers[#initializers+1] = func
   11.17 +  end
   11.18 +  func()
   11.19 +end
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/framework/env/request/for_each.lua	Tue Mar 17 11:42:34 2015 +0100
    12.3 @@ -0,0 +1,14 @@
    12.4 +--[[--
    12.5 +request.for_each(
    12.6 +  func             -- function to be called on every request
    12.7 +)
    12.8 +
    12.9 +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.
   12.10 +
   12.11 +--]]--
   12.12 +
   12.13 +function request.for_each(func)
   12.14 +  local initializers = request._initializers
   12.15 +  initializers[#initializers+1] = func
   12.16 +  func()
   12.17 +end
    13.1 --- a/framework/env/request/force_absolute_baseurl.lua	Mon Mar 16 23:21:18 2015 +0100
    13.2 +++ b/framework/env/request/force_absolute_baseurl.lua	Tue Mar 17 11:42:34 2015 +0100
    13.3 @@ -6,5 +6,7 @@
    13.4  --]]--
    13.5  
    13.6  function request.force_absolute_baseurl()
    13.7 -  request._force_absolute_baseurl = true
    13.8 +  request.configure(function()
    13.9 +    request._force_absolute_baseurl = true
   13.10 +  end
   13.11  end
    14.1 --- a/framework/env/request/handler.lua	Mon Mar 16 23:21:18 2015 +0100
    14.2 +++ b/framework/env/request/handler.lua	Tue Mar 17 11:42:34 2015 +0100
    14.3 @@ -21,10 +21,9 @@
    14.4  function request.handler(http_request)
    14.5    _G.app = {}  -- may be overwritten or modified by request initializers
    14.6    do
    14.7 -    local first = not request._in_progress
    14.8      request._in_progress = true  -- NOTE: must be set to true before initializer functions are called
    14.9      for i, func in ipairs(request._initializers) do
   14.10 -      func(first)
   14.11 +      func()
   14.12      end
   14.13    end
   14.14  
    15.1 --- a/framework/env/request/set_404_route.lua	Mon Mar 16 23:21:18 2015 +0100
    15.2 +++ b/framework/env/request/set_404_route.lua	Tue Mar 17 11:42:34 2015 +0100
    15.3 @@ -9,5 +9,7 @@
    15.4  --]]--
    15.5  
    15.6  function request.set_404_route(tbl)
    15.7 -  request._404_route = tbl
    15.8 +  request.configure(function()
    15.9 +    request._404_route = tbl  -- TODO: clone?
   15.10 +  end)
   15.11  end
    16.1 --- a/framework/env/request/set_perm_param.lua	Mon Mar 16 23:21:18 2015 +0100
    16.2 +++ b/framework/env/request/set_perm_param.lua	Tue Mar 17 11:42:34 2015 +0100
    16.3 @@ -9,5 +9,7 @@
    16.4  --]]--
    16.5  
    16.6  function request.set_perm_param(name, value)
    16.7 -  request._perm_params[name] = value
    16.8 +  request.configure(function()
    16.9 +    request._perm_params[name] = value
   16.10 +  end)
   16.11  end
    17.1 --- a/framework/env/slot/__init.lua	Mon Mar 16 23:21:18 2015 +0100
    17.2 +++ b/framework/env/slot/__init.lua	Tue Mar 17 11:42:34 2015 +0100
    17.3 @@ -1,8 +1,9 @@
    17.4 -request.add_variable(slot, "_active_slot", "default")
    17.5 -request.add_variable(slot, "_current_layout", "default")
    17.6 -request.add_variable(slot, "_content_type", nil)
    17.7 +request.for_each(function()
    17.8  
    17.9 -request.add_initializer(function()
   17.10 +  slot._active_slot = "default"
   17.11 +
   17.12 +  slot._current_layout = "default"
   17.13 +  slot._content_type = nil
   17.14  
   17.15    slot._data = nil
   17.16    slot.reset_all()
    18.1 --- a/framework/env/slot/set_layout.lua	Mon Mar 16 23:21:18 2015 +0100
    18.2 +++ b/framework/env/slot/set_layout.lua	Tue Mar 17 11:42:34 2015 +0100
    18.3 @@ -9,6 +9,8 @@
    18.4  --]]--
    18.5  
    18.6  function slot.set_layout(layout_ident, content_type)
    18.7 -  slot._current_layout = layout_ident
    18.8 -  slot._content_type = content_type
    18.9 +  request.configure(function()
   18.10 +    slot._current_layout = layout_ident
   18.11 +    slot._content_type = content_type
   18.12 +  end)
   18.13  end

Impressum / About Us