octobat 2.0.15 → 2.0.20

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: 398fb5a2fdfffa2fbf3070966ec6c80f1f90d857
4
- data.tar.gz: 3313c4fc5d1795c294e32734413e078dc3da037b
2
+ SHA256:
3
+ metadata.gz: 46289335eaf2e2d1e07a0f70bd8c7bb94c9247d3e783cc5831d71986bb60bc1c
4
+ data.tar.gz: f0f90eed29eefe39d4a5a8466ea96506621feb46b180b388f1840143b3f38251
5
5
  SHA512:
6
- metadata.gz: adcf04a1cc3be3a330eae051dc5f1b5c4704989d35bc99ffb3fc7439d106acd2e1de136708416c5499fd5839f724dec8ed6675cc0cb0f3721dd1e6ee9d2b373f
7
- data.tar.gz: 9276bda438fcf9e9e1505fdaec5e9cddc8cfa2896920872b1b228d5ae697834952aa8f279419e8a30e5eb599f2384ae87b462c753e3bf04d7e2c00bf567e1eaf
6
+ metadata.gz: 9256636dcec153772c0f1c61035aa12e1f73f3a3c8f9649d2761144aa778a4b27fc99b8f9faf21ef008ba3f88bdc07da656a8edac93ddd1066bce1a049f2ec23
7
+ data.tar.gz: b50267b05a5a0245bab7c3b57514bf9a5f1da4f491fed0148cf1b497f00d89b7e35f011645fad6b2ead7a6e537d417afa201de881273df0d1f4527639bb4591a
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- octobat (2.0.15)
4
+ octobat (2.0.20)
5
5
  rest-client (>= 1.4, < 4.0)
6
6
 
7
7
  GEM
@@ -9,19 +9,21 @@ GEM
9
9
  specs:
10
10
  domain_name (0.5.20190701)
11
11
  unf (>= 0.0.5, < 1.0.0)
12
+ http-accept (1.7.0)
12
13
  http-cookie (1.0.3)
13
14
  domain_name (~> 0.5)
14
- mime-types (3.2.2)
15
+ mime-types (3.3.1)
15
16
  mime-types-data (~> 3.2015)
16
- mime-types-data (3.2019.0331)
17
+ mime-types-data (3.2020.0512)
17
18
  netrc (0.11.0)
18
- rest-client (2.0.2)
19
+ rest-client (2.1.0)
20
+ http-accept (>= 1.7.0, < 2.0)
19
21
  http-cookie (>= 1.0.2, < 2.0)
20
22
  mime-types (>= 1.16, < 4.0)
21
23
  netrc (~> 0.8)
22
24
  unf (0.1.4)
23
25
  unf_ext
24
- unf_ext (0.0.7.6)
26
+ unf_ext (0.0.7.7)
25
27
 
26
28
  PLATFORMS
27
29
  ruby
@@ -30,4 +32,4 @@ DEPENDENCIES
30
32
  octobat!
31
33
 
32
34
  BUNDLED WITH
33
- 1.14.6
35
+ 1.17.3
@@ -1,3 +1,28 @@
1
+ === 2.0.20 2020-10-05
2
+ * 1 major enhancements:
3
+ * Add support for Beanie::Session object
4
+
5
+
6
+ === 2.0.19 2020-05-28
7
+ * 2 major enhancements:
8
+ * Add { opts } param for all nested methods, so you can include headers such as the Connected Octobat Account ID in subrequests
9
+ * Add support for CreditNote#cancel endpoint
10
+
11
+
12
+ === 2.0.18 2020-05-25
13
+ * 3 major enhancements:
14
+ * Add support for multipart encoder (file upload)
15
+ * Add support for File API endpoints
16
+ * Add support for Reporting API endpoints
17
+
18
+ === 2.0.17 2020-04-27
19
+ * 1 minor enhancement:
20
+ * Update Order API endpoints
21
+
22
+ === 2.0.16 2020-03-20
23
+ * 1 major enhancement:
24
+ * Add TaxId resource
25
+
1
26
  === 2.0.15 2019-09-10
2
27
  * 1 minor enhancement:
3
28
  * Add Setup Intent statuses support for Orders
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.15
1
+ 2.0.20
@@ -17,6 +17,7 @@ require 'octobat/api_operations/delete'
17
17
  require 'octobat/api_operations/list'
18
18
 
19
19
  # Resources
