4me-sdk 1.1.5 → 2.0.0.pre.rc.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5709d9ce126fa6349fdff96ab4a2dd1c80b8653a
4
- data.tar.gz: 56ea4d39c7dce6e5c0578f0eb5ab1bbeb154622d
2
+ SHA256:
3
+ metadata.gz: 4c4c1ac14f3525802639a4aa78223d0635533ffee6527fed0a02e9f8b41aca54
4
+ data.tar.gz: 5e8b18fa02b940a0883b2ed6349a619cda9048201c87c4d953f53e373e64d88f
5
5
  SHA512:
6
- metadata.gz: 754794a8253b590ddfd4064d2d96e9bae96597ab89c0169c6ebdb7fc8db4dd9035e7a0770be6f6644cff362a9f0dc5e061cb3992e15e6502556921bbdd997c5a
7
- data.tar.gz: 80eaad3b45968a8ca3e1ce3afa4a6750c74105ba188122e1bcaf800ea87c64ab63c88893d70ee32793bf8bc19b22a38f5cec830935c153a03ccb978c83fb1607
6
+ metadata.gz: 5e0752a3cac273d81a7cafa7d43ca5a69088db6143418a9bb70b6a95f1111db422d8eb03d8f669f5d74efd1f0e05d2004f284f21e173605da0f4f3fcb601d62b
7
+ data.tar.gz: 41079af50a9db8a791614849197a5d5aee2049d1b2f9900c345802ff1a6439869f86f9f341309883cfe2c0233c590f352b1ef4c9f5ba81f4cf7506183d95c139
@@ -1,5 +1,4 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'sdk4me/client/version'
5
4
 
@@ -7,34 +6,34 @@ Gem::Specification.new do |spec|
7
6
  spec.name = '4me-sdk'
8
7
  spec.version = Sdk4me::Client::VERSION
9
8
  spec.platform = Gem::Platform::RUBY
10
- spec.required_ruby_version = '>= 2.0.0'
9
+ spec.required_ruby_version = '>= 2.5.0'
11
10
  spec.authors = ['4me']
