quickbooks-ruby 1.0.20 → 2.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: e850d8a1075bd9f614e7b05c1747d0d7b1fc9b193ef9230975729693131a43d2
4
- data.tar.gz: a2f7317e4bbfff9ee6c040eb1b19684981ff3dbde9cbe25f66cbbfd58dec9f1c
3
+ metadata.gz: cc115bc7b925447fecb75976b448e66406441c9fd56208e964ac34844fdcd37a
4
+ data.tar.gz: fd1ca0b526c14cdadda7a1e276c3dcedb9b8c68e7c76be0aa074df30c63e0382
5
5
  SHA512:
6
- metadata.gz: 8465d4443dd61ad7a71d4d33b34c4bfa8a0d2de787ed510363763a0a51447f6126e1c37cdef7bd70c8176ce388e5ea4bad78bb0193d197083eb072f5eac4c3da
7
- data.tar.gz: f652a956529f77766099c5e6c69ad4aceabc58e9277740bad2d4747b3991ca6a5ab73aa1017a4c4074c4ca1ecd3016ced27bdd0b7adc64293b27056f13067207
6
+ metadata.gz: ce9c6d1732ab2d6ffd2a9ea57c2dad7f091867bb9af828a8bb25140f79a7d739cccd4f59d9b45665ec500d50241e2fbd65c833f4f307d71ba84543cdaec71725
7
+ data.tar.gz: 9bd4d94b4270280b142d93c3ee9bff0b579d4009fc5afe9a217404d201df6e74ea6db8a7fc5b33e48f16e919ea6716bd77f5aeb4e362421db659d1d9f8ac0bf4
@@ -28,6 +28,8 @@ module Quickbooks
28
28
 
29
29
  xml_accessor :currency_ref, :from => 'CurrencyRef', :as => BaseReference
30
30
  xml_accessor :exchange_rate, :from => 'ExchangeRate', :as => BigDecimal, :to_xml => to_xml_big_decimal
31
+
32
+ xml_accessor :linked_transactions, :from => 'LinkedTxn', :as => [LinkedTransaction]
31
33
 
32
34
  reference_setters
33
35
 
@@ -22,7 +22,7 @@ module Quickbooks
22
22
  def disconnect
23
23
  connection = Faraday.new(headers: { 'Content-Type' => 'application/json' }) do |f|
24
24
  f.adapter(::Quickbooks.http_adapter)
25
- f.basic_auth(oauth.client.id, oauth.client.secret)
25
+ f.request(:authorization, :basic, oauth.client.id, oauth.client.secret)
26
26
  end
27
27
 
28
28
  url = "#{DISCONNECT_URL}?minorversion=#{Quickbooks.minorversion}"
@@ -49,12 +49,11 @@ module Quickbooks
49
49
  # [OAuth2] The default Faraday connection does not have gzip or multipart support.
50
50
  # We need to reset the existing connection and build a new one.
51
51
  def rebuild_connection!
52
- @oauth.client.connection = nil
53
- @oauth.client.connection.build do |builder|
54
- builder.use :gzip
55
- builder.request :multipart
56
- builder.request :url_encoded
57
- builder.adapter ::Quickbooks.http_adapter
52
+ @oauth.client.connection = Faraday.new do |f|
53
+ f.request :multipart
54
+ f.request :gzip
55
+ f.request :url_encoded
56
+ f.adapter ::Quickbooks.http_adapter
58
57
  end
59
58
  end
60
59
 
@@ -248,11 +247,7 @@ module Quickbooks
248
247
  headers['Accept-Encoding'] = HTTP_ACCEPT_ENCODING
249
248
  end
250
249
 
251
- log "------ QUICKBOOKS-RUBY REQUEST ------"
252
- log "METHOD = #{method}"
253
- log "RESOURCE = #{url}"
254
- log_request_body(body)
255
- log "REQUEST HEADERS = #{headers.inspect}"
250
+ log_request(method, url, body, headers)
256
251
 