20
+ require 'octobat/multipart_encoder'
20
21
  require 'octobat/util'
21
22
  require 'octobat/octobat_object'
22
23
  require 'octobat/api_resource'
@@ -49,6 +50,13 @@ require 'octobat/tax_evidence_request'
49
50
  require 'octobat/document_email_template'
50
51
  require 'octobat/exports_setting'
51
52
  require 'octobat/emails_setting'
53
+ require 'octobat/tax_id'
54
+
55
+ require 'octobat/file_upload'
56
+ require 'octobat/file_link'
57
+ require 'octobat/beanie/session'
58
+ require 'octobat/reporting/report_type'
59
+ require 'octobat/reporting/report_run'
52
60
 
53
61
 
54
62
  # Errors
@@ -63,6 +71,7 @@ module Octobat
63
71
  #DEFAULT_CA_BUNDLE_PATH = File.dirname(__FILE__) + '/data/ca-certificates.crt'
64
72
  @api_base = 'https://apiv2.octobat.com'
65
73
  #@api_base = 'http://api.octobat.local:3052'
74
+ @uploads_base = "https://files.octobat.com"
66
75
 
67
76
  @max_network_retries = 0
68
77
  @max_network_retry_delay = 2
@@ -75,7 +84,7 @@ module Octobat
75
84
 
76
85
 
77
86
  class << self
78
- attr_accessor :api_key, :api_base, :verify_ssl_certs, :api_version
87
+ attr_accessor :api_key, :api_base, :verify_ssl_certs, :api_version, :uploads_base
79
88
  attr_reader :max_network_retry_delay, :initial_network_retry_delay
80
89
  end
81
90
 
@@ -0,0 +1,13 @@
1
+ module Octobat
2
+ module Beanie
3
+ class Session < APIResource
4
+ include Octobat::APIOperations::Create
5
+ extend Octobat::APIOperations::List
6
+
7
+ def self.url
8
+ '/beanie/sessions'
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -4,20 +4,21 @@ module Octobat
4
4
  include Octobat::APIOperations::Create
5
5
  include Octobat::APIOperations::Update
6
6
 
7
- def activate
8
- response, api_key = Octobat.request(:patch, activate_url, @api_key)
7
+ def activate(params = {}, opts = {})
8
+ response, api_key = Octobat.request(:patch, activate_url, @api_key, params, opts)
9
9
  refresh_from(response, api_key)
10
10
  end
11
11
 
12
- def unactivate
13
- response, api_key = Octobat.request(:patch, unactivate_url, @api_key)
12
+ def unactivate(params = {}, opts = {})
13
+ response, api_key = Octobat.request(:patch, unactivate_url, @api_key, params, opts)
14
14
  refresh_from(response, api_key)
15
15
  end
16
16
 
17
- def delete
18
- response, api_key = Octobat.request(:delete, url, @api_key)
17
+ def delete(params = {}, opts = {})
18
+ response, api_key = Octobat.request(:delete, url, @api_key, params, opts)
19
19
  refresh_from(response, api_key)
20
20
  end
21
+
21
22
 
22
23
  private
23
24
 
@@ -12,30 +12,41 @@ module Octobat
12
12
 
13
13
  instance = self.new(nil, opts)
14
14
 
15
- response, api_key = Octobat.request(:post, url + '/pdf_export', api_key, params)
15
+ response, api_key = Octobat.request(:post, url + '/pdf_export', api_key, params, headers)
16
16
  return true
17
17
  end
18
18
 
19
19
 
20
- def send_by_email(email_data = {})
21
- response, api_key = Octobat.request(:post, send_url, @api_key, email_data)
20
+ def send_by_email(params = {}, opts = {})
21
+ response, api_key = Octobat.request(:post, send_url, @api_key, params, opts)
22
22
  refresh_from(response, api_key)
23
23
  end
24
24
 
25
- def confirm(confirmation_data = {})
26
- response, api_key = Octobat.request(:patch, confirm_url, @api_key, confirmation_data)
25
+ def confirm(params = {}, opts = {})
26
+ response, api_key = Octobat.request(:patch, confirm_url, @api_key, params, opts)
27
27
  refresh_from(response, api_key)
28
28
  end
29
+
30
+
31
+ def cancel(params = {}, opts = {})
32
+ response, api_key = Octobat.request(:patch, cancel_url, @api_key, params, opts)
33
+ refresh_from(response, api_key)
34
+ end
35
+
36
+
29
37
 
