xero-ruby 2.9.0 → 2.9.1
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 +4 -4
- data/lib/xero-ruby/api_client.rb +41 -10
- data/lib/xero-ruby/configuration.rb +14 -1
- data/lib/xero-ruby/models/payroll_au/deduction_line.rb +0 -5
- data/lib/xero-ruby/version.rb +2 -2
- data/spec/api_client_spec.rb +81 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb43e668c4cbd29f1190365df174d64a56385710319bdf3061ebe048b6dddcee
|
4
|
+
data.tar.gz: 0c4bacf725b0130b1675bc300bff98840fe537958fb8eef4627c709afd69ee5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0eb80a0480dbf63d28ff6295f43e5288e90c0299616bfd48a60401b8f214424baff1d990e6964bafbb76b0d569dd172ccbb151dc9c9c96a7c3697e10f4361897
|
7
|
+
data.tar.gz: 780bd04d6cde627f8c6b4ac56a69c018ac9e5fef49169ccdf6a89201b6e826b253a1942e5459429256c351a459e3c0a45f105f99554aec32dadfa9b36e7fa63a
|
data/lib/xero-ruby/api_client.rb
CHANGED
@@ -38,7 +38,8 @@ module XeroRuby
|
|
38
38
|
@redirect_uri = credentials[:redirect_uri]
|
39
39
|
@scopes = credentials[:scopes]
|
40
40
|
@state = credentials[:state]
|
41
|
-
|
41
|
+
default_config = Configuration.default.clone
|
42
|
+
@config = append_to_default_config(default_config, config)
|
42
43
|
|
43
44
|
@user_agent = "xero-ruby-#{VERSION}"
|
44
45
|
@default_headers = {
|
@@ -47,9 +48,9 @@ module XeroRuby
|
|
47
48
|
}
|
48
49
|
end
|
49
50
|
|
50
|
-
def append_to_default_config(user_config)
|
51
|
-
config =
|
52
|
-
user_config.each{|k,v| config.send("#{k}=", v)
|
51
|
+
def append_to_default_config(default_config, user_config)
|
52
|
+
config = default_config
|
53
|
+
user_config.each{|k,v| config.send("#{k}=", v)}
|
53
54
|
config
|
54
55
|
end
|
55
56
|
|
@@ -96,22 +97,32 @@ module XeroRuby
|
|
96
97
|
|
97
98
|
# Token Helpers
|
98
99
|
def token_set
|
99
|
-
|
100
|
+
@config.token_set
|
100
101
|
end
|
101
102
|
|
102
103
|
def access_token
|
103
|
-
|
104
|
+
@config.access_token
|
105
|
+
end
|
106
|
+
|
107
|
+
def id_token
|
108
|
+
@config.id_token
|
104
109
|
end
|
105
110
|
|
106
111
|
def set_token_set(token_set)
|
107
112
|
# helper to set the token_set on a client once the user
|
108
113
|
# has a valid token set ( access_token & refresh_token )
|
109
|
-
|
114
|
+
@config.token_set = token_set
|
110
115
|
set_access_token(token_set['access_token'])
|
111
116
|
end
|
112
117
|
|
113
118
|
def set_access_token(access_token)
|
114
|
-
|
119
|
+
# puts "access_token -> #{access_token}"
|
120
|
+
@config.access_token = access_token
|
121
|
+
# puts "@config.access_token -> #{@config.access_token}"
|
122
|
+
end
|
123
|
+
|
124
|
+
def set_id_token(id_token)
|
125
|
+
@config.id_token = id_token
|
115
126
|
end
|
116
127
|
|
117
128
|
def get_token_set_from_callback(params)
|
@@ -182,7 +193,26 @@ module XeroRuby
|
|
182
193
|
:client_key => @config.ssl_client_key
|
183
194
|
}
|
184
195
|
|
185
|
-
|
196
|
+
case api_client
|
197
|
+
when "AccountingApi"
|
198
|
+
method_base_url = @config.accounting_url
|
199
|
+
when "AssetApi"
|
200
|
+
method_base_url = @config.asset_url
|
201
|
+
when "FilesApi"
|
202
|
+
method_base_url = @config.files_url
|
203
|
+
when "PayrollAuApi"
|
204
|
+
method_base_url = @config.payroll_au_url
|
205
|
+
when "PayrollNzApi"
|
206
|
+
method_base_url = @config.payroll_nz_url
|
207
|
+
when "PayrollUkApi"
|
208
|
+
method_base_url = @config.payroll_uk_url
|
209
|
+
when "ProjectApi"
|
210
|
+
method_base_url = @config.project_url
|
211
|
+
else
|
212
|
+
method_base_url = @config.accounting_url
|
213
|
+
end
|
214
|
+
|
215
|
+
connection = Faraday.new(:url => method_base_url, :ssl => ssl_options) do |conn|
|
186
216
|
conn.basic_auth(config.username, config.password)
|
187
217
|
if opts[:header_params]["Content-Type"] == "multipart/form-data"
|
188
218
|
conn.request :multipart
|
@@ -265,7 +295,8 @@ module XeroRuby
|
|
265
295
|
end
|
266
296
|
end
|
267
297
|
request.headers = header_params
|
268
|
-
|
298
|
+
timeout = @config.timeout
|
299
|
+
request.options.timeout = timeout if timeout > 0
|
269
300
|
request.body = req_body
|
270
301
|
request.url url
|
271
302
|
request.params = query_params
|
@@ -60,8 +60,11 @@ module XeroRuby
|
|
60
60
|
# @return [String]
|
61
61
|
attr_accessor :password
|
62
62
|
|
63
|
-
# Defines the access token (Bearer) used with OAuth2
|
63
|
+
# Defines the access token (Bearer) used with OAuth2 authorization
|
64
64
|
attr_accessor :access_token
|
65
|
+
|
66
|
+
# Defines OpenID Connect id_token containing Xero user authentication detail
|
67
|
+
attr_accessor :id_token
|
65
68
|
|
66
69
|
# Defines the token set used with OAuth2. May include id/access/refresh token & other meta info.
|
67
70
|
attr_accessor :token_set
|
@@ -146,6 +149,8 @@ module XeroRuby
|
|
146
149
|
@payroll_au_url = 'https://api.xero.com/payroll.xro/1.0/'
|
147
150
|
@payroll_nz_url = 'https://api.xero.com/payroll.xro/2.0/'
|
148
151
|
@payroll_uk_url = 'https://api.xero.com/payroll.xro/2.0/'
|
152
|
+
@access_token = nil
|
153
|
+
@id_token = nil
|
149
154
|
@api_key = {}
|
150
155
|
@api_key_prefix = {}
|
151
156
|
@timeout = 0
|
@@ -191,6 +196,14 @@ module XeroRuby
|
|
191
196
|
def base_url=(api_url)
|
192
197
|
@base_url = api_url
|
193
198
|
end
|
199
|
+
|
200
|
+
def access_token=(access_token)
|
201
|
+
@access_token = access_token
|
202
|
+
end
|
203
|
+
|
204
|
+
def id_token=(id_token)
|
205
|
+
@id_token = id_token
|
206
|
+
end
|
194
207
|
|
195
208
|
# Gets API key (with prefix if set).
|
196
209
|
# @param [String] param_name the parameter name of API key auth
|
@@ -97,10 +97,6 @@ module XeroRuby::PayrollAu
|
|
97
97
|
invalid_properties.push('invalid value for "deduction_type_id", deduction_type_id cannot be nil.')
|
98
98
|
end
|
99
99
|
|
100
|
-
if @calculation_type.nil?
|
101
|
-
invalid_properties.push('invalid value for "calculation_type", calculation_type cannot be nil.')
|
102
|
-
end
|
103
|
-
|
104
100
|
invalid_properties
|
105
101
|
end
|
106
102
|
|
@@ -108,7 +104,6 @@ module XeroRuby::PayrollAu
|
|
108
104
|
# @return true if the model is valid
|
109
105
|
def valid?
|
110
106
|
return false if @deduction_type_id.nil?
|
111
|
-
return false if @calculation_type.nil?
|
112
107
|
true
|
113
108
|
end
|
114
109
|
|
data/lib/xero-ruby/version.rb
CHANGED
@@ -7,9 +7,9 @@ Contact: api@xero.com
|
|
7
7
|
Generated by: https://openapi-generator.tech
|
8
8
|
OpenAPI Generator version: 4.3.1
|
9
9
|
|
10
|
-
The version of the XeroOpenAPI document: 2.10.
|
10
|
+
The version of the XeroOpenAPI document: 2.10.5
|
11
11
|
=end
|
12
12
|
|
13
13
|
module XeroRuby
|
14
|
-
VERSION = '2.9.
|
14
|
+
VERSION = '2.9.1'
|
15
15
|
end
|
data/spec/api_client_spec.rb
CHANGED
@@ -371,4 +371,85 @@ describe XeroRuby::ApiClient do
|
|
371
371
|
expect(api_client.sanitize_filename('.\sun.gif')).to eq('sun.gif')
|
372
372
|
end
|
373
373
|
end
|
374
|
+
|
375
|
+
describe 'thread safety in the XeroClient' do
|
376
|
+
let(:creds) {{
|
377
|
+
client_id: 'abc',
|
378
|
+
client_secret: '123',
|
379
|
+
redirect_uri: 'https://mydomain.com/callback',
|
380
|
+
scopes: 'openid profile email accounting.transactions'
|
381
|
+
}}
|
382
|
+
let(:api_client_1) {XeroRuby::ApiClient.new(credentials: creds)}
|
383
|
+
let(:api_client_2) {XeroRuby::ApiClient.new(credentials: creds)}
|
384
|
+
let(:api_client_3) {XeroRuby::ApiClient.new(credentials: creds)}
|
385
|
+
|
386
|
+
let(:tkn_set_1){{id_token: "abc.123.1", access_token: "xxx.yyy.zzz.111"}}
|
387
|
+
let(:tkn_set_2){{id_token: "efg.456.2", access_token: "xxx.yyy.zzz.222"}}
|
388
|
+
|
389
|
+
describe 'when configuration is changed, other instantiations of the client are not affected' do
|
390
|
+
it 'applies to #set_access_token' do
|
391
|
+
expect(api_client_1.access_token).to eq(nil)
|
392
|
+
expect(api_client_2.access_token).to eq(nil)
|
393
|
+
expect(api_client_3.access_token).to eq(nil)
|
394
|
+
|
395
|
+
api_client_1.set_access_token("ACCESS_TOKEN_1")
|
396
|
+
expect(api_client_1.access_token).to eq("ACCESS_TOKEN_1")
|
397
|
+
expect(api_client_2.access_token).to eq(nil)
|
398
|
+
expect(api_client_3.access_token).to eq(nil)
|
399
|
+
|
400
|
+
api_client_2.set_access_token("ACCESS_TOKEN_2")
|
401
|
+
expect(api_client_1.access_token).to eq("ACCESS_TOKEN_1")
|
402
|
+
expect(api_client_2.access_token).to eq("ACCESS_TOKEN_2")
|
403
|
+
expect(api_client_3.access_token).to eq(nil)
|
404
|
+
|
405
|
+
api_client_3.set_access_token("ACCESS_TOKEN_3")
|
406
|
+
expect(api_client_1.access_token).to eq("ACCESS_TOKEN_1")
|
407
|
+
expect(api_client_2.access_token).to eq("ACCESS_TOKEN_2")
|
408
|
+
expect(api_client_3.access_token).to eq("ACCESS_TOKEN_3")
|
409
|
+
end
|
410
|
+
|
411
|
+
it 'applies to #set_id_token' do
|
412
|
+
expect(api_client_1.id_token).to eq(nil)
|
413
|
+
expect(api_client_2.id_token).to eq(nil)
|
414
|
+
|
415
|
+
api_client_1.set_id_token("id_token_1")
|
416
|
+
expect(api_client_1.id_token).to eq("id_token_1")
|
417
|
+
expect(api_client_2.id_token).to eq(nil)
|
418
|
+
|
419
|
+
api_client_2.set_id_token("id_token_2")
|
420
|
+
expect(api_client_1.id_token).to eq("id_token_1")
|
421
|
+
expect(api_client_2.id_token).to eq("id_token_2")
|
422
|
+
end
|
423
|
+
|
424
|
+
it 'applies to #set_token_set' do
|
425
|
+
expect(api_client_1.token_set).to eq(nil)
|
426
|
+
expect(api_client_2.token_set).to eq(nil)
|
427
|
+
|
428
|
+
api_client_1.set_token_set(tkn_set_1)
|
429
|
+
expect(api_client_1.token_set).to eq(tkn_set_1)
|
430
|
+
expect(api_client_2.token_set).to eq(nil)
|
431
|
+
|
432
|
+
api_client_2.set_token_set(tkn_set_2)
|
433
|
+
expect(api_client_1.token_set).to eq(tkn_set_1)
|
434
|
+
expect(api_client_2.token_set).to eq(tkn_set_2)
|
435
|
+
end
|
436
|
+
|
437
|
+
it 'applies to #base_url' do
|
438
|
+
expect(api_client_1.config.base_url).to eq(nil)
|
439
|
+
expect(api_client_2.config.base_url).to eq(nil)
|
440
|
+
|
441
|
+
api_client_1.accounting_api
|
442
|
+
expect(api_client_1.config.base_url).to eq(api_client_1.config.accounting_url)
|
443
|
+
expect(api_client_2.config.base_url).to eq(nil)
|
444
|
+
|
445
|
+
api_client_2.files_api
|
446
|
+
expect(api_client_1.config.base_url).to eq(api_client_1.config.accounting_url)
|
447
|
+
expect(api_client_2.config.base_url).to eq(api_client_1.config.files_url)
|
448
|
+
|
449
|
+
api_client_2.project_api
|
450
|
+
expect(api_client_1.config.base_url).to eq(api_client_1.config.accounting_url)
|
451
|
+
expect(api_client_2.config.base_url).to eq(api_client_1.config.project_url)
|
452
|
+
end
|
453
|
+
end
|
454
|
+
end
|
374
455
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xero-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.9.
|
4
|
+
version: 2.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xero API Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|