From b1092481c1d050e6abf8cc70a242a43d809e61f6 Mon Sep 17 00:00:00 2001 From: Oliver Azevedo Barnes Date: Thu, 12 Jan 2012 18:20:01 -0200 Subject: [PATCH 1/4] Don't create a new Faraday instance on every request --- lib/twitter/connection.rb | 3 ++- lib/twitter/request.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/twitter/connection.rb b/lib/twitter/connection.rb index ab955e70d..24ae44390 100644 --- a/lib/twitter/connection.rb +++ b/lib/twitter/connection.rb @@ -26,7 +26,7 @@ def connection(options={}) :ssl => {:verify => false}, :url => options.fetch(:endpoint, endpoint), } - Faraday.new(default_options.deep_merge(connection_options)) do |builder| + connection ||=Faraday.new(default_options.deep_merge(connection_options)) do |builder| builder.use Twitter::Request::Phoenix if options[:phoenix] builder.use Twitter::Request::MultipartWithFile builder.use Twitter::Request::TwitterOAuth, credentials if credentials? @@ -38,6 +38,7 @@ def connection(options={}) builder.use Twitter::Response::RaiseServerError builder.adapter(adapter) end + connection end end diff --git a/lib/twitter/request.rb b/lib/twitter/request.rb index bc2a1e6dd..23815903f 100644 --- a/lib/twitter/request.rb +++ b/lib/twitter/request.rb @@ -20,7 +20,7 @@ def post(path, params={}, options={}) # Perform an HTTP request def request(method, path, params, options) - response = connection(options).send(method) do |request| + response = connection(options).run_request(method, nil, nil, nil) do |request| case method.to_sym when :delete, :get request.url(path, params) From ce57c722acacba3d49978e3a4c4ab0d9c3a882b9 Mon Sep 17 00:00:00 2001 From: Oliver Azevedo Barnes Date: Thu, 12 Jan 2012 20:22:59 -0200 Subject: [PATCH 2/4] WIP issue 226: Don't create a new Faraday instance on every request --- lib/twitter/connection.rb | 8 ++++---- lib/twitter/request.rb | 2 ++ lib/twitter/request/phoenix.rb | 2 +- lib/twitter/response/parse_json.rb | 21 ++++++++++++--------- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/twitter/connection.rb b/lib/twitter/connection.rb index 24ae44390..0790780a3 100644 --- a/lib/twitter/connection.rb +++ b/lib/twitter/connection.rb @@ -26,19 +26,19 @@ def connection(options={}) :ssl => {:verify => false}, :url => options.fetch(:endpoint, endpoint), } - connection ||=Faraday.new(default_options.deep_merge(connection_options)) do |builder| - builder.use Twitter::Request::Phoenix if options[:phoenix] + @connection ||=Faraday.new(default_options.deep_merge(connection_options)) do |builder| + builder.use Twitter::Request::Phoenix builder.use Twitter::Request::MultipartWithFile builder.use Twitter::Request::TwitterOAuth, credentials if credentials? builder.use Faraday::Request::Multipart builder.use Faraday::Request::UrlEncoded builder.use Twitter::Request::Gateway, gateway if gateway builder.use Twitter::Response::RaiseClientError - builder.use Twitter::Response::ParseJson unless options[:raw] + builder.use Twitter::Response::ParseJson builder.use Twitter::Response::RaiseServerError builder.adapter(adapter) end - connection + @connection end end diff --git a/lib/twitter/request.rb b/lib/twitter/request.rb index 23815903f..7a35dd51d 100644 --- a/lib/twitter/request.rb +++ b/lib/twitter/request.rb @@ -21,6 +21,8 @@ def post(path, params={}, options={}) # Perform an HTTP request def request(method, path, params, options) response = connection(options).run_request(method, nil, nil, nil) do |request| + request.options[:phoenix] = true if options[:phoenix] + request.options[:raw] = true if options[:raw] case method.to_sym when :delete, :get request.url(path, params) diff --git a/lib/twitter/request/phoenix.rb b/lib/twitter/request/phoenix.rb index 6fe262802..e52fce171 100644 --- a/lib/twitter/request/phoenix.rb +++ b/lib/twitter/request/phoenix.rb @@ -8,7 +8,7 @@ def call(env) # Not sure what what the X-Phx (Phoenix?) header is for but it's # required to access certain undocumented resources # e.g. GET urls/resolve - env[:request_headers]['X-Phx'] = 'true' + env[:request_headers]['X-Phx'] = 'true' if env[:request][:phoenix] @app.call(env) end diff --git a/lib/twitter/response/parse_json.rb b/lib/twitter/response/parse_json.rb index e1c2d1f89..eca6ebfe2 100644 --- a/lib/twitter/response/parse_json.rb +++ b/lib/twitter/response/parse_json.rb @@ -6,16 +6,19 @@ module Response class ParseJson < Faraday::Response::Middleware def parse(body) - case body - when '' - nil - when 'true' - true - when 'false' - false - else - ::MultiJson.decode(body) + unless (respond_to?(:env)) && env[:request][:raw] + body = case body + when '' + nil + when 'true' + true + when 'false' + false + else + ::MultiJson.decode(body) + end end + body end end From a8f3879cce7187666660911ce876e2746806a7e6 Mon Sep 17 00:00:00 2001 From: Oliver Azevedo Barnes Date: Fri, 3 Feb 2012 10:32:08 -0200 Subject: [PATCH 3/4] checking for raw request on ParseJson#on_complete --- lib/twitter/response/parse_json.rb | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/twitter/response/parse_json.rb b/lib/twitter/response/parse_json.rb index eca6ebfe2..7fa3dba59 100644 --- a/lib/twitter/response/parse_json.rb +++ b/lib/twitter/response/parse_json.rb @@ -6,21 +6,23 @@ module Response class ParseJson < Faraday::Response::Middleware def parse(body) - unless (respond_to?(:env)) && env[:request][:raw] - body = case body - when '' - nil - when 'true' - true - when 'false' - false - else - ::MultiJson.decode(body) - end + case body + when '' + nil + when 'true' + true + when 'false' + false + else + ::MultiJson.decode(body) + end + end + + def on_complete(env) + if respond_to? :parse + env[:body] = parse(env[:body]) unless env[:request][:raw] or [204,304].index env[:status] end - body end - end end end From 7ff0d4311eeabce26e00c33991ea28dc019aac16 Mon Sep 17 00:00:00 2001 From: Oliver Azevedo Barnes Date: Fri, 3 Feb 2012 11:40:54 -0200 Subject: [PATCH 4/4] removing extra @connection --- lib/twitter/connection.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/twitter/connection.rb b/lib/twitter/connection.rb index 0790780a3..90a8cf9a5 100644 --- a/lib/twitter/connection.rb +++ b/lib/twitter/connection.rb @@ -38,8 +38,6 @@ def connection(options={}) builder.use Twitter::Response::RaiseServerError builder.adapter(adapter) end - @connection end - end end