4me-sdk 1.1.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aba8de45bcc385f1f8ffedfce680f58cb5c73865510798712d7d8c382ecbd9bf
4
- data.tar.gz: 1ffb444710f94ad590aa4943589465e028ad7cf1957bd5546fd93fe158871c6e
3
+ metadata.gz: 32cfcbac334dbc605b6488e54db56eb8c7db3dfca80724b08114affc264d4d59
4
+ data.tar.gz: ed44080e2df04693b32d62bd0a0086511af32301ba6e5d4a4e401ba0ab4d70f1
5
5
  SHA512:
6
- metadata.gz: bdd2c6e55c547a2b13ca893a73e3167d77adee143e53e396b48d8712cfb8d7e148f0f3b10090c3b20691e22b20ddad4a1593d6f8e374880a98c9f8b71abfbe85
7
- data.tar.gz: d63bc178ea462a8b4691ad2d63c25ca48ae5735820d398047dfe98ff450be1a6d3f6c8aa8e27c30829afb9753b5213a6f55c0539d1ba03f134908ea8a59ae4f3
6
+ metadata.gz: 0b4d62a29b08e73e7afce649acbccf27f3192f46d50b533e02429e0da45f3f1c99ccd5201343da550c3a7f2561d27e732a39c22794fb78f8f182831ec42a97f7
7
+ data.tar.gz: '08c618e5b35ec1a7bc3a47e5800b64da25a992475ccc7fa5f99d8e781b4b724a3caf32dbf0936d8ca79d244fac2a4c5ddb9facd5be06893c867f7d97a8dbc6fd'
@@ -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.8)
4
+ 4me-sdk (2.0.0.pre.rc.2)
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.5)
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.2019.0331)
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.17.3
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,20 @@ 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
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)
40
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
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: `true`<br/>
46
- 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.
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.
47
49
  * _max_throttle_time_: maximum nr of seconds to retry a request on a rate limiter (default = 3660 = 1 hour and 1 minute)<br/>
48
50
  * _proxy_host_: Define in case HTTP traffic needs to go through a proxy
49
51
  * _proxy_port_: Port of the proxy, defaults to 8080
@@ -70,7 +72,7 @@ Minimal example:
70
72
  ```
71
73
  require 'sdk4me/client'
72
74
 
73
- client = Sdk4me::Client.new(api_token: '3a4e4590179263839...')
75
+ client = Sdk4me::Client.new(access_token: '3a4e4590179263839...')
74
76
  response = client.get('me')
75
77
  puts response[:primary_email]
76
78
  ```
@@ -84,7 +86,7 @@ response = Sdk4me::Client.new.get('organizations/4321')
84
86
  puts response[:name]
85
87
  ```
86
88
 
87
- 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.
88
90
 
89
91
  The fields can be accessed using *symbols* and *strings*, and it is possible chain a number of keys in one go:
90
92
  ```
@@ -105,8 +107,8 @@ end
105
107
  puts "Found #{count} organizations"
106
108
  ```
107
109
 
108
- By default this call will return all [collection fields](http://developer.4me.com/v1/organizations/#collection-fields) for each Organization.
109
- 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.
110
112
 
111
113
  The fields can be accessed using *symbols* and *strings*, and it is possible chain a number of keys in one go:
112
114
  ```
@@ -123,7 +125,7 @@ Note that an `Sdk4me::Exception` could be thrown in case one of the API requests
123
125
 
124
126
  The `each` method [described above](#browse-through-a-collection-of-records) is the preferred way to work with collections of data.
125
127
 
126
- 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.
127
129
 
128
130
  ```
129
131
  @client = Sdk4me::Client.new
@@ -141,8 +143,8 @@ next_page = @client.get(response.pagination_link(:next))
141
143
  last_page = @client.get(response.pagination_link(:last))
142
144
  ```
143
145
 
144
- By default this call will return all [collection fields](http://developer.4me.com/v1/organizations/#collection-fields) for each Organization.
145
- 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.
146
148
 
147
149
  The fields can be accessed using *symbols* and *strings*, and it is possible chain a number of keys in one go:
148
150
  ```
@@ -198,39 +200,38 @@ end
198
200
  Make sure to validate the success by calling `response.valid?` and to take appropriate action in case the response is not valid.
199
201
 
200
202
 
201
- ### Note Attachments
203
+ ### Attachments
202
204
 
203
- To add attachments to a note is rather tricky when done manually as it involves separate file uploads to Amazon S3 and sending
204
- 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.
205
208
 
206
- 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:
207
211
 
208
212
  ```
209
213
  response = Sdk4me::Client.new.put('requests/416621', {
210
214
  status: 'waiting_for_customer',
211
- note: 'Please complete the attached forms and reassign the request back to us.',
212
- 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
+ ]
213
220
  })
214
221
  ```
215
222
 
216
- It is also possible to add inline attachments as follows:
217
- ```
218
- response = Sdk4me::Client.new.put('requests/416621', {
219
- note: 'Here is some inspiration for you: [attachment:/tmp/images/puppy.png]'
220
- })
221
- ```
222
- Note that only images are accepted as inline attachments.
223
-
224
- If an attachment upload fails, the errors are logged but the `post` or `put` request will still be sent to 4me without the
225
- 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:
226
226
 
227
227
  ```
228
228
  begin
229
- response = Sdk4me::Client.new.put('requests/416621', {
229
+ data = {
230
230
  status: 'waiting_for_customer',
231
- note: 'Please complete the attached forms and reassign the request back to us.',
232
- attachments: ['/tmp/forms/Inventory.xls', '/tmp/forms/PersonalData.xls']
233
- })
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)
234
235
  if response.valid?
235
236
  puts "Request #{response[:id]} updated and attachments added to the note"
236
237
  else
@@ -243,7 +244,7 @@ end
243
244
 
244
245
  ### Importing CSV files
245
246
 
246
- 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.
247
248
 
248
249
  ```
249
250
  response = Sdk4me::Client.new.import('\tmp\people.csv', 'people')
@@ -255,9 +256,9 @@ end
255
256
 
256
257
  ```
257
258
 
258
- 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).
259
260
 
260
- 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.
261
262
 
262
263
  ```
263
264
  begin
@@ -277,7 +278,7 @@ Note that blocking for the import to finish is required when you import multiple
277
278
 
278
279
  ### Exporting CSV files
279
280
 
280
- 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.
281
282
 
282
283
  ```
283
284
  response = Sdk4me::Client.new.export(['people', 'people_contact_details'], DateTime.new(2012,03,30,23,00,00))
@@ -289,10 +290,10 @@ end
289
290
 
290
291
  ```
291
292
 
292
- 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).
293
294
  The second argument is optional and limits the export to all changed records since the given time.
294
295
 
295
- 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.
296
297
 
297
298
  ```
298
299
  require 'open-uri'
@@ -314,7 +315,7 @@ Note that blocking for the export to finish is recommended as you will get direc
314
315
 
315
316
  ### Blocking
316
317
 
317
- When the currently used API token hits the [4me rate limiter](http://developer.4me.com/v1/#rate-limiting) a HTTP 429 response is returned that specifies after how many seconds the rate limit will be lifted.
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.
318
319
 
319
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:
320
321
  ```
@@ -336,7 +337,7 @@ When exporting translations, the _locale_ parameter is required:
336
337
 
337
338
  ### Exception handling
338
339
 
339
- 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.
340
341
 
341
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.
342
343
 
@@ -347,3 +348,11 @@ puts response.message
347
348
  ```
348
349
 
349
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,10 +5,11 @@ 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
@@ -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