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