257
252
  request_info = RequestInfo.new(url, headers, body, method)
258
253
  before_request.call(request_info) if before_request
@@ -273,12 +268,8 @@ module Quickbooks
273
268
  after_request.call(request_info, raw_response.body) if after_request
274
269
 
275
270
  response = Quickbooks::Service::Responses::OAuthHttpResponse.wrap(raw_response)
276
- log "------ QUICKBOOKS-RUBY RESPONSE ------"
277
- log "RESPONSE CODE = #{response.code}"
278
- log_response_body(response)
279
- if response.respond_to?(:headers)
280
- log "RESPONSE HEADERS = #{response.headers}"
281
- end
271
+ log_response(response)
272
+
282
273
  check_response(response, request: body)
283
274
  end
284
275
 
@@ -354,28 +345,29 @@ module Quickbooks
354
345
  end
355
346
  end
356
347
 
357
- def log_response_body(response)
358
- log "RESPONSE BODY:"
359
- if is_json?
360
- log ">>>>#{response.plain_body.inspect}"
361
- elsif is_pdf?
362
- log("BODY is a PDF : not dumping")
363
- else
364
- log(log_xml(response.plain_body))
365
- end
348
+ def log_request(method, url, body, headers)
349
+ messages = []
350
+ messages << "------ QUICKBOOKS-RUBY REQUEST ------"
351
+ messages << "METHOD = #{method}"
352
+ messages << "RESOURCE = #{url}"
353
+ messages.concat(request_body_messages(body))
354
+ messages << "REQUEST HEADERS = #{headers.inspect}"
355
+
356
+ log_multiple(messages)
366
357
  end
367
358
 
368
- def log_request_body(body)
369
- log "REQUEST BODY:"
359
+ def request_body_messages(body)
360
+ messages = []
361
+ messages << "REQUEST BODY:"
370
362
  if is_json?
371
- log(body.inspect)
363
+ messages << body.inspect
372
364
  elsif is_pdf?
373
- log("BODY is a PDF : not dumping")
365
+ messages << "BODY is a PDF : not dumping"
374
366
  else
375
367
  #multipart request for uploads arrive here in a Hash with UploadIO vals
376
368
  if body.is_a?(Hash)
377
369
  body.each do |k,v|
378
- log('BODY PART:')
370
+ messages << 'BODY PART:'
379
371
  val_content = v.inspect
380
372
  if v.is_a?(UploadIO)
381
373
  if v.content_type == 'application/xml'
@@ -384,12 +376,37 @@ module Quickbooks
384
376
  end
385
377
  end
386
378
  end
387
- log("#{k}: #{val_content}")
379
+ messages << "#{k}: #{val_content}"
388
380
  end
389
381
  else
390
- log(log_xml(body))
382
+ messages << log_xml(body)
391
383
  end
392
384
  end
385
+ messages
386
+ end
387
+
388
+ def log_response(response)
389
+ messages = []
390
+ messages << "------ QUICKBOOKS-RUBY RESPONSE ------"
391
+ messages << "RESPONSE CODE = #{response.code}"
392
+ messages.concat(response_body_messages(response))
393
+ messages << "RESPONSE HEADERS = #{response.headers}" if response.respond_to?(:headers)
394
+
395
+ log_multiple(messages)
396
+ end
397
+
398
+ def response_body_messages(response)
399
+ messages = []
400
+ messages << "RESPONSE BODY:"
401
+ if is_json?
402
+ messages << ">>>>#{response.plain_body.inspect}"
403
+ elsif is_pdf?
404
+ messages << "BODY is a PDF : not dumping"
405
+ else
406
+ messages << log_xml(response.plain_body)
407
+ end
408
+
409
+ messages
393
410
  end
394
411
 
395
412
  def parse_and_raise_exception(options = {})