12
- spec.email = %q{developers@4me.com}
13
- spec.description = %q{SDK for accessing the 4me API}
14
- spec.summary = %q{The official 4me SDK for Ruby. Provides easy access to the APIs found at https://developer.4me.com}
15
- spec.homepage = %q{https://github.com/code4me/4me-sdk-ruby}
11
+ spec.email = 'developers@4me.com'
12
+ spec.description = 'SDK for accessing the 4me REST API'
13
+ spec.summary = 'The official 4me SDK for Ruby. Provides easy access to the REST APIs found at https://developer.4me.com'
14
+ spec.homepage = 'https://github.com/code4me/4me-sdk-ruby'
16
15
  spec.license = 'MIT'
17
16
 
18
- spec.files = Dir.glob('lib/**/*') + %w(
17
+ spec.files = Dir.glob('lib/**/*') + %w[
19
18
  LICENSE
20
19
  README.md
21
20
  Gemfile
22
21
  Gemfile.lock
23
22
  4me-sdk.gemspec
24
- )
25
- spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ ]
24
+ spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
26
25
  spec.test_files = `git ls-files -- {test,spec}/*`.split("\n")
27
26
  spec.require_paths = ['lib']
28
27
  spec.rdoc_options = ['--charset=UTF-8']
29
28
 
30
- spec.add_runtime_dependency 'gem_config', '>=0.3'
31
29
  spec.add_runtime_dependency 'activesupport', '>= 4.2'
30
+ spec.add_runtime_dependency 'gem_config', '>=0.3'
32
31
  spec.add_runtime_dependency 'mime-types', '>= 3.0'
33
32
 
34
33
  spec.add_development_dependency 'bundler', '~> 1'
35
34
  spec.add_development_dependency 'rake', '~> 12'
36
35
  spec.add_development_dependency 'rspec', '~> 3.3'
37
- spec.add_development_dependency 'webmock', '~> 2'
36
+ spec.add_development_dependency 'rubocop', '>= 0.49.0'
38
37
  spec.add_development_dependency 'simplecov', '~> 0'
39
-
38
+ spec.add_development_dependency 'webmock', '~> 3'
40
39
  end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- 4me-sdk (1.1.5)
4
+ 4me-sdk (2.0.0.pre.rc.1)
5
5
  activesupport (>= 4.2)
6
6
  gem_config (>= 0.3)
7
7
  mime-types (>= 3.0)
@@ -9,55 +9,73 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (5.2.2)
12
+ activesupport (6.0.3.4)
13
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
14
  i18n (>= 0.7, < 2)
15
15
  minitest (~> 5.1)
16
16
  tzinfo (~> 1.1)
17
- addressable (2.5.2)
18
- public_suffix (>= 2.0.2, < 4.0)
19
- concurrent-ruby (1.1.4)
20
- crack (0.4.3)
21
- safe_yaml (~> 1.0.0)
22
- diff-lcs (1.3)
23
- docile (1.3.1)
24
- gem_config (0.3.1)
25
- hashdiff (0.3.7)
26
- i18n (1.5.1)
17
+ zeitwerk (~> 2.2, >= 2.2.2)
18
+ addressable (2.7.0)
19
+ public_suffix (>= 2.0.2, < 5.0)
20
+ ast (2.4.1)
21
+ concurrent-ruby (1.1.7)
22
+ crack (0.4.4)
23
+ diff-lcs (1.4.4)
24
+ docile (1.3.2)
25
+ gem_config (0.3.2)
26
+ hashdiff (1.0.1)
27
+ i18n (1.8.5)
27
28
  concurrent-ruby (~> 1.0)
28
- json (2.1.0)
29
- mime-types (3.2.2)
29
+ mime-types (3.3.1)
30
30
  mime-types-data (~> 3.2015)
31
- mime-types-data (3.2018.0812)
32
- minitest (5.11.3)
33
- public_suffix (3.0.3)
34
- rake (12.3.1)
35
- rspec (3.8.0)
36
- rspec-core (~> 3.8.0)
37
- rspec-expectations (~> 3.8.0)
38
- rspec-mocks (~> 3.8.0)
39
- rspec-core (3.8.0)
40
- rspec-support (~> 3.8.0)
41
- rspec-expectations (3.8.2)
31
+ mime-types-data (3.2020.1104)
32
+ minitest (5.14.2)
33
+ parallel (1.19.2)
34
+ parser (2.7.2.0)
35
+ ast (~> 2.4.1)
36
+ public_suffix (4.0.6)
37
+ rainbow (3.0.0)
38
+ rake (12.3.3)
39
+ regexp_parser (1.8.2)
40
+ rexml (3.2.4)
41
+ rspec (3.10.0)
42
+ rspec-core (~> 3.10.0)
43
+ rspec-expectations (~> 3.10.0)
44
+ rspec-mocks (~> 3.10.0)
45
+ rspec-core (3.10.0)
46
+ rspec-support (~> 3.10.0)
47
+ rspec-expectations (3.10.0)
42
48
  diff-lcs (>= 1.2.0, < 2.0)
43
- rspec-support (~> 3.8.0)
44
- rspec-mocks (3.8.0)
49
+ rspec-support (~> 3.10.0)
50
+ rspec-mocks (3.10.0)
45
51
  diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.8.0)
47
- rspec-support (3.8.0)
48
- safe_yaml (1.0.4)
49
- simplecov (0.16.1)
52
+ rspec-support (~> 3.10.0)
53
+ rspec-support (3.10.0)
54
+ rubocop (0.93.1)
55
+ parallel (~> 1.10)
56
+ parser (>= 2.7.1.5)
57
+ rainbow (>= 2.2.2, < 4.0)
58
+ regexp_parser (>= 1.8)
59
+ rexml
60
+ rubocop-ast (>= 0.6.0)
61
+ ruby-progressbar (~> 1.7)
62
+ unicode-display_width (>= 1.4.0, < 2.0)
63
+ rubocop-ast (1.1.1)
64
+ parser (>= 2.7.1.5)
65
+ ruby-progressbar (1.10.1)
66
+ simplecov (0.19.1)
50
67
  docile (~> 1.1)
51
- json (>= 1.8, < 3)
52
- simplecov-html (~> 0.10.0)
53
- simplecov-html (0.10.2)
68
+ simplecov-html (~> 0.11)
69
+ simplecov-html (0.12.3)
54
70
  thread_safe (0.3.6)
55
- tzinfo (1.2.5)
71
+ tzinfo (1.2.7)
56
72
  thread_safe (~> 0.1)
57
- webmock (2.3.2)
73
+ unicode-display_width (1.7.0)
74
+ webmock (3.9.4)
58
75
  addressable (>= 2.3.6)
59
76
  crack (>= 0.3.2)
60
- hashdiff
77
+ hashdiff (>= 0.4.0, < 2.0.0)
78
+ zeitwerk (2.4.1)
61
79
 
62
80
  PLATFORMS
63
81
  ruby
@@ -67,8 +85,9 @@ DEPENDENCIES
67
85
  bundler (~> 1)
68
86
  rake (~> 12)
69
87
  rspec (~> 3.3)
88
+ rubocop (>= 0.49.0)
70
89
  simplecov (~> 0)
71
- webmock (~> 2)
90
+ webmock (~> 3)
72
91
 
73
92
  BUNDLED WITH
74
- 1.16.2
93
+ 1.16.6
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2019 https://code.4me.com
3
+ Copyright (c) 2020 https://code.4me.com
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Sdk4me::Client
2
2
 
3
- Client for accessing the [4me REST API](http://developer.4me.com/v1/)
3
+ Client for accessing the [4me REST API](https://developer.4me.com/v1/)
4
4
 
5
5
  ## Installation
6
6
 
@@ -22,7 +22,7 @@ Or install it yourself as:
22
22
 
23
23
  ```
24
24
  Sdk4me.configure do |config|
25
- config.api_token = 'd41f5868feb65fc87fa2311a473a8766ea38bc40'
25
+ config.access_token = 'd41f5868feb65fc87fa2311a473a8766ea38bc40'
26
26
  config.account = 'my-sandbox'
27
27
  config.logger = Rails.logger
28
28
  ...
@@ -32,18 +32,21 @@ end
32
32
  All options available:
33
33
 
34
34
  * _logger_: The [Ruby Logger](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html) instance, default: `Logger.new(STDOUT)`
35
- * _host_: The [4me API host](http://developer.4me.com/v1/#service-url), default: 'https://api.4me.com'
36
- * _api_version_: The [4me API version](http://developer.4me.com/v1/#service-url), default: 'v1'
37
- * _api_token_: (**required**) The [4me API token](http://developer.4me.com/v1/#api-tokens)
38
- * _account_: Specify a [different account](http://developer.4me.com/v1/#multiple-accounts) to work with
39
- * _source_: The [source](http://developer.4me.com/v1/general/source/) used when creating new records
40
- * _max_retry_time_: maximum nr of seconds to wait for server to respond (default = 5400 = 1.5 hours)<br/>
35
+ * _host_: The [4me REST API host](https://developer.4me.com/v1/#service-url), default: 'https://api.4me.com'
36
+ * _api_version_: The [4me REST API version](https://developer.4me.com/v1/#service-url), default: 'v1'
37
+ * _access_token_: (**required**) The [4me access token](https://developer.4me.com/v1/#authentication)
38
+ * _api_token_: (**deprecated**) The [4me API token](https://developer.4me.com/v1/#api-tokens)
39
+ * _account_: Specify a [different account](https://developer.4me.com/v1/#multiple-accounts) to work with
40
+ * _source_: The [source](https://developer.4me.com/v1/general/source/) used when creating new records
41
+ * _user_agent_: The User-Agent header of each request. Defaults to 4me-sdk-ruby/(version)
42
+ * _max_retry_time_: maximum nr of seconds to retry a request on a failed response (default = 300 = 5 minutes)<br/>
41
43
  The sleep time between retries starts at 2 seconds and doubles after each retry, i.e.
42
- 2, 6, 18, 54, 162, 486, 1458, 4374, 13122, ... seconds.<br/>
44
+ 2, 6, 18, 54, 162, 486, 1458, ... seconds.<br/>
43
45
  Set to 0 to prevent retries.
44
46
  * _read_timeout_: [HTTP read timeout](http://ruby-doc.org/stdlib-2.0.0/libdoc/net/http/rdoc/Net/HTTP.html#method-i-read_timeout-3D) in seconds (default = 25)
45
- * _block_at_rate_limit_: Set to `true` to block the request until the [rate limit](http://developer.4me.com/v1/#rate-limiting) is lifted, default: `false`<br/>
46
- The `Retry-After` header is used to compute when the retry should be performed. If that moment is later than the _max_retry_time_ the request will not be blocked and the throttled response is returned.
47
+ * _block_at_rate_limit_: Set to `true` to block the request until the [rate limit](https://developer.4me.com/v1/#rate-limiting) is lifted, default: `true`<br/>
48
+ The `Retry-After` header is used to compute when the retry should be performed. If that moment is later than the _max_throttle_time_ the request will not be blocked and the throttled response is returned.
49
+ * _max_throttle_time_: maximum nr of seconds to retry a request on a rate limiter (default = 3660 = 1 hour and 1 minute)<br/>
47
50
  * _proxy_host_: Define in case HTTP traffic needs to go through a proxy
48
51
  * _proxy_port_: Port of the proxy, defaults to 8080
49
52
  * _proxy_user_: Proxy user
@@ -69,7 +72,7 @@ Minimal example:
69
72
  ```
70
73
  require 'sdk4me/client'
71
74
 
72
- client = Sdk4me::Client.new(api_token: '3a4e4590179263839...')
75
+ client = Sdk4me::Client.new(access_token: '3a4e4590179263839...')
73
76
  response = client.get('me')
74
77
  puts response[:primary_email]
75
78
  ```
@@ -83,7 +86,7 @@ response = Sdk4me::Client.new.get('organizations/4321')
83
86
  puts response[:name]
84
87
  ```
85
88
 
86
- By default this call will return all [fields](http://developer.4me.com/v1/organizations/#fields) of the Organization.
89
+ By default this call will return all [fields](https://developer.4me.com/v1/organizations/#fields) of the Organization.
87
90
 
88
91
  The fields can be accessed using *symbols* and *strings*, and it is possible chain a number of keys in one go:
89
92
  ```
@@ -104,8 +107,8 @@ end
104
107
  puts "Found #{count} organizations"
105
108
  ```
106
109
 
107
- By default this call will return all [collection fields](http://developer.4me.com/v1/organizations/#collection-fields) for each Organization.
108
- For more fields, check out the [field selection](http://developer.4me.com/v1/general/field_selection/#collection-of-resources) documentation.
110
+ By default this call will return all [collection fields](https://developer.4me.com/v1/organizations/#collection-fields) for each Organization.
111
+ For more fields, check out the [field selection](https://developer.4me.com/v1/general/field_selection/#collection-of-resources) documentation.
109
112
 
110
113
  The fields can be accessed using *symbols* and *strings*, and it is possible chain a number of keys in one go:
111
114
  ```
@@ -122,7 +125,7 @@ Note that an `Sdk4me::Exception` could be thrown in case one of the API requests
122
125
 
123
126
  The `each` method [described above](#browse-through-a-collection-of-records) is the preferred way to work with collections of data.
124
127
 
125
- If you really want to [paginate](http://developer.4me.com/v1/general/pagination/) yourself, the `get` method is your friend.
128
+ If you really want to [paginate](https://developer.4me.com/v1/general/pagination/) yourself, the `get` method is your friend.
126
129
 
127
130
  ```
128
131
  @client = Sdk4me::Client.new
@@ -140,8 +143,8 @@ next_page = @client.get(response.pagination_link(:next))
140
143
  last_page = @client.get(response.pagination_link(:last))
141
144
  ```
142
145
 
143
- By default this call will return all [collection fields](http://developer.4me.com/v1/organizations/#collection-fields) for each Organization.
144
- For more fields, check out the [field selection](http://developer.4me.com/v1/general/field_selection/#collection-of-resources) documentation.
146
+ By default this call will return all [collection fields](https://developer.4me.com/v1/organizations/#collection-fields) for each Organization.
147
+ For more fields, check out the [field selection](https://developer.4me.com/v1/general/field_selection/#collection-of-resources) documentation.
145
148
 
146
149
  The fields can be accessed using *symbols* and *strings*, and it is possible chain a number of keys in one go:
147
150
  ```
@@ -197,31 +200,38 @@ end
197
200
  Make sure to validate the success by calling `response.valid?` and to take appropriate action in case the response is not valid.
198
201
 
199
202
 
200
- ### Note Attachments
203
+ ### Attachments
201
204
 
202
- To add attachments to a note is rather tricky when done manually as it involves separate file uploads to Amazon S3 and sending
203
- confirmations back to 4me.
205
+ Adding attachments and inline images to rich text fields is a two-step process.
206
+ First upload the attachments to 4me, and then refer to the uploaded attachments
207
+ when creating or updating a 4me record.
204
208
 
205
- To make it easy, a special `attachments` parameter can be added when using the `post` or `put` method when the `note` field is available.
209
+ To make this process easy, refer to the files using string filepaths or
210
+ File references:
206
211
 
207
212
  ```
208
213
  response = Sdk4me::Client.new.put('requests/416621', {
209
214
  status: 'waiting_for_customer',
210
- note: 'Please complete the attached forms and reassign the request back to us.',
211
- attachments: ['/tmp/forms/Inventory.xls', '/tmp/forms/PersonalData.xls']
215
+ note: 'Please complete the attached forms and assign the request back to us.',
216
+ note_attachments: [
217
+ '/tmp/forms/README.txt',
218
+ File.open('/tmp/forms/PersonalData.xls', 'rb')
219
+ ]
212
220
  })
213
221
  ```
214
222
 
215
- If an attachment upload fails, the errors are logged but the `post` or `put` request will still be sent to 4me without the
216
- failed attachments. To receive exceptions add `attachments_exception: true` to the data.
223
+ It is also possible to add inline attachments. Refer to attachments by their
224
+ array index, with the index being zero-based. Text can only refer to inline
225
+ images in its own attachments collection. For example:
217
226
 
218
227
  ```
219
228
  begin
220
- response = Sdk4me::Client.new.put('requests/416621', {
229
+ data = {
221
230
  status: 'waiting_for_customer',
222
- note: 'Please complete the attached forms and reassign the request back to us.',
223
- attachments: ['/tmp/forms/Inventory.xls', '/tmp/forms/PersonalData.xls']
224
- })
231
+ note: 'See [note_attachments: 0] and [note_attachments: 1]',
232
+ note_attachments: ['/tmp/info.png', '/tmp/help.png']
233
+ }
234
+ response = Sdk4me::Client.new.put('requests/416621', data)
225
235
  if response.valid?
226
236
  puts "Request #{response[:id]} updated and attachments added to the note"
227
237
  else
@@ -234,7 +244,7 @@ end
234
244
 
235
245
  ### Importing CSV files
236
246
 
237
- 4me also provides an [Import API](http://developer.4me.com/v1/import/). The 4me SDK Client can be used to upload files to that API.
247
+ 4me also provides an [Import API](https://developer.4me.com/v1/import/). The 4me SDK Client can be used to upload files to that API.
238
248
 
239
249
  ```
240
250
  response = Sdk4me::Client.new.import('\tmp\people.csv', 'people')
@@ -246,9 +256,9 @@ end
246
256
 
247
257
  ```
248
258
 
249
- The second argument contains the [import type](http://developer.4me.com/v1/import/#parameters).
259
+ The second argument contains the [import type](https://developer.4me.com/v1/import/#parameters).
250
260
 
251
- It is also possible to [monitor the progress](http://developer.4me.com/v1/import/#import-progress) of the import and block until the import is complete. In that case you will need to add some exception handling to your code.
261
+ It is also possible to [monitor the progress](https://developer.4me.com/v1/import/#import-progress) of the import and block until the import is complete. In that case you will need to add some exception handling to your code.
252
262
 
253
263
  ```
254
264
  begin
@@ -268,7 +278,7 @@ Note that blocking for the import to finish is required when you import multiple
268
278
 
269
279
  ### Exporting CSV files
270
280
 
271
- 4me also provides an [Export API](http://developer.4me.com/v1/export/). The 4me SDK Client can be used to download (zipped) CSV files using that API.
281
+ 4me also provides an [Export API](https://developer.4me.com/v1/export/). The 4me SDK Client can be used to download (zipped) CSV files using that API.
272
282
 
273
283
  ```
274
284
  response = Sdk4me::Client.new.export(['people', 'people_contact_details'], DateTime.new(2012,03,30,23,00,00))
@@ -280,10 +290,10 @@ end
280
290
 
281
291
  ```
282
292
 
283
- The first argument contains the [export types](http://developer.4me.com/v1/export/#parameters).
293
+ The first argument contains the [export types](https://developer.4me.com/v1/export/#parameters).
284
294
  The second argument is optional and limits the export to all changed records since the given time.
285
295
 
286
- It is also possible to [monitor the progress](http://developer.4me.com/v1/export/#export-progress) of the export and block until the export is complete. In that case you will need to add some exception handling to your code.
296
+ It is also possible to [monitor the progress](https://developer.4me.com/v1/export/#export-progress) of the export and block until the export is complete. In that case you will need to add some exception handling to your code.
287
297
 
288
298
  ```
289
299
  require 'open-uri'
@@ -305,10 +315,17 @@ Note that blocking for the export to finish is recommended as you will get direc
305
315
 
306
316
  ### Blocking
307
317
 
308
- By default all actions on the 4me SDK Client will block until the 4me API is accessible, see the _max_retry_time_ option in the [configuration](#configuration). This is especially helpfull for flaky internet connections.
318
+ When the currently used API token hits the [4me rate limiter](https://developer.4me.com/v1/#rate-limiting) a HTTP 429 response is returned that specifies after how many seconds the rate limit will be lifted.
309
319
 
310
- By setting the _block_at_rate_limit_ to `true` in the [configuration](#configuration) all actions will also block in case the [rate limit](http://developer.4me.com/v1/#rate-limiting) is reached. The action is retried every 5 minutes until the [rate limit](http://developer.4me.com/v1/#rate-limiting) is lifted again, which might take up to 1 hour.
320
+ If that time lies within the _max_throttle_time_ the 4me SDK Client will wait and retry the action, if not, the throttled response will be returned. You can verify if a response was throttled using:
321
+ ```
322
+ response = client.get('me')
323
+ puts response.throttled?
324
+ ```
325
+
326
+ By setting the _block_at_rate_limit_ to `false` in the [configuration](#configuration) the 4me SDK Client will never wait when a rate limit is hit.
311
327
 
328
+ Note that 4me has different rate limiters. If the intention is to only wait when the short-burst (max 20 requests in 2 seconds) rate limiter is hit, you could set the _max_throttle_time_ to e.g. 5 seconds.
312
329
 
313
330
  ### Translations
314
331
 
@@ -320,7 +337,7 @@ When exporting translations, the _locale_ parameter is required:
320
337
 
321
338
  ### Exception handling
322
339
 
323
- The standard methods `get`, `post`, `put` and `delete` will always return a Response with an [error message](http://developer.4me.com/v1/#http-status-codes) in case something went wrong.
340
+ The standard methods `get`, `post`, `put` and `delete` will always return a Response with an [error message](https://developer.4me.com/v1/#http-status-codes) in case something went wrong.
324
341
 
325
342
  By calling `response.valid?` you will know if the action succeeded or not, and `response.message` provides additinal information in case the response was invalid.
326
343
 
@@ -331,3 +348,11 @@ puts response.message
331
348
  ```
332
349
 
333
350
  The methods `each` and `import` may throw an `Sdk4me::Exception` in case something failed, see the examples above.
351
+
352
+ ## Changelog
353
+
354
+ The changelog is available [here](CHANGELOG.md).
355
+
356
+ ## Copyright
357
+
358
+ Copyright (c) 2020 4me, Inc. See [LICENSE](LICENSE) for further details.
@@ -5,19 +5,20 @@ module Sdk4me
5
5
  include GemConfig::Base
6
6
 
7
7
  with_configuration do
8
- has :logger, classes: ::Logger, default: ::Logger.new(STDOUT)
8
+ has :logger, classes: ::Logger, default: ::Logger.new($stdout)
9
9
 
10
10
  has :host, classes: String, default: 'https://api.4me.com'
11
11
  has :api_version, values: ['v1'], default: 'v1'
12
+ has :access_token, classes: String
12
13
  has :api_token, classes: String
13
14
 
14
15
  has :account, classes: String
15
16
  has :source, classes: String
16
17
 
17
- has :max_retry_time, classes: Integer, default: 5400
18
+ has :max_retry_time, classes: Integer, default: 300
18
19
  has :read_timeout, classes: Integer, default: 25
19
- has :block_at_rate_limit, classes: [TrueClass, FalseClass], default: false
20
-
20
+ has :block_at_rate_limit, classes: [TrueClass, FalseClass], default: true
21
+ has :max_throttle_time, classes: Integer, default: 3660
21
22
  has :proxy_host, classes: String
22
23
  has :proxy_port, classes: Integer, default: 8080
23
24
  has :proxy_user, classes: String
@@ -30,8 +31,9 @@ module Sdk4me
30
31
  configuration.logger
31
32
  end
32
33
 
33
- class Exception < ::Exception; end # ::Sdk4me::Exception class
34
-
35
- class UploadFailed < Exception; end # ::Sdk4me::UploadFailed class
34
+ class Exception < ::Exception
35
+ end
36
36
 
37
- end
37
+ class UploadFailed < Exception
38
+ end
39
+ end