nova-api 0.4.0 → 0.5.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
  SHA256:
3
- metadata.gz: a266432dc94cd0389130d02b53febc820c44077340febee798db6a731fecdf61
4
- data.tar.gz: 29c58b11990b3deae87ff55a678058a830cb6c652677eb6509818e1b85310609
3
+ metadata.gz: 0a8e79b9a9865e156d8a56b694ba90e42f2f484b4b4000c4aab312387ebbf292
4
+ data.tar.gz: 8412dbb5038ce302b39fe96fd3fb723a4b0bd48b008f7747dfe908e7672f2576
5
5
  SHA512:
6
- metadata.gz: 85e4c7c5a6858b21d66421438ca04fb86343c3ee4e7592bb56fa80a2c8807f5f133b6794238fae36be6617ffd95c363523c7aab4aafbb5e21fcf1cd6e34eb50d
7
- data.tar.gz: 787e55980884ceb41fbc99c3f7337317da15c2a4d6410ee83773ded174d9a61c629d2d27c7395b2d5637a007dec456d00425891779eb2edb9d28dfbe380d7371
6
+ metadata.gz: 005e85aeb3b00d333df06230e5efbfba42a1f219bd09615cfdf5fc5a6be93e68ad89921ec4d19b21b2628fca85693bf4ffd2826bfe140960fea33dd715e44ea9
7
+ data.tar.gz: 9b9079d0ed717d5c6f6c45c988059724f8e40e85b67bd03a163485686b543e52864cfd385075a7e0998bf39c8bf3aca28e1b0e5bb489e518ff2a4b954efac1cc
data/CHANGELOG.md CHANGED
@@ -5,7 +5,13 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## [0.5.0] - 2021-03-09
9
+
10
+ ### Added
11
+
12
+ - Payables & Receivables related stuff
13
+
14
+ - Card taxes to cards asset
9
15
 
10
16
  ## [0.4.0] - 2021-03-05
11
17
 
@@ -41,7 +47,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
41
47
 
42
48
  - Apportionment related stuff
43
49
 
44
- [unreleased]: https://github.com/coyosoftware/nova-api/compare/0.3.0...HEAD
50
+ [unreleased]: https://github.com/coyosoftware/nova-api/compare/0.5.0...HEAD
51
+ [0.5.0]: https://github.com/coyosoftware/nova-api/releases/tag/0.5.0
52
+ [0.4.0]: https://github.com/coyosoftware/nova-api/releases/tag/0.4.0
45
53
  [0.3.0]: https://github.com/coyosoftware/nova-api/releases/tag/0.3.0
46
54
  [0.2.0]: https://github.com/coyosoftware/nova-api/releases/tag/0.2.0
47
55
  [0.1.1]: https://github.com/coyosoftware/nova-api/releases/tag/0.1.1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nova-api (0.4.0)
4
+ nova-api (0.5.0)
5
5
  dry-struct (~> 1.4.0)
6
6
  dry-types (~> 1.5.1)
7
7
  httparty (~> 0.1)
data/lib/nova/api.rb CHANGED
@@ -10,6 +10,11 @@ require "nova/api/resource/apportionment_value"
10
10
  require "nova/api/resource/apportionment"
11
11
  require "nova/api/resource/company"
12
12
 
13
+ require "nova/api/resource/installment"
14
+ require "nova/api/resource/bill"
15
+ require "nova/api/resource/payable"
16
+ require "nova/api/resource/receivable"
17
+
13
18
  require "nova/api/resource/current_asset"
14
19
  require "nova/api/resource/bank"
15
20
  require "nova/api/resource/card"
@@ -76,6 +81,14 @@ module Nova
76
81
  Nova::API::Resource::FinancialAccount
77
82
  end
78
83
 
84
+ def payables
85
+ Nova::API::Resource::Payable
86
+ end
87
+
88
+ def receivables
89
+ Nova::API::Resource::Receivable
90
+ end
91
+
79
92
  def third_parties
80
93
  Nova::API::Resource::ThirdParty
