pina 0.13.0 → 0.14.0

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
2
  SHA1:
3
- metadata.gz: 12e1b8434afd19e87694e2ddccea223d43718d22
4
- data.tar.gz: 54c5df65e806713cc4ca63e05438c1b5aa4e5030
3
+ metadata.gz: 457ff4607c434ec35f86694fee458ec1cbf7a3a4
4
+ data.tar.gz: 8fcac7850e11f3b7fbfb17e0cc1ccf4c6d50717d
5
5
  SHA512:
6
- metadata.gz: 5ab21f7557e14a9e6a09dfc5d85483f2394d815e73c63096998dce35c9fa31b373a5b8038ade5e3cabdf5af7bba8b8028128a3de182960303f9b63383dbbbb6f
7
- data.tar.gz: 3be306b670e6f25b815a0ac82d4d717ddb835d0494635f9903d9469c86b89f3904b24b00682916ad23c96a8ab08b84dc210ebd9ae89dfb97d3c15a7c35550117
6
+ metadata.gz: aa983a4ade13e4ae7292f204652aba67c6e414b517d6fefd30f531f323bedf2f8c0776604fb8fb9aa1e6b868e8c4c805544fe1a886a626ed1c5e0b087b8777cb
7
+ data.tar.gz: c241904cec297a365e0652714069f6975eb88d44d3ee34cf8aed6d8661aee928d7a6cc274bc784fd41a3356fd6a31d4c9b7f62bd83507a57b01f152c17afd160
data/.gitignore CHANGED
@@ -26,6 +26,9 @@ build/
26
26
  /vendor/bundle
27
27
  /lib/bundler/man/
28
28
 
29
+ ## Docker sync
30
+ .docker-sync/
31
+
29
32
  # for a library or gem, you might want to ignore these files since the code is
30
33
  # intended to run in multiple environments; otherwise, check them in:
31
34
  # Gemfile.lock
@@ -4,3 +4,5 @@ Documentation:
4
4
  Metrics/ClassLength:
5
5
  Max: 130
6
6
 
7
+ Metrics/LineLength:
8
+ Max: 120
@@ -1,7 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.3.1
4
- - 2.2.3
5
4
  env:
6
5
  - secure: TENANT=test
7
6
  before_install: gem install bundler -v 1.10.6
@@ -0,0 +1,13 @@
1
+ FROM uolcz/ruby:latest
2
+
3
+ ENV APPDIR /app
4
+ RUN mkdir $APPDIR
5
+ WORKDIR $APPDIR
6
+
7
+ ENV BUNDLE_JOBS=2 \
8
+ BUNDLE_PATH=/gems \
9
+ # do GEM_PATHS se musí přidat cesta z gem_storu
10
+ GEM_PATH=$GEM_PATH:/gems \
11
+ PATH=$PATH:/gems/bin
12
+
13
+ ADD . .
data/README.md CHANGED
@@ -25,15 +25,50 @@ Or install it yourself as:
25
25
 
26
26
  $ gem install pina
27
27
 
28
+ ## Docker dev setup
29
+ To open development environment in docker:
30
+ 1) install prerequisites
31
+ `gem install docker-sync`
32
+ 2) run
33
+ ```sh
34
+ docker volume create --name=gem_store_235
35
+ docker-sync start
36
+ docker-compose run web bash
37
+ ```
38
+
39
+ ## Fantozzi API coverage
40
+ | Resource | All | Find | Find_by | Where | Create | Update | Delete |
41
+ | ----------------------- | :---: | :---: | :-----: | :---: | :-----:| :----: | :----: |
42
+ | Contacts | o | o | o | o | o | o | - |
43
+ | MyBankAccount | o | o | - | o | o | o | - |
44
+ | PettyCashDisburstment | o | - | - | - | - | - | - |
45
+ | ProcessedDocument | o | o | - | o | - | - | o |
46
+ | Receivable | o | o | - | o | - | - | - |
47
+ | SalesInvoice | o | o | - | o | o | o | - |
48
+ | SalesOrder | o | o | - | o | - | - | - |
49
+ | StatProcessedDocument | o | o | - | o | - | - | - |
50
+ | UploadedDocument | o | o | - | o | o | o | - |
51
+ | UploadedDocumentPairing | - | - | - | - | o | - | - |
52
+
53
+ Resources not mentioned = resources not covered.
54
+
28
55
  ## Usage
29
56
 
30
57
  Before you start using Pina you have to configure it.
31
58
 
