lib/hurley/client.rb in hurley-0.1 vs lib/hurley/client.rb in hurley-0.2
- old
+ new
@@ -174,44 +174,57 @@
url.to_s,
]
end
def prepare!
- if value = !header[:authorization] && url.basic_auth
- header[:authorization] = value
- end
+ prepare_basic_auth!
if body
- ctype = nil
- case body
- when Query
- ctype, io = body.to_form
- self.body = io
- when Hash
- ctype, io = options.build_form(body)
- self.body = io
- end
- header[:content_type] ||= ctype || DEFAULT_TYPE
+ prepare_body!
else
return unless REQUIRED_BODY_VERBS.include?(verb)
end
- if !header.key?(:content_length) && header[:transfer_encoding] != CHUNKED
- if body
- if sizer = SIZE_METHODS.detect { |method| body.respond_to?(method) }
- header[:content_length] = body.send(sizer).to_i
- else
- header[:transfer_encoding] = CHUNKED
- end
+ prepare_content_length!
+ end
+
+ private
+
+ def prepare_basic_auth!
+ value = !header[:authorization] && url.basic_auth
+ header[:authorization] = value if value
+ end
+
+ def prepare_body!
+ ctype = nil
+ case body
+ when Query
+ ctype, io = body.to_form
+ self.body = io
+ when Hash
+ ctype, io = options.build_form(body)
+ self.body = io
+ end
+ header[:content_type] ||= ctype || DEFAULT_TYPE
+ end
+
+ def prepare_content_length!
+ if header.key?(:content_length) || header[:transfer_encoding] == CHUNKED
+ return
+ end
+
+ if body
+ if sizer = SIZE_METHODS.detect { |method| body.respond_to?(method) }
+ header[:content_length] = body.send(sizer).to_i
else
- header[:content_length] = 0
+ header[:transfer_encoding] = CHUNKED
end
+ else
+ header[:content_length] = 0
end
end
- private
-
def body_receiver
@body_receiver ||= [nil, BodyReceiver.new]
end
DEFAULT_TYPE = "application/octet-stream".freeze
@@ -233,10 +246,16 @@
@header = header || Header.new
@body = nil
@receiver = nil
@timing = nil
@started_at = Time.now.to_f
- yield self if block_given?
+ if block_given?
+ yield self
+ complete!
+ end
+ end
+
+ def complete!
@ended_at = Time.now.to_f
if @receiver.respond_to?(:join)
@body = @receiver.join
end
end