30
- def items(params = {})
31
- Item.list(params.merge({credit_note: id }), @api_key)
38
+ def items(params = {}, opts = {})
39
+ Item.list(params.merge({ credit_note: id }), {api_key: @api_key}.merge(opts))
32
40
  end
33
41
 
34
- def transactions(params = {})
35
- Transaction.list(params.merge(credit_note: id), @api_key)
42
+ def transactions(params = {}, opts = {})
43
+ Transaction.list(params.merge(credit_note: id), {api_key: @api_key}.merge(opts))
36
44
  end
37
45
 
38
46
  private
47
+ def cancel_url
48
+ url + '/cancel'
49
+ end
39
50
 
40
51
  def send_url
41
52
  url + '/send'
@@ -4,8 +4,8 @@ module Octobat
4
4
  include Octobat::APIOperations::Create
5
5
  include Octobat::APIOperations::Update
6
6
 
7
- def set_to_default
8
- response, api_key = Octobat.request(:patch, set_to_default_url, @api_key)
7
+ def set_to_default(params = {}, opts = {})
8
+ response, api_key = Octobat.request(:patch, set_to_default_url, @api_key, params, opts)
9
9
  refresh_from(response, api_key)
10
10
  end
11
11
 
@@ -5,16 +5,16 @@ module Octobat
5
5
  include Octobat::APIOperations::Update
6
6
  include Octobat::APIOperations::Delete
7
7
 
8
- def invoices(params = {})
9
- Invoice.all(params.merge({ :customer => id }), @api_key)
8
+ def invoices(params = {}, opts = {})
9
+ Invoice.list(params.merge({ :customer => id }), {api_key: @api_key}.merge(opts))
10
10
  end
11
11
 
12
- def credit_notes(params = {})
13
- CreditNote.all(params.merge({ :customer => id }), @api_key)
12
+ def credit_notes(params = {}, opts = {})
13
+ CreditNote.list(params.merge({ :customer => id }), {api_key: @api_key}.merge(opts))
14
14
  end
15
15
 
16
- def payment_sources(params = {})
17
- PaymentSource.all(params.merge({ :customer => id }), @api_key)
16
+ def payment_sources(params = {}, opts = {})
17
+ PaymentSource.list(params.merge({ :customer => id }), {api_key: @api_key}.merge(opts))
18
18
  end
19
19
  end
20
20
  end
@@ -1,7 +1,6 @@
1
1
  module Octobat
2
2
  class Document < APIResource
3
3
 
4
-
5
4
  def self.csv_export(params = {}, opts={})
6
5
  api_key, headers = Util.parse_opts(opts)
7
6
  api_key ||= @api_key
@@ -9,7 +8,7 @@ module Octobat
9
8
 
10
9
  instance = self.new(nil, opts)
11
10
 
12
- response, api_key = Octobat.request(:post, url + '/csv_export', api_key, params)
11
+ response, api_key = Octobat.request(:post, url + '/csv_export', api_key, params, opts)
13
12
  return true
14
13
  end
15
14
 
@@ -10,7 +10,7 @@ module Octobat
10
10
 
11
11
  instance = self.new(nil, opts)
12
12
 
13
- response, api_key = Octobat.request(:get, url + '/default', api_key, params)
13
+ response, api_key = Octobat.request(:get, url + '/default', api_key, params, opts)
14
14
  instance.refresh_from(response, api_key)
15
15
  instance
16
16
  end
@@ -10,7 +10,7 @@ module Octobat
10
10
 
11
11
  instance = self.new(nil, opts)
12
12
 
13
- response, api_key = Octobat.request(:get, url + '/default', api_key, params)
13
+ response, api_key = Octobat.request(:get, url + '/default', api_key, params, opts)
14
14
  instance.refresh_from(response, api_key)
15
15
  instance
16
16
  end
@@ -4,23 +4,23 @@ module Octobat
4
4
  include Octobat::APIOperations::Create
5
5
  include Octobat::APIOperations::Update
6
6
 
7
- def duplicate(params = {})
8
- response, api_key = Octobat.request(:post, duplicate_url, @api_key, params)
7
+ def duplicate(params = {}, opts = {})
8
+ response, api_key = Octobat.request(:post, duplicate_url, @api_key, params, opts)
9
9
  refresh_from(response, api_key)
10
10
  end
11
11
 