32
59
  ```ruby
33
60
  Pina.configure do |config|
34
- config.email = 'your_email@domain.com'
35
- config.tenant = 'your tenant database name'
36
- config.api_token = 'your secret token'
61
+ config.email = 'your_email@domain.com'
62
+ config.tenant = 'your tenant database name'
63
+ config.api_token = 'your secret token'
64
+ end
65
+ ```
66
+
67
+ Optionally, you can configure Pina to run against other than production instance of Fantozzi:
68
+ ```ruby
69
+ Pina.configure do |config|
70
+ config.api_host = 'localhost:3000'
71
+ config.use_ssl = true | false # defaults to true
37
72
  end
38
73
  ```
39
74
 
@@ -156,33 +191,11 @@ orders.first_page
156
191
  Pina::SalesOrder.find(order_id)
157
192
  ```
158
193
 
159
- ### Receivables
160
-
161
- #### All receivables
162
-
163
- ```ruby
164
- Pina::Receivable.all
165
- ```
166
-
167
- Gets all receivables from your database. Results are paginated and you can access
168
- first, next or previous page like this:
169
-
170
- ```ruby
171
- receivables = Pina::Receivable.all
172
- receivables.next_page
173
- ```
174
-
175
- ```ruby
176
- invoices = Pina::Receivable.all
177
- invoices.previous_page
178
-
179
- invoices.first_page
180
- ```
181
-
182
- #### Fetching specific receivable
194
+ ### Petty Cash Disburstments
183
195
 
196
+ #### All petty cash disburstments
184
197
  ```ruby
185
- Pina::Receivable.find(invoice_id)
198
+ Pina::PettyCashDisburstment.all
186
199
  ```
187
200
 
188
201
  ### Processed Documents
@@ -220,6 +233,35 @@ Pina::ProcessedDocument.find(gid)
220
233
  Pina::ProcessedDocument.delete(gid)
221
234
  ```
222
235
 
236
+ ### Receivables
237
+
238
+ #### All receivables
239
+
240
+ ```ruby
241
+ Pina::Receivable.all
242
+ ```
243
+
244
+ Gets all receivables from your database. Results are paginated and you can access
245
+ first, next or previous page like this:
246
+
247
+ ```ruby
248
+ receivables = Pina::Receivable.all
249
+ receivables.next_page
250
+ ```
251
+
252
+ ```ruby
253
+ invoices = Pina::Receivable.all
254
+ invoices.previous_page
255
+
256
+ invoices.first_page
257
+ ```
258
+
259
+ #### Fetching specific receivable
260
+
261
+ ```ruby
262
+ Pina::Receivable.find(invoice_id)
263
+ ```
264
+
223
265
  ### Stat Processed Documents
224
266
 
225
267
  #### All stat processed documents
@@ -338,7 +380,13 @@ uploaded_document = Pina::UploadedDocument.find(1)
338
380
  uploaded_document.state = 'processed'
339
381
  Pina::UploadedDocument.update(1, uploaded_document)
