diff --git a/.gitignore b/.gitignore index 531ae4f..4dda34a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ coverage/* doc/* log/* measurement/* -pkg/* \ No newline at end of file +pkg/* +vendor/bundle \ No newline at end of file diff --git a/README.md b/README.md index 7f02426..a3985bb 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,24 @@ aliases = client.list_aliases('domain.com') puts aliases['aliases'] ``` -Improvmx has a rate limit system, to handle this you can do +### Timeout Configuration + +You can configure custom timeout values when initializing the client: + +```ruby +require 'improvmx' + +# Configure timeouts (in seconds) +client = Improvmx::Client.new('your-api-key', { + read_timeout: 120, # Time to wait for response (default: 60) + open_timeout: 30 # Time to wait for connection (default: 60) +}) +``` + +### Rate Limiting + +Improvmx has a rate limit system, to handle this you can do: + ```ruby require 'improvmx' client = Improvmx::Client.new 'your-api-key' diff --git a/lib/improvmx/client.rb b/lib/improvmx/client.rb index 33dfada..71460f9 100755 --- a/lib/improvmx/client.rb +++ b/lib/improvmx/client.rb @@ -10,18 +10,26 @@ class Client include Improvmx::SMTP include Improvmx::Utils - def initialize(api_key = Improvmx.api_key) + # Default timeout values in seconds + DEFAULT_OPEN_TIMEOUT = 60 + DEFAULT_READ_TIMEOUT = 60 + + # rubocop:disable Metrics/MethodLength + def initialize(api_key = Improvmx.api_key, options = {}) rest_client_params = { user: 'api', password: api_key, user_agent: "improvmx-ruby/#{Improvmx::VERSION}", + timeout: options[:read_timeout] || DEFAULT_READ_TIMEOUT, + open_timeout: options[:open_timeout] || DEFAULT_OPEN_TIMEOUT, headers: { - content_type: "application/json" + content_type: 'application/json' } } @http_client = RestClient::Resource.new('https://api.improvmx.com/v3', rest_client_params) end + # rubocop:enable Metrics/MethodLength def post(resource_path, data, headers = {}) response = @http_client[resource_path].post(data.to_json, headers) diff --git a/spec/improvmx/client_spec.rb b/spec/improvmx/client_spec.rb new file mode 100644 index 0000000..303078c --- /dev/null +++ b/spec/improvmx/client_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' +require 'improvmx' + +describe Improvmx::Client do + describe '#initialize' do + it 'initializes with default timeout values' do + client = described_class.new('test-api-key') + + expect(client).to be_a(described_class) + end + + it 'initializes with custom timeout values' do + client = described_class.new('test-api-key', { + read_timeout: 120, + open_timeout: 30 + }) + + expect(client).to be_a(described_class) + end + + it 'initializes with partial timeout configuration' do + client = described_class.new('test-api-key', { read_timeout: 90 }) + + expect(client).to be_a(described_class) + end + end +end