@@ -19,6 +19,12 @@ module Quickbooks
19
19
  end
20
20
  end
21
21
 
22
+ def pdf(payment)
23
+ url = "#{url_for_resource(model::REST_RESOURCE)}/#{payment.id}/pdf"
24
+ response = do_http_raw_get(url, {}, {'Accept' => 'application/pdf'})
25
+ response.plain_body
26
+ end
27
+
22
28
  private
23
29
 
24
30
  def model
@@ -5,10 +5,22 @@ module Quickbooks
5
5
  ::Quickbooks.log(msg)
6
6
  end
7
7
 
8
+ def log_multiple(messages)
9
+ if condense_logs?
10
+ log(messages.join("\n"))
11
+ else
12
+ messages.each(&method(:log))
13
+ end
14
+ end
15
+
8
16
  def log?
9
17
  ::Quickbooks.log?
10
18
  end
11
19
 
20
+ def condense_logs?
21
+ ::Quickbooks.condense_logs?
22
+ end
23
+
12
24
  def log_xml(str)
13
25
  if ::Quickbooks.log_xml_pretty_print? && !(str and str.empty?)
14
26
  Nokogiri::XML(str).to_xml
@@ -1,5 +1,5 @@
1
1
  module Quickbooks
2
2
 
3
- VERSION = "1.0.20"
3
+ VERSION = "2.0"
4
4
 
5
5
  end
@@ -8,12 +8,13 @@ require 'date'
8
8
  require 'forwardable'
9
9
  require 'oauth2'
10
10
  require 'net/http/post/multipart'
11
+ require 'faraday/multipart'
12
+ require 'faraday/gzip'
11
13
  require 'quickbooks/util/collection'
12
14
  require 'quickbooks/util/logging'
13
15
  require 'quickbooks/util/http_encoding_helper'
14
16
  require 'quickbooks/util/name_entity'
15
17
  require 'quickbooks/util/query_builder'
16
- require 'quickbooks/faraday/middleware/gzip'
17
18
 
18
19
  #== OAuth Responses
19
20
  require 'quickbooks/service/responses/oauth_http_response'
@@ -187,9 +188,6 @@ require 'quickbooks/service/transfer'
187
188
  require 'quickbooks/service/change_data_capture'
188
189
  require 'quickbooks/service/refund_receipt_change'
189
190
 
190
- # Register Faraday Middleware
191
- Faraday::Middleware.register_middleware :gzip => lambda { Gzip }
192
-
193
191
  module Quickbooks
194
192
  @@sandbox_mode = false
195
193
  @@logger = nil
@@ -230,13 +228,18 @@ module Quickbooks
230
228
  end
231
229
 
232
230
  # set logging on or off
233
- attr_writer :log, :log_xml_pretty_print
231
+ attr_writer :log, :log_xml_pretty_print, :condense_logs
234
232
 
235
233
  # Returns whether to log. Defaults to 'false'.
236
234
  def log?
237
235
  @log ||= false
238
236
  end
239
237
 
238
+ # Returns whether to limit log lines
239
+ def condense_logs?
240
+ @condense_logs ||= false
241
+ end
242
+
240
243
  # pretty printing the xml in the logs is "on" by default
241
244
  def log_xml_pretty_print?
242
245
  defined?(@log_xml_pretty_print) ? @log_xml_pretty_print : true
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quickbooks-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.20
4
+ version: '2.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Caughlan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-17 00:00:00.000000000 Z
11
+ date: 2022-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth2
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - "<"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.4'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - "<"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.4'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: roxml
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,42 @@ dependencies:
100
100
  requirements:
101
101
  - - "<"
102
102
  - !ruby/object:Gem::Version
103
- version: '2.0'
103
+ version: '3.0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "<"
109
109
  - !ruby/object:Gem::Version