81
94
  end
data/lib/nova/api/base.rb CHANGED
@@ -28,18 +28,18 @@ module Nova
28
28
 
29
29
  protected
30
30
 
31
- def allowed_attributes
32
- return attributes unless self.class.const_defined?('ALLOWED_ATTRIBUTES')
33
-
34
- data = attributes.dup
35
-
36
- data.keys.each { |key| data.delete(key.to_sym) unless self.class.const_get('ALLOWED_ATTRIBUTES').include?(key.to_sym) }
31
+ def self.initialize_empty_model_with_id(klass, id, additional_attributes = {})
32
+ data = klass.schema.type.keys.map do |field|
33
+ name = field.name
37
34
 
38
- data
39
- end
35
+ if additional_attributes[name]
36
+ [name, additional_attributes[name]]
37
+ else
38
+ type = field.type
40
39
 
41
- def self.initialize_empty_model_with_id(klass, id, additional_attributes = {})
42
- data = klass.attribute_names.map { |key| additional_attributes[key] ? [key, additional_attributes[key]] : [key, nil] }
40
+ type.optional? ? [name, nil] : [name, generate_valid_value_for(type)]
41
+ end
42
+ end
43
43
 
44
44
  klass.new(Hash[*data.flatten].merge(id: id))
45
45
  end
@@ -121,6 +121,18 @@ module Nova
121
121
  base_uri base_url
122
122
  end
123
123
  def_delegator self, :set_base_uri
124
+
125
+ def self.generate_valid_value_for(type)
126
+ case type.name
127
+ when Dry::Types['integer'].name, Dry::Types['float'].name, Dry::Types['decimal'].name
128
+ 0
129
+ when Dry::Types['bool'].name
130
+ false
131
+ else
132
+ nil
133
+ end
134
+ end
135
+ def_delegator self, :generate_valid_value_for
124
136
  end
125
137
  end
126
138
  end
@@ -0,0 +1,39 @@
1
+ module Nova
2
+ module API
3
+ module Resource
4
+ class Bill < Nova::API::Base
5
+ class Apportionment < Nova::API::Utils::BaseStruct
6
+ ALLOWED_ATTRIBUTES = [:value, :apportionment_value_ids]
7
+
8
+ attribute :apportionment_value_ids, Dry::Types['strict.array'].of(Dry::Types['coercible.integer'].optional)
9
+ attribute :value, Dry::Types['coercible.decimal']
10
+ end
11
+
12
+ ALLOWED_ATTRIBUTES = [
13
+ :additional_information, :apportionments, :company_id, :date, :document_type, :document_number, :due_type, :financial_account_id,
14
+ :first_due_date, :forecast, :installments, :installments_number, :third_party_id, :total_value
15
+ ]
16
+
17
+ attribute? :id, Dry::Types['coercible.integer'].optional
18
+ attribute? :additional_information, Dry::Types['coercible.string'].optional
19
+ attribute? :apportionments, Dry::Types['strict.array'].of(Nova::API::Resource::Bill::Apportionment).optional
20
+ attribute :company_id, Dry::Types['coercible.integer']
21
+ attribute :date, Dry::Types['coercible.string'].constrained(format: DATE_REGEX)
22
+ attribute :document_type, Dry::Types['coercible.integer']
23
+ attribute? :document_number, Dry::Types['coercible.string']
24
+ attribute? :due_type, Dry::Types['coercible.integer']
25
+ attribute :financial_account_id, Dry::Types['coercible.integer']
26
+ attribute :first_due_date, Dry::Types['coercible.string'].constrained(format: DATE_REGEX)
27
+ attribute :forecast, Dry::Types['strict.bool']
28
+ attribute? :installments, Dry::Types['strict.array'].of(Nova::API::Resource::Installment).optional
29
+ attribute :installments_number, Dry::Types['coercible.integer']
30
+ attribute :third_party_id, Dry::Types['coercible.integer']
31
+ attribute :total_value, Dry::Types['coercible.decimal']
32
+
33
+ def self.endpoint
34
+ '/api/bills'
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -2,10 +2,21 @@ module Nova
2
2
  module API
