webmcp
annotate framework/env/param/_get_parser.lua @ 438:ea8419658535
Another change to make <db_object>:try_save() work properly with "document_column"
(use "_col" proxy also for accessing self._col[primary_key.json_doc])
(use "_col" proxy also for accessing self._col[primary_key.json_doc])
author | jbe |
---|---|
date | Wed Jan 20 21:06:07 2016 +0100 (2016-01-20) |
parents | 9fdfb27f8e67 |
children |
rev | line source |
---|---|
jbe/bsw@0 | 1 function param._get_parser(format_info, param_type) |
jbe/bsw@0 | 2 if format_info == nil or format_info == "" then |
jbe/bsw@0 | 3 return function(str) |
jbe/bsw@0 | 4 return param_type:load(str) |
jbe/bsw@0 | 5 end |
jbe/bsw@0 | 6 else |
jbe/bsw@0 | 7 local format_options = {} |
jbe/bsw@0 | 8 local format_type, rest = string.match( |
jbe/bsw@0 | 9 format_info, |
jbe/bsw@0 | 10 "^([A-Za-z][A-Za-z0-9_]*)(.*)$" |
jbe/bsw@0 | 11 ) |
jbe/bsw@0 | 12 if format_type then |
jbe/bsw@0 | 13 rest = string.gsub(rest, "\\\\", "\\e") |
jbe/bsw@0 | 14 rest = string.gsub(rest, "\\'", "\\q") |
jbe/bsw@0 | 15 if |
jbe/bsw@0 | 16 string.find(rest, "\\$") or |
jbe/bsw@0 | 17 string.find(rest, "\\[^eq]") |
jbe/bsw@0 | 18 then |
jbe/bsw@0 | 19 format_type = nil |
jbe/bsw@0 | 20 else |
jbe/bsw@0 | 21 while rest ~= "" do |
jbe/bsw@0 | 22 local key, value, new_rest |
jbe/bsw@0 | 23 key, value, new_rest = string.match( |
jbe/bsw@0 | 24 rest, |
jbe/bsw@0 | 25 "^-([A-Za-z][A-Za-z0-9_]*)-'([^']*)'(.*)$" |
jbe/bsw@0 | 26 ) |
jbe/bsw@0 | 27 if value then |
jbe/bsw@0 | 28 value = string.gsub(value, "\\q", "'") |
jbe/bsw@0 | 29 value = string.gsub(value, "\\e", "\\") |
jbe/bsw@0 | 30 format_options[key] = value |
jbe/bsw@0 | 31 else |
jbe/bsw@0 | 32 key, value, new_rest = string.match( |
jbe/bsw@0 | 33 rest, |
jbe/bsw@0 | 34 "^-([A-Za-z][A-Za-z0-9_]*)-([^-]*)(.*)$" |
jbe/bsw@0 | 35 ) |
jbe/bsw@0 | 36 if value then |
jbe/bsw@0 | 37 if string.find(value, "^[0-9.Ee+-]+$") then |
jbe/bsw@0 | 38 local num = tonumber(value) |
jbe/bsw@0 | 39 if not num then |
jbe/bsw@0 | 40 format_type = nil |
jbe/bsw@0 | 41 break |
jbe/bsw@0 | 42 end |
jbe/bsw@0 | 43 format_options[key] = num |
jbe/bsw@0 | 44 elseif value == "t" then |
jbe/bsw@0 | 45 format_options[key] = true |
jbe/bsw@0 | 46 elseif value == "f" then |
jbe/bsw@0 | 47 format_options[key] = false |
jbe/bsw@0 | 48 else |
jbe/bsw@0 | 49 format_type = nil |
jbe/bsw@0 | 50 break |
jbe/bsw@0 | 51 end |
jbe/bsw@0 | 52 else |
jbe/bsw@0 | 53 format_type = nil |
jbe/bsw@0 | 54 break |
jbe/bsw@0 | 55 end |
jbe/bsw@0 | 56 end |
jbe/bsw@0 | 57 rest = new_rest |
jbe/bsw@0 | 58 end |
jbe/bsw@0 | 59 end |
jbe/bsw@0 | 60 end |
jbe/bsw@0 | 61 if not format_type then |
jbe/bsw@0 | 62 error("Illegal format string in GET/POST parameters found.") |
jbe/bsw@0 | 63 end |
jbe/bsw@0 | 64 local parse_func = parse[format_type] |
jbe/bsw@0 | 65 if not parse_func then |
jbe/bsw@0 | 66 error("Unknown format identifier in GET/POST parameters encountered.") |
jbe/bsw@0 | 67 end |
jbe/bsw@0 | 68 return function(str) |
jbe/bsw@0 | 69 return parse_func(str, param_type, format_options) |
jbe/bsw@0 | 70 end |
jbe/bsw@0 | 71 end |
jbe/bsw@0 | 72 end |