12
- def activate
13
- response, api_key = Octobat.request(:patch, activate_url, @api_key)
12
+ def activate(params = {}, opts = {})
13
+ response, api_key = Octobat.request(:patch, activate_url, @api_key, params, opts)
14
14
  refresh_from(response, api_key)
15
15
  end
16
16
 
17
- def delete
18
- response, api_key = Octobat.request(:delete, url, @api_key)
17
+ def delete(params = {}, opts = {})
18
+ response, api_key = Octobat.request(:delete, url, @api_key, params, opts)
19
19
  refresh_from(response, api_key)
20
20
  end
21
21
 
22
- def preview(params = {})
23
- response, api_key = Octobat.request(:get, preview_url, @api_key, params)
22
+ def preview(params = {}, opts = {})
23
+ response, api_key = Octobat.request(:get, preview_url, @api_key, params, opts)
24
24
  refresh_from(response, api_key)
25
25
  end
26
26
 
@@ -10,7 +10,7 @@ module Octobat
10
10
 
11
11
  instance = self.new(nil, opts)
12
12
 
13
- response, api_key = Octobat.request(:get, url + '/default', api_key, params)
13
+ response, api_key = Octobat.request(:get, url + '/default', api_key, params, opts)
14
14
  instance.refresh_from(response, api_key)
15
15
  instance
16
16
  end
@@ -10,7 +10,7 @@ module Octobat
10
10
 
11
11
  instance = self.new(nil, opts)
12
12
 
13
- response, api_key = Octobat.request(:get, url + '/default', api_key, params)
13
+ response, api_key = Octobat.request(:get, url + '/default', api_key, params, opts)
14
14
  instance.refresh_from(response, api_key)
15
15
  instance
16
16
  end
@@ -0,0 +1,41 @@
1
+ module Octobat
2
+ class FileLink < APIResource
3
+ include Octobat::APIOperations::Create
4
+ extend Octobat::APIOperations::List
5
+
6
+ def self.create(params = {}, opts = {})
7
+ api_key, headers = Util.parse_opts(opts)
8
+ response, api_key = Octobat.request(:post, self.url, api_key, params, headers, Octobat.uploads_base)
9
+ Util.convert_to_octobat_object(response, api_key)
10
+ end
11
+
12
+ def refresh
13
+ response, api_key = Octobat.request(:get, url, @api_key, @retrieve_options, @headers, Octobat.uploads_base)
14
+ refresh_from(response, api_key)
15
+ end
16
+
17
+ def self.list(filters={}, opts={})
18
+ set_parent_resource(filters)
19
+ api_key, headers = Util.parse_opts(opts)
20
+
21
+ api_key ||= @api_key
22
+
23
+ f = filters.select{|request_filter| !@parent_resource.has_key?(request_filter)}
24
+
25
+ response, api_key = Octobat.request(:get, url, api_key, f, headers, Octobat.uploads_base)
26
+ obj = ListObject.construct_from(response, api_key)
27
+
28
+ obj.filters = filters.dup
29
+ obj.cursors[:ending_before] = obj.filters.delete(:ending_before)
30
+ obj.cursors[:starting_after] = obj.filters.delete(:starting_after)
31
+
32
+ obj.filters.delete(:expand)
33
+ obj.parent_resource = @parent_resource
34
+
35
+ obj
36
+ end
37
+
38
+ self.singleton_class.send(:alias_method, :all, :list)
39
+
40
+ end
41
+ end
@@ -0,0 +1,59 @@
1
+ module Octobat
2
+ class FileUpload < APIResource
3
+ include Octobat::APIOperations::Create
4
+ extend Octobat::APIOperations::List
5
+
6
+ def self.url
7
+ "/files"
8
+ end
9
+
10
+
11
+ def self.create(params = {}, opts = {})
12
+ if params[:attachment] && !params[:attachment].is_a?(String)
13
+ unless params[:attachment].respond_to?(:read)
14
+ raise ArgumentError, "attachment must respond to `#read`"
15
+ end
16
+ end
17
+
18
+ api_key, headers = Util.parse_opts(opts)
19
+ headers = headers.merge(content_type: MultipartEncoder::MULTIPART_FORM_DATA)
20
+
21
+ response, api_key = Octobat.request(:post, self.url, api_key, params, headers, Octobat.uploads_base)
22
+ Util.convert_to_octobat_object(response, api_key)
23
+
24
+ end
25
+
26
+ def refresh
27
+ response, api_key = Octobat.request(:get, url, @api_key, @retrieve_options, @headers, Octobat.uploads_base)
28
+ refresh_from(response, api_key)
29
+ end
30
+
31
+
32
+ def self.list(filters={}, opts={})
33
+ set_parent_resource(filters)
34
+ api_key, headers = Util.parse_opts(opts)
35
+
36
+ api_key ||= @api_key
37
+
38
+ f = filters.select{|request_filter| !@parent_resource.has_key?(request_filter)}
39
+
40
+ response, api_key = Octobat.request(:get, url, api_key, f, headers, Octobat.uploads_base)
41
+ obj = ListObject.construct_from(response, api_key)
42
+
43
+ obj.filters = filters.dup
44
+ obj.cursors[:ending_before] = obj.filters.delete(:ending_before)
45
+ obj.cursors[:starting_after] = obj.filters.delete(:starting_after)
46
+
47
+ obj.filters.delete(:expand)
48
+ obj.parent_resource = @parent_resource
49
+
50
+ obj
51
+ end
52
+
53
+ self.singleton_class.send(:alias_method, :all, :list)
54
+
55
+
56
+
57
+
58
+ end
59
+ end
@@ -12,7 +12,7 @@ module Octobat
12
12
 