3
3
  module Resource
4
4
  class Card < Nova::API::Resource::CurrentAsset
5
+ class Tax < Nova::API::Utils::BaseStruct
6
+ ALLOWED_ATTRIBUTES = %i[]
7
+
8
+ attribute :percentage, Dry::Types['coercible.decimal']
9
+ attribute :fixed, Dry::Types['coercible.decimal']
10
+ attribute :type, Dry::Types['coercible.string']
11
+ attribute :installments, Dry::Types['coercible.integer']
12
+ attribute :days, Dry::Types['coercible.integer']
13
+ end
14
+
5
15
  ALLOWED_ATTRIBUTES = %i[]
6
16
 
7
17
  attribute? :description, Dry::Types['coercible.string'].optional
8
18
  attribute? :institution, Dry::Types['coercible.string'].optional
19
+ attribute :taxes, Dry::Types['strict.array'].of(Nova::API::Resource::Card::Tax)
9
20
 
10
21
  def self.endpoint
11
22
  '/api/cards'
@@ -0,0 +1,19 @@
1
+ module Nova
2
+ module API
3
+ module Resource
4
+ class Installment < Nova::API::Base
5
+ ALLOWED_ATTRIBUTES = %i[due_date gross_value number value]
6
+
7
+ attribute? :id, Dry::Types['coercible.integer'].optional
8
+ attribute :due_date, Dry::Types['coercible.string'].constrained(format: DATE_REGEX)
9
+ attribute? :gross_value, Dry::Types['coercible.decimal'].optional
10
+ attribute :number, Dry::Types['coercible.integer']
11
+ attribute :value, Dry::Types['coercible.decimal']
12
+
13
+ def self.endpoint
14
+ '/api/installments'
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,57 @@
1
+ module Nova
2
+ module API
3
+ module Resource
4
+ class Payable < Nova::API::Resource::Bill
5
+ def self.endpoint
6
+ '/api/payables'
7
+ end
8
+
9
+ def self.create(parameters)
10
+ model = new parameters
11
+
12
+ model.attributes.delete(:id)
13
+
14
+ model.save
15
+ end
16
+
17
+ def self.update(id, parameters)
18
+ model = new parameters.merge(id: id)
19
+
20
+ model.update
21
+ end
22
+
23
+ def self.destroy(id)
24
+ model = initialize_empty_model_with_id(self, id, date: Date.today.iso8601, first_due_date: Date.today.iso8601)
25
+
26
+ model.destroy
27
+ end
28
+
29
+ def endpoint
30
+ protect_operation_from_missing_value
31
+
32
+ "/api/payables/#{id}"
33
+ end
34
+
35
+ def save
36
+ if id.nil?
37
+ do_post(self.class.endpoint, allowed_attributes)
38
+ else
39
+ do_patch("#{endpoint}", allowed_attributes)
40
+ end
41
+ end
42
+
43
+ def update
44
+ protect_operation_from_missing_value
45
+
46
+ do_patch("#{endpoint}", allowed_attributes)
47
+ end
48
+
49
+ def destroy
50
+ protect_operation_from_missing_value
51
+
52
+ do_delete("#{endpoint}")
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,61 @@
1
+ module Nova
2
+ module API
3
+ module Resource
4
+ class Receivable < Nova::API::Resource::Bill
5
+ ALLOWED_ATTRIBUTES = Nova::API::Resource::Bill::ALLOWED_ATTRIBUTES.dup << :gross_value
6
+
7
+ attribute? :gross_value, Dry::Types['coercible.decimal'].optional
8
+
9
+ def self.endpoint
10
+ '/api/receivables'
11
+ end
12
+
13
+ def self.create(parameters)
14
+ model = new parameters
15
+
16
+ model.attributes.delete(:id)
17
+
18
+ model.save
19
+ end
20
+
21
+ def self.update(id, parameters)
22
+ model = new parameters.merge(id: id)
23
+
24
+ model.update
25
+ end
26
+
27
+ def self.destroy(id)
28
+ model = initialize_empty_model_with_id(self, id, date: Date.today.iso8601, first_due_date: Date.today.iso8601)
29
+
30
+ model.destroy
31
+ end
32
+
33
+ def endpoint
34
+ protect_operation_from_missing_value
35
+
36
+ "/api/receivables/#{id}"
37
+ end
38
+
39
+ def save
40
+ if id.nil?
41
+ do_post(self.class.endpoint, allowed_attributes)
42
+ else
43
+ do_patch("#{endpoint}", allowed_attributes)
44
+ end
45
+ end
46
+
47
+ def update
48
+ protect_operation_from_missing_value
49
+
50
+ do_patch("#{endpoint}", allowed_attributes)
51
+ end
52
+
53
+ def destroy
54
+ protect_operation_from_missing_value
55
+
56
+ do_delete("#{endpoint}")
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -2,7 +2,10 @@ module Nova
2
2
  module API
