Minor implementation changes (feature renaming, ... )

This commit is contained in:
Jocelyn Fiat
2012-09-11 20:51:36 +02:00
parent ace897ea2b
commit 0503e63209
5 changed files with 59 additions and 11 deletions

View File

@@ -30,11 +30,12 @@ feature -- Access
feature -- Status
routed_handler (req: WSF_REQUEST; res: WSF_RESPONSE; a_router: WSF_ROUTER): detachable WSF_HANDLER
-- Return the handler if Current matches the request `req'.
local
p: READABLE_STRING_8
s: like based_uri
do
p := source_uri (req)
p := path_from_request (req)
s := based_uri (uri, a_router)
if p.starts_with (s) then
Result := handler
@@ -47,6 +48,7 @@ feature -- Status
feature {NONE} -- Implementation
based_uri (a_uri: like uri; a_router: WSF_ROUTER): like uri
-- `uri' prefixed by the `WSF_ROUTER.base_url' if any
local
s: STRING_8
do
@@ -59,4 +61,14 @@ feature {NONE} -- Implementation
end
end
note
copyright: "2011-2012, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
source: "[
Eiffel Software
5949 Hollister Ave., Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Website http://www.eiffel.com
Customer support http://support.eiffel.com
]"
end

View File

@@ -43,7 +43,7 @@ feature -- Status
p: READABLE_STRING_8
l_uri: like uri
do
p := source_uri (req)
p := path_from_request (req)
l_uri := based_uri (uri, a_router)
if l_uri.ends_with ("/") then
if not p.ends_with ("/") then

View File

@@ -48,14 +48,18 @@ feature -- Status
p: READABLE_STRING_32
ctx: detachable WSF_URI_TEMPLATE_HANDLER_CONTEXT
do
p := source_uri (req)
p := path_from_request (req)
tpl := based_uri_template (template, a_router)
if attached tpl.match (p) as tpl_res then
Result := handler
create ctx.make (req, tpl, tpl_res, source_uri (req))
create ctx.make (req, tpl, tpl_res, path_from_request (req))
a_router.execute_before (Current)
--| Applied the context to the request
--| in practice, this will fill the {WSF_REQUEST}.path_parameters
ctx.apply (req)
handler.execute (ctx, req, res)
--| Revert {WSF_REQUEST}.path_parameters_source to former value
--| In case the request object passed by other handler that alters its values.
ctx.revert (req)
a_router.execute_after (Current)
end
@@ -78,4 +82,14 @@ feature {NONE} -- Implementation
end
note
copyright: "2011-2012, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
source: "[
Eiffel Software
5949 Hollister Ave., Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Website http://www.eiffel.com
Customer support http://support.eiffel.com
]"
end

View File

@@ -17,23 +17,25 @@ create
feature {NONE} -- Initialization
make (n: INTEGER)
-- Create the router with a capacity of `n' mappings
do
create mappings.make (n)
initialize
initialize (n)
end
make_with_base_url (n: INTEGER; a_base_url: like base_url)
-- Make router allocated for at least `n' maps,
-- and use `a_base_url' as base_url
-- and use `a_base_url' as `base_url'
--| This avoids prefixing all the resource string.
do
make (n)
set_base_url (a_base_url)
end
initialize
initialize (n: INTEGER)
-- Initialize router
do
create mappings.make (10)
create mappings.make (n)
create pre_execution_actions
end
@@ -59,9 +61,11 @@ feature -- Access
is_dispatched: BOOLEAN
-- `dispatch' set `is_dispatched' to True
-- if handler was found and executed
-- if mapping was found, and associated handler executed
dispatch (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Dispatch request `req' among the `mappings'
-- Set `is_dispatched' if the request were dispatched
do
if attached dispatch_and_return_handler (req, res) then
check is_dispatched: is_dispatched end
@@ -69,6 +73,8 @@ feature -- Access
end
dispatch_and_return_handler (req: WSF_REQUEST; res: WSF_RESPONSE): detachable WSF_HANDLER
-- Dispatch request `req' among the `mappings'
-- And return the associated handler if mapping found and handler executed.
local
l_req_method: READABLE_STRING_8
m: WSF_ROUTER_MAPPING
@@ -96,11 +102,14 @@ feature -- Access
feature -- Hook
execute_before (a_mapping: WSF_ROUTER_MAPPING)
-- Execute before the handler associated with the matching mapping is executed
do
pre_execution_actions.call ([a_mapping])
end
execute_after (a_mapping: WSF_ROUTER_MAPPING)
-- Execute after the handler associated with the matching mapping is executed
--| Could be redefined to add specific hook.
do
end
@@ -111,6 +120,7 @@ feature -- Hook
feature -- Base url
count: INTEGER
-- Number of mappings registered
do
Result := mappings.count
end
@@ -260,4 +270,14 @@ feature {NONE} -- Access: Implementation
end
end
note
copyright: "2011-2012, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
source: "[
Eiffel Software
5949 Hollister Ave., Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Website http://www.eiffel.com
Customer support http://support.eiffel.com
]"
end

View File

@@ -10,19 +10,21 @@ deferred class
feature -- Access
handler: WSF_HANDLER
-- Handler associated with Current mapping.
deferred
end
feature -- Status
routed_handler (req: WSF_REQUEST; res: WSF_RESPONSE; a_router: WSF_ROUTER): detachable WSF_HANDLER
-- Return the handler if Current matches the request `req'.
deferred
end
feature -- Helper
source_uri (req: WSF_REQUEST): READABLE_STRING_32
-- URI to use to find handler.
path_from_request (req: WSF_REQUEST): READABLE_STRING_32
-- Path used by Current to check that Current mapping matches request `req'.
do
Result := req.path_info
end