13
13
  instance = self.new(nil, opts)
14
14
 
15
- response, api_key = Octobat.request(:post, url + '/pdf_export', api_key, params)
15
+ response, api_key = Octobat.request(:post, url + '/pdf_export', api_key, params, opts)
16
16
  return true
17
17
  end
18
18
 
@@ -23,42 +23,42 @@ module Octobat
23
23
 
24
24
  instance = self.new(nil, opts)
25
25
 
26
- response, api_key = Octobat.request(:post, url + '/csv_export', api_key, params)
26
+ response, api_key = Octobat.request(:post, url + '/csv_export', api_key, params, opts)
27
27
  return true
28
28
  end
29
29
 
30
30
 
31
- def send_by_email(email_data = {})
32
- response, api_key = Octobat.request(:post, send_url, @api_key, email_data)
31
+ def send_by_email(params = {}, opts = {})
32
+ response, api_key = Octobat.request(:post, send_url, @api_key, params, opts)
33
33
  refresh_from(response, api_key)
34
34
  end
35
35
 
36
- def confirm(confirmation_data = {})
37
- response, api_key = Octobat.request(:patch, confirm_url, @api_key, confirmation_data)
36
+ def confirm(params = {}, opts = {})
37
+ response, api_key = Octobat.request(:patch, confirm_url, @api_key, params, opts)
38
38
  refresh_from(response, api_key)
39
39
  end
40
40
 
41
- def cancel
42
- response, api_key = Octobat.request(:patch, cancel_url, @api_key)
41
+ def cancel(params = {}, opts = {})
42
+ response, api_key = Octobat.request(:patch, cancel_url, @api_key, params, opts)
43
43
  refresh_from(response, api_key)
44
44
  end
45
45
 
46
- def cancel_and_replace
47
- response, api_key = Octobat.request(:patch, cancel_and_replace_url, @api_key)
46
+ def cancel_and_replace(params = {}, opts = {})
47
+ response, api_key = Octobat.request(:patch, cancel_and_replace_url, @api_key, params, opts)
48
48
  refresh_from(response, api_key)
49
49
  end
50
50
 
51
- def delete
52
- response, api_key = Octobat.request(:delete, url, @api_key)
51
+ def delete(params = {}, opts = {})
52
+ response, api_key = Octobat.request(:delete, url, @api_key, params, opts)
53
53
  refresh_from(response, api_key)
54
54
  end
55
55
 
56
- def items(params = {})
57
- Item.list(params.merge({ :invoice => id }), @api_key)
56
+ def items(params = {}, opts = {})
57
+ Item.list(params.merge({ :invoice => id }), {api_key: @api_key}.merge(opts))
58
58
  end
59
59
 
60
- def transactions(params = {})
61
- Transaction.list(params.merge(invoice: id), @api_key)
60
+ def transactions(params = {}, opts = {})
61
+ Transaction.list(params.merge(invoice: id), {api_key: @api_key}.merge(opts))
62
62
  end
63
63
 
64
64
 
@@ -4,8 +4,8 @@ module Octobat
4
4
  include Octobat::APIOperations::Create