3
3
  module Resource
4
4
  class ThirdParty < Nova::API::Base
5
- ALLOWED_ATTRIBUTES = %i[trading_name identification address phone social_reason municipal_inscription state_inscription email notes supplier customer retention whatsapp twitter facebook linkedin google instagram site csll pis cofins irpj values_past]
5
+ ALLOWED_ATTRIBUTES = %i[
6
+ trading_name identification address phone social_reason municipal_inscription state_inscription email notes supplier
7
+ customer retention whatsapp twitter facebook linkedin google instagram site csll pis cofins irpj values_past
8
+ ]
6
9
 
7
10
  attribute? :id, Dry::Types['coercible.integer'].optional
8
11
  attribute :trading_name, Dry::Types['coercible.string']
@@ -8,6 +8,32 @@ module Nova
8
8
  DATE_REGEX = /\A\d{4}-\d{2}-\d{2}\z/
9
9
 
10
10
  transform_keys(&:to_sym)
11
+
12
+ def allowed_attributes
13
+ return attributes unless self.class.const_defined?('ALLOWED_ATTRIBUTES')
14
+
15
+ data = {}
16
+
17
+ self.class.const_get('ALLOWED_ATTRIBUTES').each do |key|
18
+ next unless attributes.keys.include? key
19
+
20
+ value = attributes[key]
21
+
22
+ if value.is_a? Array
23
+ data[key.to_sym] = value.map { |attribute| permit_value(key, attribute) }
24
+ else
25
+ data[key.to_sym] = permit_value(key, value)
26
+ end
27
+ end
28
+
29
+ data
30
+ end
31
+
32
+ private
33
+
34
+ def permit_value(key, value)
35
+ value.respond_to?(:allowed_attributes) ? value.allowed_attributes : value
36
+ end
11
37
  end
12
38
  end
13
39
  end
@@ -1,5 +1,5 @@
1
1
  module Nova
2
2
  module API
3
- VERSION = "0.4.0"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nova-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Coyô Software
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-05 00:00:00.000000000 Z
11
+ date: 2021-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -177,11 +177,15 @@ files:
177
177
  - lib/nova/api/resource/apportionment.rb
178
178
  - lib/nova/api/resource/apportionment_value.rb
179
179
  - lib/nova/api/resource/bank.rb
180
+ - lib/nova/api/resource/bill.rb
180
181
  - lib/nova/api/resource/card.rb
181
182
  - lib/nova/api/resource/cash.rb
182
183
  - lib/nova/api/resource/company.rb
183
184
  - lib/nova/api/resource/current_asset.rb
184
185
  - lib/nova/api/resource/financial_account.rb
186
+ - lib/nova/api/resource/installment.rb
187
+ - lib/nova/api/resource/payable.rb
188
+ - lib/nova/api/resource/receivable.rb
185
189
  - lib/nova/api/resource/response/current_asset_statement.rb
186
190
  - lib/nova/api/resource/third_party.rb
187
191
  - lib/nova/api/resource/write_off.rb