note
	description: "Executes an HTTP request"
	date: "$Date: 2015-10-08 07:51:29 -0300 (ju., 08 oct. 2015) $"
	revision: "$Revision: 97966 $"

class
	REQUEST_EXECUTOR

inherit

	HTTP_CLIENT_HELPER

	HTTP_CONSTANTS

create
	make

feature {NONE} -- Initialization

	make (a_url: READABLE_STRING_8; a_method: READABLE_STRING_8)
		do
			set_base_url (a_url)
			verb := a_method
		ensure
			base_url_set: base_url.same_string (a_url)
			method_set: verb.same_string (a_method)
		end

	set_base_url (a_url: READABLE_STRING_8)
			-- Set base_url with `a_url'
		local
			s: STRING
		do
			create s.make_from_string (a_url)
			s.left_adjust
			s.right_adjust
			base_url := s
		ensure
			base_url_set: a_url.has_substring (base_url)
		end

feature -- Access

	verb: READABLE_STRING_8
			-- HTTP METHOD (Get, Post, ...)

	body: detachable READABLE_STRING_8
			-- body content

feature -- Element Change

	set_body (a_body: like body)
			-- Set body with `a_body'.
		do
			body := a_body
		ensure
			body_set: body = a_body
		end

feature -- Execute

	execute: detachable HTTP_CLIENT_RESPONSE
			-- Http executor
		do
			if verb.same_string (method_connect) then
				Result := Void -- not supported for now
			elseif verb.same_string (method_delete) then
				Result := execute_delete ("")
			elseif verb.same_string (method_get) then
				Result := execute_get ("")
			elseif verb.same_string (method_head) then
				Result := Void
			elseif verb.same_string (method_options) then
				Result := Void
			elseif verb.same_string (method_patch) then
				Result := execute_patch ("", body)
			elseif verb.same_string (method_post) then
				Result := execute_post ("", body)
			elseif verb.same_string (method_put) then
				Result := execute_put ("", body)
			elseif verb.same_string (method_trace) then
				Result := Void
			end
		end

note
	copyright: "2011-2015 Javier Velilla, Jocelyn Fiat, 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
