Update restbuck client, create and read an order.

Update JSON converter, the id is not important, applied the DRY principle.
Update the ORDER_HANDLER to use the meta_string_variable instead of meta_variable from req.
Fix, the key in meta_variable_table, use c.key instead of c.item
This commit is contained in:
jvelilla
2011-12-10 18:05:41 -03:00
parent 0d67533c83
commit bf056154d8
5 changed files with 132 additions and 34 deletions

View File

@@ -38,7 +38,7 @@ feature -- Conversion
s_location ?= json.object (j.item (location_key), Void)
s_status ?= json.object (j.item (status_key), Void)
create o.make (s_id, s_location, s_status)
create o.make ("", s_location, s_status)
if attached {JSON_ARRAY} j.item (items_key) as l_val then
l_array := l_val.array_representation
@@ -87,7 +87,7 @@ feature -- Conversion
jv: JSON_OBJECT
do
create Result.make
Result.put (json.value (o.id), id_key)
-- Result.put (json.value (o.id), id_key)
Result.put (json.value (o.location), location_key)
Result.put (json.value (o.status), status_key)
from

View File

@@ -66,9 +66,9 @@ feature -- HTTP Methods
local
etag_util : ETAG_UTILS
do
if attached req.meta_variable ("HTTP_IF_NONE_MATCH") as if_none_match then
if attached req.meta_string_variable ("HTTP_IF_NONE_MATCH") as if_none_match then
create etag_util
if if_none_match.as_string.same_string (etag_util.md5_digest (l_order.out).as_string_32) then
if if_none_match.same_string (etag_util.md5_digest (l_order.out).as_string_32) then
Result := True
end
end
@@ -108,26 +108,31 @@ feature -- HTTP Methods
-- If the request is a Conditional PUT, and it does not mat we response
-- 415, precondition failed.
local
l_post: STRING
l_put: STRING
l_order : detachable ORDER
id : STRING
do
req.input.read_string (req.content_length_value.as_integer_32)
l_post := req.input.last_string
l_order := extract_order_request(l_post)
if l_order /= Void and then db_access.orders.has_key (l_order.id) then
if is_valid_to_update(l_order) then
if is_conditional_put (req, l_order) then
update_order( l_order)
compute_response_put (ctx, req, res, l_order)
if attached req.orig_path_info as orig_path then
id := get_order_id_from_path (orig_path)
req.input.read_string (req.content_length_value.as_integer_32)
l_put := req.input.last_string
l_order := extract_order_request(l_put)
if l_order /= Void and then db_access.orders.has_key (id) then
l_order.set_id (id)
if is_valid_to_update(l_order) then
if is_conditional_put (req, l_order) then
update_order( l_order)
compute_response_put (ctx, req, res, l_order)
else
handle_precondition_fail_response ("", ctx, req, res)
end
else
handle_precondition_fail_response ("", ctx, req, res)
--| FIXME: Here we need to define the Allow methods
handle_resource_conflict_response (l_put +"%N There is conflict while trying to update the order, the order could not be update in the current state", ctx, req, res)
end
else
--| FIXME: Here we need to define the Allow methods
handle_resource_conflict_response (l_post +"%N There is conflict while trying to update the order, the order could not be update in the current state", ctx, req, res)
handle_bad_request_response (l_put +"%N is not a valid ORDER, maybe the order does not exist in the system", ctx, req, res)
end
else
handle_bad_request_response (l_post +"%N is not a valid ORDER, maybe the order does not exist in the system", ctx, req, res)
end
end
@@ -138,9 +143,9 @@ feature -- HTTP Methods
etag_util : ETAG_UTILS
do
if attached retrieve_order (order.id) as l_order then
if attached req.meta_variable ("HTTP_IF_MATCH") as if_match then
if attached req.meta_string_variable ("HTTP_IF_MATCH") as if_match then
create etag_util
if if_match.as_string.same_string (etag_util.md5_digest (l_order.out).as_string_32) then
if if_match.same_string (etag_util.md5_digest (l_order.out).as_string_32) then
Result := True
end
else