5
5
  include Octobat::APIOperations::Update
6
6
 
7
- def set_to_default
8
- response, api_key = Octobat.request(:patch, set_to_default_url, @api_key)
7
+ def set_to_default(params = {}, opts = {})
8
+ response, api_key = Octobat.request(:patch, set_to_default_url, @api_key, params, opts)
9
9
  refresh_from(response, api_key)
10
10
  end
11
11
 
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "securerandom"
4
+ require "tempfile"
5
+
6
+ module Octobat
7
+ # Encodes parameters into a `multipart/form-data` payload as described by RFC
8
+ # 2388:
9
+ #
10
+ # https://tools.ietf.org/html/rfc2388
11
+ #
12
+ # This is most useful for transferring file-like objects.
13
+ #
14
+ # Parameters should be added with `#encode`. When ready, use `#body` to get
15
+ # the encoded result and `#content_type` to get the value that should be
16
+ # placed in the `Content-Type` header of a subsequent request (which includes
17
+ # a boundary value).
18
+ class MultipartEncoder
19
+ MULTIPART_FORM_DATA = "multipart/form-data"
20
+
21
+ # A shortcut for encoding a single set of parameters and finalizing a
22
+ # result.
23
+ #
24
+ # Returns an encoded body and the value that should be set in the content
25
+ # type header of a subsequent request.
26
+ def self.encode(params)
27
+ encoder = MultipartEncoder.new
28
+ encoder.encode(params)
29
+ encoder.close
30
+ [encoder.body, encoder.content_type]
31
+ end
32
+
33
+ # Gets the object's randomly generated boundary string.
34
+ attr_reader :boundary
35
+
36
+ # Initializes a new multipart encoder.
37
+ def initialize
38
+ # Kind of weird, but required by Rubocop because the unary plus operator
39
+ # is considered faster than `Octobat.new`.
40
+ @body = +""
41
+
42
+ # Chose the same number of random bytes that Go uses in its standard
43
+ # library implementation. Easily enough entropy to ensure that it won't
44
+ # be present in a file we're sending.
45
+ @boundary = SecureRandom.hex(30)
46
+
47
+ @closed = false
48
+ @first_field = true
49
+ end
50
+
51
+ # Gets the encoded body. `#close` must be called first.
52
+ def body
53
+ raise "object must be closed before getting body" unless @closed
54
+
55
+ @body
56
+ end
57
+
58
+ # Finalizes the object by writing the final boundary.
59
+ def close
60
+ raise "object already closed" if @closed
61
+
62
+ @body << "\r\n"
63
+ @body << "--#{@boundary}--"
64
+
65
+ @closed = true
66
+
67
+ nil
68
+ end
69
+
70
+ # Gets the value including boundary that should be put into a multipart
71
+ # request's `Content-Type`.
72
+ def content_type
73
+ "#{MULTIPART_FORM_DATA}; boundary=#{@boundary}"
74
+ end
75
+
76
+ # Encodes a set of parameters to the body.
77
+ #
78
+ # Note that parameters are expected to be a hash, but a "flat" hash such
79
+ # that complex substructures like hashes and arrays have already been
80
+ # appropriately Octobat-encoded. Pass a complex structure through
81
+ # `Util.flatten_params` first before handing it off to this method.
82
+ def encode(params)
83
+ raise "no more parameters can be written to closed object" if @closed
84
+
85
+ params.each do |name, val|
86
+ if val.is_a?(::File) || val.is_a?(::Tempfile)
87
+ write_field(name, val.read, filename: ::File.basename(val.path))
88
+ elsif val.respond_to?(:read)
89
+ write_field(name, val.read, filename: "blob")
90
+ else
91
+ write_field(name, val, filename: nil)
92
+ end
93
+ end
94
+
95
+ nil
96
+ end
97
+
98
+ #
99
+ # private
100
+ #
101
+
102
+ # Escapes double quotes so that the given value can be used in a
103
+ # double-quoted string and replaces any linebreak characters with spaces.
104
+ private def escape(str)
105
+ str.gsub('"', "%22").tr("\n", " ").tr("\r", " ")
106
+ end
107
+
108
+ private def write_field(name, data, filename:)
109
+ if !@first_field
110
+ @body << "\r\n"
111
+ else
112
+ @first_field = false
113
+ end
114
+
115
+ @body << "--#{@boundary}\r\n"
116
+
117
+ if filename
118
+ @body << %(Content-Disposition: form-data) +
119
+ %(; name="#{escape(name.to_s)}") +
120
+ %(; filename="#{escape(filename)}"\r\n)
121
+ @body << %(Content-Type: application/octet-stream\r\n)
122
+ else
123
+ @body << %(Content-Disposition: form-data) +
124
+ %(; name="#{escape(name.to_s)}"\r\n)
125
+ end
126
+
127
+ @body << "\r\n"
128
+ @body << data.to_s
129
+ end
130
+ end
131
+ end
@@ -1,35 +1,17 @@
1
1
  module Octobat
