diff --git a/CHANGELOG.md b/CHANGELOG.md index ab89da6c..489cb6cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### 0.14.7 (Next) +* [#322](https://github.com/slack-ruby/slack-ruby-client/pull/322): Cache Faraday::Connection for persistent adapters - [@drbrain](https://github.com/drbrain). * Your contribution here. ### 0.14.6 (2020/3/28) diff --git a/lib/slack/web/faraday/connection.rb b/lib/slack/web/faraday/connection.rb index 6090d078..471a68e1 100644 --- a/lib/slack/web/faraday/connection.rb +++ b/lib/slack/web/faraday/connection.rb @@ -6,29 +6,32 @@ module Connection private def connection - options = { - headers: { 'Accept' => 'application/json; charset=utf-8' } - } + @connection ||= + begin + options = { + headers: { 'Accept' => 'application/json; charset=utf-8' } + } - options[:headers]['User-Agent'] = user_agent if user_agent - options[:proxy] = proxy if proxy - options[:ssl] = { ca_path: ca_path, ca_file: ca_file } if ca_path || ca_file + options[:headers]['User-Agent'] = user_agent if user_agent + options[:proxy] = proxy if proxy + options[:ssl] = { ca_path: ca_path, ca_file: ca_file } if ca_path || ca_file - request_options = {} - request_options[:timeout] = timeout if timeout - request_options[:open_timeout] = open_timeout if open_timeout - options[:request] = request_options if request_options.any? + request_options = {} + request_options[:timeout] = timeout if timeout + request_options[:open_timeout] = open_timeout if open_timeout + options[:request] = request_options if request_options.any? - ::Faraday::Connection.new(endpoint, options) do |connection| - connection.use ::Faraday::Request::Multipart - connection.use ::Faraday::Request::UrlEncoded - connection.use ::Faraday::Response::RaiseError - connection.use ::Slack::Web::Faraday::Response::RaiseError - connection.use ::FaradayMiddleware::Mashify, mash_class: Slack::Messages::Message - connection.use ::FaradayMiddleware::ParseJson - connection.response :logger, logger if logger - connection.adapter ::Faraday.default_adapter - end + ::Faraday::Connection.new(endpoint, options) do |connection| + connection.use ::Faraday::Request::Multipart + connection.use ::Faraday::Request::UrlEncoded + connection.use ::Faraday::Response::RaiseError + connection.use ::Slack::Web::Faraday::Response::RaiseError + connection.use ::FaradayMiddleware::Mashify, mash_class: Slack::Messages::Message + connection.use ::FaradayMiddleware::ParseJson + connection.response :logger, logger if logger + connection.adapter ::Faraday.default_adapter + end + end end end end diff --git a/spec/slack/web/client_spec.rb b/spec/slack/web/client_spec.rb index 0b611928..067b3ff7 100644 --- a/spec/slack/web/client_spec.rb +++ b/spec/slack/web/client_spec.rb @@ -205,5 +205,16 @@ client.users_admin_setInactive(user: 'U092BDCLV') end end + + context 'persistent capability' do + describe '#initialize' do + it 'caches the Farady connection to allow persistent adapters' do + first = client.send(:connection) + second = client.send(:connection) + + expect(first).to equal second + end + end + end end end