110
- version: '2.0'
110
+ version: '3.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: faraday-multipart
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: faraday-gzip
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.1'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.1'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: rake
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -199,7 +227,6 @@ extensions: []
199
227
  extra_rdoc_files: []
200
228
  files:
201
229
  - lib/quickbooks-ruby.rb
202
- - lib/quickbooks/faraday/middleware/gzip.rb
203
230
  - lib/quickbooks/model/access_token_response.rb
204
231
  - lib/quickbooks/model/account.rb
205
232
  - lib/quickbooks/model/account_based_expense_line_detail.rb
@@ -383,7 +410,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
383
410
  requirements:
384
411
  - - ">="
385
412
  - !ruby/object:Gem::Version
386
- version: '0'
413
+ version: '2.6'
387
414
  required_rubygems_version: !ruby/object:Gem::Requirement
388
415
  requirements:
389
416
  - - ">="
@@ -1,74 +0,0 @@
1
- # https://github.com/lostisland/faraday_middleware/blob/master/lib/faraday_middleware/gzip.rb
2
-
3
- require 'faraday'
4
-
5
- # Middleware to automatically decompress response bodies. If the
6
- # "Accept-Encoding" header wasn't set in the request, this sets it to
7
- # "gzip,deflate" and appropriately handles the compressed response from the
8
- # server. This resembles what Ruby 1.9+ does internally in Net::HTTP#get.
9
- #
10
- # This middleware is NOT necessary when these adapters are used:
11
- # - net_http on Ruby 1.9+
12
- # - net_http_persistent on Ruby 2.0+
13
- # - em_http
14
- class Gzip < Faraday::Middleware
15
- dependency 'zlib'
16
-
17
- ACCEPT_ENCODING = 'Accept-Encoding'.freeze
18
- CONTENT_ENCODING = 'Content-Encoding'.freeze
19
- CONTENT_LENGTH = 'Content-Length'.freeze
20
- SUPPORTED_ENCODINGS = 'gzip,deflate,br'.freeze
21
- RUBY_ENCODING = '1.9'.respond_to?(:force_encoding)
22
-
23
- def call(env)
24
- env[:request_headers][ACCEPT_ENCODING] ||= SUPPORTED_ENCODINGS
25
- @app.call(env).on_complete do |response_env|
26
- break if response_env[:response_headers].nil?
27
-
28
- case response_env[:response_headers][CONTENT_ENCODING]
29
- when 'gzip'
30
- reset_body(response_env, &method(:uncompress_gzip))
31
- when 'deflate'
32
- reset_body(response_env, &method(:inflate))
33
- when 'br'
34
- reset_body(response_env, &method(:brotli_inflate))
35
- end
36
- end
37
- end
38
-
39
- def reset_body(env)
40
- env[:body] = yield(env[:body])
41
- env[:response_headers].delete(CONTENT_ENCODING)
42
- env[:response_headers][CONTENT_LENGTH] = env[:body].length
43
- end
44
-
45
- def uncompress_gzip(body)
46
- io = StringIO.new(body)
47
- gzip_reader = if RUBY_ENCODING
48
- Zlib::GzipReader.new(io, :encoding => 'ASCII-8BIT')
49
- else
50
- Zlib::GzipReader.new(io)
51
- end
52
- gzip_reader.read
53
- end
54
-
55
- def inflate(body)
56
- # Inflate as a DEFLATE (RFC 1950+RFC 1951) stream
57
- Zlib::Inflate.inflate(body)
58
- rescue Zlib::DataError
59
- # Fall back to inflating as a "raw" deflate stream which
60
- # Microsoft servers return
61
- inflate = Zlib::Inflate.new(-Zlib::MAX_WBITS)
62
- begin
63
- inflate.inflate(body)
64
- ensure
65
- inflate.close
66
- end
67
- end
68
-
69
- def brotli_inflate(body)
70
- self.class.dependency 'brotli'
71
-
72
- Brotli.inflate(body)
73
- end
74
- end