2
2
  class Order < APIResource
3
3
  extend Octobat::APIOperations::List
4
+ include Octobat::APIOperations::Update
4
5
 
5
- def expire
6
- response, api_key = Octobat.request(:patch, expire_url, @api_key)
6
+ def expire(params = {}, opts = {})
7
+ response, api_key = Octobat.request(:patch, expire_url, @api_key, params, opts)
7
8
  refresh_from(response, api_key)
8
9
  end
9
10
 
10
- def update_payment_intent_status(payment_intent_status_data = {})
11
- response, api_key = Octobat.request(:patch, update_payment_intent_status_url, @api_key, payment_intent_status_data)
12
- refresh_from(response, api_key)
13
- end
14
-
15
- def update_setup_intent_status(setup_intent_status_data = {})
16
- response, api_key = Octobat.request(:patch, update_setup_intent_status_url, @api_key, setup_intent_status_data)
17
- refresh_from(response, api_key)
18
- end
19
-
20
-
21
11
  private
22
12
  def expire_url
23
13
  url + '/expire'
24
14
  end
25
-
26
- def update_payment_intent_status_url
27
- url + '/payment_intent_status'
28
- end
29
-
30
- def update_setup_intent_status_url
31
- url + '/setup_intent_status'
32
- end
33
15
 
34
16
 
35
17
  end
@@ -2,8 +2,8 @@ module Octobat
2
2
  class Payout < APIResource
3
3
  extend Octobat::APIOperations::List
4
4
 
5
- def balance_transactions(params = {})
6
- BalanceTransaction.list(params.merge({ payout: id }), @api_key)
5
+ def balance_transactions(params = {}, opts = {})
6
+ BalanceTransaction.list(params.merge({ payout: id }), {api_key: @api_key}.merge(opts))
7
7
  end
8
8
 
9
9
  def self.csv_export(params = {}, opts={})
@@ -0,0 +1,12 @@
1
+ module Octobat
2
+ module Reporting
3
+ class ReportRun < APIResource
4
+ include Octobat::APIOperations::Create
5
+ extend Octobat::APIOperations::List
6
+
7
+ def self.url
8
+ '/reporting/report_runs'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Octobat
2
+ module Reporting
3
+ class ReportType < APIResource
4
+ extend Octobat::APIOperations::List
5
+
6
+ def self.url
7
+ '/reporting/report_types'
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -9,7 +9,7 @@ module Octobat
9
9
 
10
10
  instance = self.new(nil, opts)
11
11
 
12
- response, api_key = Octobat.request(:post, url + '/for_supplier', api_key, params)
12
+ response, api_key = Octobat.request(:post, url + '/for_supplier', api_key, params, opts)
13
13
  instance.refresh_from(response, api_key)
14
14
  instance
15
15
  end
@@ -0,0 +1,17 @@
1
+ module Octobat
2
+ class TaxId < APIResource
3
+ extend Octobat::APIOperations::List
4
+ include Octobat::APIOperations::Create
5
+ include Octobat::APIOperations::Update
6
+
7
+ def archive(params = {}, opts = {})
8
+ response, api_key = Octobat.request(:patch, archive_url, @api_key, params, opts)
9
+ refresh_from(response, api_key)
10
+ end
11
+
12
+ private
13
+ def archive_url
14
+ url + '/archive'
15
+ end
16
+ end
17
+ end
@@ -4,13 +4,13 @@ module Octobat
4
4
  include Octobat::APIOperations::Update
5
5
  include Octobat::APIOperations::Create
6
6
 
7
- def activate
8
- response, api_key = Octobat.request(:patch, activate_url, @api_key)
7
+ def activate(params = {}, opts = {})
8
+ response, api_key = Octobat.request(:patch, activate_url, @api_key, params, opts)
9
9
  refresh_from(response, api_key)