340
382
  ```
341
-
383
+ ### UploadedDocumentPairing
384
+ #### Pair uploaded document with a book-keeping document
385
+ ```ruby
386
+ Pina::UploadedDocumentPairing.create(uploaded_document_id: 1,
387
+ document_pairable_type: 'purchase_invoice',
388
+ document_pairable_id: 201700001)
389
+ ```
342
390
 
343
391
  ## Development
344
392
 
@@ -0,0 +1,19 @@
1
+ version: "2"
2
+
3
+ volumes:
4
+ pina-sync:
5
+ external: true
6
+ gem_store_235:
7
+ external: true
8
+
9
+ services:
10
+ web:
11
+ build:
12
+ context: .
13
+ command: bash
14
+ tty: true
15
+ stdin_open: true
16
+ volumes:
17
+ - gem_store_235:/gems
18
+ - .:/app
19
+ - pina-sync:/app:nocopy
@@ -0,0 +1,8 @@
1
+ version: "2"
2
+ options:
3
+ verbose: true
4
+ compose-file-path: 'docker-compose.yml'
5
+ syncs:
6
+ pina-sync:
7
+ src: './'
8
+ sync_strategy: 'native_osx'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support'
2
4
  require 'base64'
3
5
  require 'virtus'
@@ -6,6 +8,8 @@ require 'uri'
6
8
 
7
9
  require 'pina/utils/pagination'
8
10
 
11
+ require 'pina/models/errors'
12
+ require 'pina/models/error'
9
13
  require 'pina/collections/base'
10
14
 
11
15
  require 'pina/contact'
@@ -15,9 +19,11 @@ require 'pina/rest_adapter'
15
19
  require 'pina/sales_order'
16
20
  require 'pina/receivable'
17
21
  require 'pina/processed_document'
22
+ require 'pina/petty_cash_disburstment'
18
23
  require 'pina/stat_processed_document'
19
24
  require 'pina/my_bank_account'
20
25
  require 'pina/uploaded_document'
26
+ require 'pina/uploaded_document_pairing'
21
27
 
22
28
  module Pina
23
29
  class ConfigurationNotSet < StandardError; end
@@ -27,8 +33,7 @@ module Pina
27
33
  DEFAULT_EMAIL = 'dummy@email.com'
28
34
  DEFAULT_TENANT = 'imaginary'
29
35
 
30
- SCHEME = 'https://'
31
- API_PATH = '.ucetnictvi.uol.cz/api/'
36
+ API_HOST = 'ucetnictvi.uol.cz'
32
37
 
33
38
  class << self
34
39
  attr_accessor :configuration
@@ -41,8 +46,9 @@ module Pina
41
46
  end
42
47
 
43
48
  class Configuration
44
- attr_accessor :api_token, :email, :tenant
49
+ attr_accessor :api_token, :email, :api_host, :use_ssl, :tenant
45
50
  attr_reader :api_version
51
+ attr_writer :base_url
46
52
 
47
53
  def initialize
48
54
  set_defaults
@@ -52,15 +58,21 @@ module Pina
52
58
  @api_version = DEFAULT_API_VERSION
53
59
  @email = DEFAULT_EMAIL
54
60
  @tenant = DEFAULT_TENANT
61
+ @api_host = API_HOST
62
+ @use_ssl = true
55
63
  @base_url = nil
56
64
  end
57
65
 
58
- def base_url=(base_url)
59
- @base_url = base_url
66
+ def schema
67
+ use_ssl ? 'https://' : 'http://'
68
+ end
69
+
70
+ def tenant_formatted
71
+ @tenant.blank? ? '' : @tenant + '.'
60
72
  end
61
73
 
62
74
  def base_url
63
- @base_url = SCHEME + tenant + API_PATH + "#{api_version}/"
75
+ @base_url = schema + tenant_formatted + api_host + '/api/' + "#{api_version}/"
64
76
  end
65
77
  end
66
78
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Pina
2
4
  module Collections
3
5
  class Contact < Base
4
- attribute :items, Array[::Pina::Models::Contact]
6
+ attribute :items, Array[Pina::Models::Contact]
5
7
  end
6
8
  end
7
9
  end
@@ -0,0 +1,9 @@
1
+ module Pina
2
+ module Collections
3
+ class PettyCashDisburstment
4
+ include Virtus.model
5
+
6
+ attribute :items, Array[Pina::Models::PettyCashDisburstment]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Pina
2
+ module Models
3
+ class NestedValue < Virtus::Attribute
4
+ def coerce(value)
5
+ value&.values&.join(', ')&.to_s
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module Pina
2
+ module Models
3
+ class Error
4
+ include Virtus.model
5
+
6
+ attribute :status_code
7
+ attribute :message
8
+ attribute :errors, Array[Models::Errors]
9
+
10
+ def ok?
11
+ status_code == 200 || status_code == 201
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module Pina
2
+ module Models
3
+ class Errors
4
+ include Virtus.model
5
+
6
+ attribute :resource
7
+ attribute :field
8
+ attribute :code
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Pina
2
+ module Models
3
+ module Coercions
4
+ class NestedValue < Virtus::Attribute
5
+ def coerce(value)
6
+ value.values.join(', ')
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ require 'pina/models/petty_cash_disburstment_item'
2
+ require 'pina/models/coercions/nested_value'
3
+
4
+ module Pina
5
+ module Models
6
+ class PettyCashDisburstment
7
+ include Virtus.model
8
+
9
+ attribute :created_at
10
+ attribute :updated_at
11
+ attribute :creator, NestedValue
12
+ attribute :modifier, NestedValue
13
+ attribute :items, Array[Pina::Models::PettyCashDisburstmentItem]
14
+ attribute :number
15
+ attribute :issue_date
16
+ attribute :receipt_date
17
+ attribute :note
18
+ attribute :coefficient
19
+ attribute :petty_cash, NestedValue
20
+ attribute :department, NestedValue
21
+ attribute :total
22
+ attribute :contact, NestedValue
23
+ attribute :contract, NestedValue
24
+ attribute :vat_document
25
+ attribute :confirmed
26
+ attribute :status
27
+ attribute :gid
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ require 'pina/models/coercions/nested_value'
2
+
3
+ module Pina
4
+ module Models
5
+ class PettyCashDisburstmentItem
6
+ include Virtus.model
7
+
8
+ attribute :created_at
9
+ attribute :updated_at
10
+ attribute :creator, NestedValue
11
+ attribute :modifier, NestedValue
12
+ attribute :external_id
13
+ attribute :rule_id, NestedValue
14
+ attribute :variable_symbol
15
+ attribute :price
16
+ attribute :description
17
+ attribute :department, NestedValue
18
+ attribute :contract, NestedValue
19
+ attribute :linked_doc_number
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ module Pina
2
+ module Models
3
+ class UploadedDocumentPairing
4
+ include Virtus.model
5
+
6
+ attribute :id
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,32 @@
1
+ require 'pina/models/petty_cash_disburstment'
2
+ require 'pina/collections/petty_cash_disburstment'
3
+
4
+ module Pina
5
+ class PettyCashDisburstment
6
+ class << self
7
+ def find(gid)
8
+ response = Pina::RestAdapter.get(:petty_cash_disburstments, gid)
9
+
10
+ return Pina::Models::PettyCashDisburstment.new(attributes(response)) if
11
+ response.ok?
12
+
13
+ response
14
+ end
15
+
16
+ def all
17
+ response = Pina::RestAdapter.get(:petty_cash_disburstments)
18
+
19
+ return Pina::Collections::PettyCashDisburstment.new(attributes(response)) if
20
+ response.ok?
21
+
22
+ response
23
+ end
24
+
25
+ private
26
+
27
+ def attributes(response)
28
+ response.to_hash.merge(response: response)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,18 +1,23 @@
1
+ require 'net/http/post/multipart'
2
+
1
3
  module Pina
2
4
  class RestAdapter
3
5
  include ActiveSupport::JSON
4
6
 
7
+ REQUEST_TIMEOUT = 408
8
+ SERVICE_UNAVAILABLE = 503
9
+
5
10
  class << self
6
11
  def get(resource, id_or_params = nil)
7
12
  net_http_for(:get, resource, id_or_params)
8
13
  end
9
14
 
10
- def post(resource, payload)
11
- net_http_for(:post, resource, nil, payload)
15
+ def post(resource, payload, multipart: false)
16
+ net_http_for(:post, resource, nil, payload, multipart: multipart)
12
17
  end
13
18
 
14
19
  def patch(resource, id, payload)
15
- net_http_for(:patch, resource, id, payload)
20
+ net_http_for(:patch, resource, id, payload, multipart: false)
16
21
  end
17
22
 
18
23
  def delete(resource, id = nil)
@@ -21,19 +26,24 @@ module Pina
21
26
 
22
27
  private
23
28
 
24
- def net_http_for(method, resource, id, payload = nil)
25
- fail ConfigurationNotSet unless Pina.configuration
29
+ def net_http_for(method, resource, id, payload = nil, multipart: false)
30
+ raise ConfigurationNotSet unless Pina.configuration
26
31
 
27
32
  uri = URI(url(resource, id))
28
-
29
- request = net_http_class_for(method).new(uri)
30
- headers.each do |k, v|
31
- request[k] = v
32
- end
33
- request.body = payload.to_json if payload
34
-
35
- response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
36
- http.request(request)
33
+ request = multipart ? multipart_request(uri, payload) : request(uri, method, payload)
34
+
35
+ begin
36
+ response = Net::HTTP.start(uri.hostname,
37
+ uri.port,
38
+ use_ssl: Pina.configuration.use_ssl) do |http|
39
+ http.request(request)
40
+ end
41
+ rescue SocketError
42
+ return Pina::Models::Error.new(status_code: SERVICE_UNAVAILABLE,
43
+ message: "služba nedostupná - #{Pina.configuration.api_host}")
44
+ rescue Net::ReadTimeout
45
+ return Pina::Models::Error.new(status_code: REQUEST_TIMEOUT,
46
+ message: "služba neodpovídá - #{Pina.configuration.api_host}")
37
47
  end
38
48
 
39
49
  Response.new(response.code.to_i, response.body)
@@ -43,16 +53,49 @@ module Pina
43
53
  Kernel.const_get("Net::HTTP::#{method.capitalize}")
44
54
  end
45
55
 
46
- def headers
56
+ def auth_header
47
57
  {
48
58
  'Authorization' => 'Basic ' + Base64
49
- .strict_encode64("#{Pina.configuration.email}:#{Pina.configuration.api_token}"),
50
- 'Accept-Encoding' => 'application/json',
51
- 'Content-Type' => 'application/json'
59
+ .strict_encode64("#{Pina.configuration.email}:#{Pina.configuration.api_token}")
52
60
  }
53
61
  end
54
62
 
63
+ def headers
64
+ auth_header.merge('Accept-Encoding' => 'application/json',
65
+ 'Content-Type' => 'application/json')
66
+ end
67
+
68
+ def request(uri, method, payload)
69
+ request = net_http_class_for(method).new(uri)
70
+ headers.each do |k, v|
71
+ request[k] = v
72
+ end
73
+ request.body = payload.to_json if payload
74
+ request
75
+ end
76
+
77
+ def multipart_request(uri, payload)
78
+ request = Net::HTTP::Post::Multipart.new uri, multipart_payload(payload)
79
+ auth_header.each do |k, v|
80
+ request[k] = v
81
+ end
82
+ request
83
+ end
84
+
85
+ def multipart_payload(payload)
86
+ return payload unless payload.is_a? Hash
87
+
88
+ payload.map do |key, val|
89
+ next unless val.respond_to?(:path)
90
+ payload[key] = UploadIO.new(val, 'application/pdf', val.path.split('/').last)
91
+ end
92
+
93
+ payload
94
+ end
95
+
55
96
  def url(resource, id_or_params)
97
+ resource = resource_with_namespace(resource)
98
+
56
99
  if id_or_params.is_a? Hash
57
100
  params = prepare_params_for_request(id_or_params)
58
101
  Pina.configuration.base_url + "#{resource}?#{params}"
@@ -64,6 +107,10 @@ module Pina
64
107
  def prepare_params_for_request(params)
65
108
  params.map { |key, value| "#{URI::escape(key.to_s)}=#{URI::escape(value.to_s)}" }.join('&')
66
109
  end
110
+
111
+ def resource_with_namespace(*resource)
112
+ resource.join('/')
113
+ end
67
114
  end
68
115
 
69
116
  class Response
@@ -4,13 +4,24 @@ require 'pina/collections/uploaded_document'
4
4
  module Pina
5
5
  class UploadedDocument
6
6
  class << self
7
+ def create(uploaded_document)
8
+ response = Pina::RestAdapter.post(:uploaded_documents, uploaded_document, multipart: true)
9
+
10
+ if response.ok?
11
+ Pina::Models::UploadedDocument.new(attributes(response))
12
+ else
13
+ Pina::Models::Error.new(attributes_for_error(response))
14
+ end
15
+ end
16
+
7
17
  def find(id)
8
18
  response = Pina::RestAdapter.get(:uploaded_documents, id)
9
19
 
10
- return Pina::Models::UploadedDocument.new(attributes(response)) if
11
- response.ok?
12
-
13
- response
20
+ if response.ok?
21
+ Pina::Models::UploadedDocument.new(attributes(response))
22
+ else
23
+ Pina::Models::Error.new(attributes_for_error(response))
24
+ end
14
25
  end
15
26
 
16
27
  def where(hash, page = nil)
@@ -34,10 +45,11 @@ module Pina
34
45
  def update(id, uploaded_document)
35
46
  response = Pina::RestAdapter.patch(:uploaded_documents, id, uploaded_document)
36
47
 
37
- return Pina::Models::UploadedDocument.new(attributes(response)) if
38
- response.ok?
39
-
40
- response
48
+ if response.ok?
49
+ Pina::Models::UploadedDocument.new(attributes(response))
50
+ else
51
+ Pina::Models::Error.new(attributes_for_error(response))
52
+ end
41
53
  end
42
54
 
43
55
  private
@@ -45,6 +57,10 @@ module Pina
45
57
  def attributes(response)
46
58
  response.to_hash.merge(response: response)
47
59
  end
60
+
61
+ def attributes_for_error(response)
62
+ response.to_hash.merge(status_code: response.status_code)
63
+ end
48
64
  end
49
65
  end
50
66
  end
@@ -0,0 +1,38 @@
1
+ require 'pina/models/uploaded_document_pairing'
2
+
3
+ module Pina
4
+ class UploadedDocumentPairing
5
+ class << self
6
+ def find(id)
7
+ response = Pina::RestAdapter.get([:uploaded_documents, id, :pairings])
8
+
9
+ return Pina::Models::UploadedDocumentPairing.new(attributes(response)) if
10
+ response.ok?
11
+
12
+ response
13
+ end
14
+
15
+ def create(params)
16
+ response = Pina::RestAdapter.post([:uploaded_documents, params[:uploaded_document_id], :pairings],
17
+ params.except(:uploaded_document_id))
18
+
19
+ if response.ok?
20
+ # TODO: implement uploaded_documents/:id/pairings response object in Fantozzi api
21
+ response
22
+ else
23
+ Pina::Models::Error.new(attributes_for_error(response))
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def attributes(response)
30
+ response.to_hash.merge(response: response)
31
+ end
32
+
33
+ def attributes_for_error(response)
34
+ response.to_hash.merge(status_code: response.status_code)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module Pina
2
- VERSION = '0.13.0'
2
+ VERSION = '0.14.0'
3
3
  end
@@ -33,4 +33,6 @@ Gem::Specification.new do |spec|
33
33
 
34
34
  spec.add_runtime_dependency 'virtus'
35
35
  spec.add_runtime_dependency 'activesupport'
36
+ spec.add_runtime_dependency 'multipart-post'
37
+
36
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Hronek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-27 00:00:00.000000000 Z
11
+ date: 2018-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -192,6 +192,20 @@ dependencies:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: multipart-post
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
195
209
  description: Fantozzi REST API client
196
210
  email:
197
211
  - hronek@uol.cz
@@ -206,15 +220,19 @@ files:
206
220
  - ".ruby-version"
207
221
  - ".travis.yml"
208
222
  - CHANGELOG.md
223
+ - Dockerfile
209
224
  - Gemfile
210
225
  - LICENSE
211
226
  - README.md
212
227
  - Rakefile
213
228
  - bin/console
229
+ - docker-compose.yml
230
+ - docker-sync.yml
214
231
  - lib/pina.rb
215
232
  - lib/pina/collections/base.rb
216
233
  - lib/pina/collections/contact.rb
217
234
  - lib/pina/collections/my_bank_account.rb
235
+ - lib/pina/collections/petty_cash_disburstment.rb
218
236
  - lib/pina/collections/processed_document.rb
219
237
  - lib/pina/collections/receivable.rb
220
238
  - lib/pina/collections/sales_invoice.rb
@@ -223,8 +241,14 @@ files:
223
241
  - lib/pina/collections/uploaded_document.rb
224
242
  - lib/pina/contact.rb
225
243
  - lib/pina/models/address.rb
244
+ - lib/pina/models/coercions/nested_value.rb
226
245
  - lib/pina/models/contact.rb
246
+ - lib/pina/models/error.rb
247
+ - lib/pina/models/errors.rb
227
248
  - lib/pina/models/my_bank_account.rb
249
+ - lib/pina/models/nested_value.rb
250
+ - lib/pina/models/petty_cash_disburstment.rb
251
+ - lib/pina/models/petty_cash_disburstment_item.rb
228
252
  - lib/pina/models/processed_document.rb
229
253
  - lib/pina/models/receivable.rb
230
254
  - lib/pina/models/sales_invoice.rb
@@ -232,7 +256,9 @@ files:
232
256
  - lib/pina/models/sales_order.rb
233
257
  - lib/pina/models/stat_processed_document.rb
234
258
  - lib/pina/models/uploaded_document.rb
259
+ - lib/pina/models/uploaded_document_pairing.rb
235
260
  - lib/pina/my_bank_account.rb
261
+ - lib/pina/petty_cash_disburstment.rb
236
262
  - lib/pina/processed_document.rb
237
263
  - lib/pina/receivable.rb
238
264
  - lib/pina/rest_adapter.rb
@@ -240,6 +266,7 @@ files:
240
266
  - lib/pina/sales_order.rb
241
267
  - lib/pina/stat_processed_document.rb
242
268
  - lib/pina/uploaded_document.rb
269
+ - lib/pina/uploaded_document_pairing.rb
243
270
  - lib/pina/utils/pagination.rb
244
271
  - lib/pina/version.rb
245
272
  - pina.gemspec
@@ -263,7 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
263
290
  version: '0'
264
291
  requirements: []
265
292
  rubyforge_project:
266
- rubygems_version: 2.6.11
293
+ rubygems_version: 2.6.8
267
294
  signing_key:
268
295
  specification_version: 4
269
296
  summary: Fantozzi REST API client