diff --git a/README.md b/README.md index 090b8e0..56c5c2e 100644 --- a/README.md +++ b/README.md @@ -45,19 +45,29 @@ Incognia.configure( ) ``` -To reuse HTTP connections between requests, enable `keep_alive`. When enabled, -`max_connections` sets the maximum number of concurrent persistent -connections used by the client. +HTTP connection reuse is enabled by default. When connection reuse is enabled, +`max_connections` sets the maximum number of concurrent persistent connections +used by the client. ```ruby Incognia.configure( client_id: ENV['INCOGNIA_CLIENT_ID'], client_secret: ENV['INCOGNIA_CLIENT_SECRET'], - keep_alive: true, max_connections: 5 ) ``` +To disable persistent connections, set `keep_alive: false`. `max_connections` +can only be configured when `keep_alive` is enabled. + +```ruby +Incognia.configure( + client_id: ENV['INCOGNIA_CLIENT_ID'], + client_secret: ENV['INCOGNIA_CLIENT_SECRET'], + keep_alive: false +) +``` + For sandbox credentials, refer to the [API testing guide](https://developer.incognia.com/). :bulb: For Rails applications it's recommended to create an initializer file, for example `config/initializers/incognia.rb`. diff --git a/lib/incognia_api.rb b/lib/incognia_api.rb index d188642..b51ff17 100644 --- a/lib/incognia_api.rb +++ b/lib/incognia_api.rb @@ -30,6 +30,8 @@ class APIError < StandardError attr_reader :message, :errors, :status def initialize(message, response_info = {}) + response_info ||= {} + @status = response_info[:status] @errors = response_info[:body] @message = format_message(message) diff --git a/lib/incognia_api/configuration.rb b/lib/incognia_api/configuration.rb index fccece2..7fff6cf 100644 --- a/lib/incognia_api/configuration.rb +++ b/lib/incognia_api/configuration.rb @@ -6,7 +6,7 @@ class Configuration attr_accessor :client_id, :client_secret, :host, :keep_alive, :max_connections - def configure(client_id:, client_secret:, host: nil, keep_alive: false, max_connections: nil) + def configure(client_id:, client_secret:, host: nil, keep_alive: true, max_connections: nil) validate_connection_settings!(keep_alive: keep_alive, max_connections: max_connections) @client_id = client_id diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 24e1268..ac796d4 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -14,7 +14,8 @@ module Incognia Incognia.configure( client_id: 'client_id', client_secret: 'client_secret', - host: 'https://api.incognia.com/api' + host: 'https://api.incognia.com/api', + keep_alive: false ) end @@ -258,6 +259,37 @@ module Incognia before { Singleton.__init__(described_class) } after { instance.reset! } + it "uses the persistent adapter by default" do + Incognia.configure( + client_id: 'client_id', + client_secret: 'client_secret', + host: 'https://api.incognia.com/api' + ) + + allow_any_instance_of(Faraday::RackBuilder).to receive(:adapter).and_call_original + expect_any_instance_of(Faraday::RackBuilder).to receive(:adapter) + .with(:net_http_persistent) + .and_call_original + + instance.connection + end + + it "uses the default adapter when keep_alive is false" do + Incognia.configure( + client_id: 'client_id', + client_secret: 'client_secret', + host: 'https://api.incognia.com/api', + keep_alive: false + ) + + allow_any_instance_of(Faraday::RackBuilder).to receive(:adapter).and_call_original + expect_any_instance_of(Faraday::RackBuilder).to receive(:adapter) + .with(Faraday.default_adapter) + .and_call_original + + instance.connection + end + it "uses the persistent adapter with the configured max_connections" do Incognia.configure( client_id: 'client_id', diff --git a/spec/incognia_spec.rb b/spec/incognia_spec.rb index a8cfe1c..2fb15a0 100644 --- a/spec/incognia_spec.rb +++ b/spec/incognia_spec.rb @@ -15,13 +15,15 @@ module Incognia expect(Configuration.instance.client_id).to eq(config[:client_id]) expect(Configuration.instance.client_secret).to eq(config[:client_secret]) expect(Configuration.instance.host).to eq(config[:host]) + expect(Configuration.instance.keep_alive).to eq(true) end - it 'raises when max_connections is set without keep_alive' do + it 'raises when max_connections is set with keep_alive disabled' do expect { Incognia.configure( client_id: SecureRandom.uuid, client_secret: SecureRandom.uuid, + keep_alive: false, max_connections: 5 ) }.to raise_error(ArgumentError, 'max_connections requires keep_alive: true') @@ -61,7 +63,8 @@ module Incognia Incognia.configure( client_id: 'client_id', client_secret: 'client_secret', - host: 'https://api.incognia.com/api' + host: 'https://api.incognia.com/api', + keep_alive: false ) end