Skip to content

Commit

Permalink
more refactor. file/payload upload is unstable! testing in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
Marin Usalj committed Jun 19, 2012
1 parent 03dd68a commit afd1a8b
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 29 deletions.
69 changes: 40 additions & 29 deletions motion/http.rb
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,6 @@ def connection(connection, didSendBodyData:sending, totalBytesWritten:written, t
def connectionDidFinishLoading(connection)
UIApplication.sharedApplication.networkActivityIndicatorVisible = false
@request.done_loading!
# copy the data in a local var that we will attach to the response object
response_body = NSData.dataWithData(@received_data) if @received_data
@response.update(status_code: status_code, body: response_body, headers: response_headers, url: @url)

Expand Down Expand Up @@ -218,39 +217,51 @@ def create_request
request
end

def create_request_body
return nil if @method == "GET"
return nil unless (@payload || @files)
body = NSMutableData.data

if @files.nil? && @payload
def append_only_payload(body)
if @payload.is_a?(NSData)
body.appendData(@payload)
else
body.appendData(@payload.to_s.dataUsingEncoding(NSUTF8StringEncoding))
end
end

if @files
if @payload
@payload.each do |key, value|
postData = NSMutableData.data
s = "\r\n--#{@boundary}\r\n"
s += "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
s += value.to_s
postData.appendData(s.dataUsingEncoding(NSUTF8StringEncoding))
postData.appendData("\r\n--#{@boundary}\r\n".dataUsingEncoding(NSUTF8StringEncoding)) unless key == @payload.keys.last
body.appendData(postData)
end
end
def append_files_and_payload(body)
@payload.each do |key, value|
postData = NSMutableData.data
s = "\r\n--#{@boundary}\r\n"
s += "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
s += value.to_s
postData.appendData(s.dataUsingEncoding(NSUTF8StringEncoding))
postData.appendData("\r\n--#{@boundary}\r\n".dataUsingEncoding(NSUTF8StringEncoding)) unless key == @payload.keys.last
body.appendData(postData)
end
append_files(body)
end

@files.each do |key, value|
postData = NSMutableData.data
s = "\r\n--#{@boundary}\r\n"
s += "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{key}\"\r\n"
s += "Content-Type: application/octet-stream\r\n\r\n"
postData.appendData(s.dataUsingEncoding(NSUTF8StringEncoding))
postData.appendData(NSData.dataWithData(value))
postData.appendData("\r\n--#{@boundary}\r\n".dataUsingEncoding(NSUTF8StringEncoding)) unless key == @files.keys.last
body.appendData(postData)
end
def append_files(body)
@files.each do |key, value|
postData = NSMutableData.data
s = "\r\n--#{@boundary}\r\n"
s += "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{key}\"\r\n"
s += "Content-Type: application/octet-stream\r\n\r\n"
postData.appendData(s.dataUsingEncoding(NSUTF8StringEncoding))
postData.appendData(NSData.dataWithData(value))
postData.appendData("\r\n--#{@boundary}\r\n".dataUsingEncoding(NSUTF8StringEncoding)) unless key == @files.keys.last
body.appendData(postData)
end
end

def create_request_body
return nil if @method == "GET"
return nil unless (@payload || @files)
body = NSMutableData.data
#THIS IS NOT 100% CLEAR YET. ON A TOP PRIORITY TO TEST / FIX
if @files.nil?
append_only_payload(body)
elsif @payload.nil?
append_files(body)
else
append_files_and_payload(body)
end
body.appendData("\r\n--#{@boundary}--\r\n".dataUsingEncoding(NSUTF8StringEncoding)) if @files
body
Expand Down
4 changes: 4 additions & 0 deletions spec/motion/http_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,10 @@ def test_http_method(method)
get.instance_variable_get(:@url).description.should.equal "#{@localhost_url}?name=marin"
end

# it "sets the payload without conversion to-from NSString if the payload was NSData" do

# end

end

it "should set default timeout to 30s or the one from hash" do
Expand Down

0 comments on commit afd1a8b

Please sign in to comment.