10
10
  end
11
11
 
12
- def unactivate
13
- response, api_key = Octobat.request(:patch, unactivate_url, @api_key)
12
+ def unactivate(params = {}, opts = {})
13
+ response, api_key = Octobat.request(:patch, unactivate_url, @api_key, params, opts)
14
14
  refresh_from(response, api_key)
15
15
  end
16
16
 
@@ -4,8 +4,8 @@ module Octobat
4
4
  include Octobat::APIOperations::Create
5
5
  include Octobat::APIOperations::Update
6
6
 
7
- def items(params = {})
8
- Item.list(params.merge({ :transaction => id }), @api_key)
7
+ def items(params = {}, opts = {})
8
+ Item.list(params.merge({ :transaction => id }), {api_key: @api_key}.merge(opts))
9
9
  end
10
10
 
11
11
  def self.csv_export(params = {}, opts={})
@@ -58,13 +58,19 @@ module Octobat
58
58
  'product' => Product,
59
59
  'proforma_invoice' => ProformaInvoice,
60
60
  'tax_region_setting' => TaxRegionSetting,
61
+ 'tax_id' => TaxId,
61
62
  'transaction' => Transaction,
62
63
  'tax_evidence' => TaxEvidence,
63
64
  'tax_evidence_request' => TaxEvidenceRequest,
64
65
  'document_email_template' => DocumentEmailTemplate,
65
66
  'exports_setting' => ExportsSetting,
66
67
  'document' => Document,
67
- 'emails_setting' => EmailsSetting
68
+ 'emails_setting' => EmailsSetting,
69
+ 'file' => FileUpload,
70
+ 'file_link' => FileLink,
71
+ 'beanie.session' => Beanie::Session,
72
+ 'reporting.report_type' => Reporting::ReportType,
73
+ 'reporting.report_run' => Reporting::ReportRun
68
74
  }
69
75
  end
70
76
 
@@ -1,3 +1,3 @@
1
1
  module Octobat
2
- VERSION = '2.0.15'
2
+ VERSION = '2.0.20'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octobat
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.15
4
+ version: 2.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gaultier Laperche
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-10 00:00:00.000000000 Z
11
+ date: 2020-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -61,6 +61,7 @@ files:
61
61
  - lib/octobat/api_operations/update.rb
62
62
  - lib/octobat/api_resource.rb
63
63
  - lib/octobat/balance_transaction.rb
64
+ - lib/octobat/beanie/session.rb
64
65
  - lib/octobat/certificate_blacklist.rb
65
66
  - lib/octobat/checkout.rb
66
67
  - lib/octobat/coupon.rb
@@ -79,10 +80,13 @@ files:
79
80
  - lib/octobat/errors/octobat_error.rb
80
81
  - lib/octobat/errors/octobat_lib_error.rb
81
82
  - lib/octobat/exports_setting.rb
83
+ - lib/octobat/file_link.rb
84
+ - lib/octobat/file_upload.rb
82
85
  - lib/octobat/invoice.rb
83
86
  - lib/octobat/invoice_numbering_sequence.rb
84
87
  - lib/octobat/item.rb
85
88
  - lib/octobat/list_object.rb
89
+ - lib/octobat/multipart_encoder.rb
86
90
  - lib/octobat/octobat_object.rb
87
91
  - lib/octobat/order.rb
88
92
  - lib/octobat/payment_recipient.rb
@@ -91,9 +95,12 @@ files:
91
95
  - lib/octobat/payout.rb
92
96
  - lib/octobat/product.rb
93
97
  - lib/octobat/proforma_invoice.rb
98
+ - lib/octobat/reporting/report_run.rb
99
+ - lib/octobat/reporting/report_type.rb
94
100
  - lib/octobat/singleton_api_resource.rb
95
101
  - lib/octobat/tax_evidence.rb
96
102
  - lib/octobat/tax_evidence_request.rb
103
+ - lib/octobat/tax_id.rb
97
104
  - lib/octobat/tax_region_setting.rb
98
105
  - lib/octobat/transaction.rb
99
106
  - lib/octobat/util.rb
@@ -119,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
126
  version: '0'
120
127
  requirements: []
121
128
  rubyforge_project:
122
- rubygems_version: 2.4.5
129
+ rubygems_version: 2.7.6.2
123
130
  signing_key:
124
131
  specification_version: 4
125
132
  summary: Ruby bindings for the Octobat API