aboutsummaryrefslogtreecommitdiff
path: root/src/url.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/url.lua')
-rw-r--r--src/url.lua15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/url.lua b/src/url.lua
index efe7254..08081f0 100644
--- a/src/url.lua
+++ b/src/url.lua
@@ -8,7 +8,10 @@
8----------------------------------------------------------------------------- 8-----------------------------------------------------------------------------
9-- Declare module 9-- Declare module
10----------------------------------------------------------------------------- 10-----------------------------------------------------------------------------
11module("socket.url") 11local string = require("string")
12local base = require("base")
13local table = require("table")
14local url = module("socket.url")
12 15
13----------------------------------------------------------------------------- 16-----------------------------------------------------------------------------
14-- Encodes a string into its escaped hexadecimal representation 17-- Encodes a string into its escaped hexadecimal representation
@@ -18,7 +21,7 @@ module("socket.url")
18-- escaped representation of string binary 21-- escaped representation of string binary
19----------------------------------------------------------------------------- 22-----------------------------------------------------------------------------
20function escape(s) 23function escape(s)
21 return string.gsub(s, "(.)", function(c) 24 return string.gsub(s, "([^A-Za-z0-9_])", function(c)
22 return string.format("%%%02x", string.byte(c)) 25 return string.format("%%%02x", string.byte(c))
23 end) 26 end)
24end 27end
@@ -33,7 +36,7 @@ end
33----------------------------------------------------------------------------- 36-----------------------------------------------------------------------------
34local function make_set(t) 37local function make_set(t)
35 local s = {} 38 local s = {}
36 for i = 1, table.getn(t) do 39 for i,v in base.ipairs(t) do
37 s[t[i]] = 1 40 s[t[i]] = 1
38 end 41 end
39 return s 42 return s
@@ -62,7 +65,7 @@ end
62----------------------------------------------------------------------------- 65-----------------------------------------------------------------------------
63function unescape(s) 66function unescape(s)
64 return string.gsub(s, "%%(%x%x)", function(hex) 67 return string.gsub(s, "%%(%x%x)", function(hex)
65 return string.char(tonumber(hex, 16)) 68 return string.char(base.tonumber(hex, 16))
66 end) 69 end)
67end 70end
68 71
@@ -191,7 +194,7 @@ end
191-- corresponding absolute url 194-- corresponding absolute url
192----------------------------------------------------------------------------- 195-----------------------------------------------------------------------------
193function absolute(base_url, relative_url) 196function absolute(base_url, relative_url)
194 local base = type(base_url) == "table" and base_url or parse(base_url) 197 local base = base.type(base_url) == "table" and base_url or parse(base_url)
195 local relative = parse(relative_url) 198 local relative = parse(relative_url)
196 if not base then return relative_url 199 if not base then return relative_url
197 elseif not relative then return base_url 200 elseif not relative then return base_url
@@ -269,3 +272,5 @@ function build_path(parsed, unsafe)
269 if parsed.is_absolute then path = "/" .. path end 272 if parsed.is_absolute then path = "/" .. path end
270 return path 273 return path
271end 274end
275
276base.setmetatable(url, nil)