erp_integration 0.7.0 → 0.8.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 +4 -4
- data/lib/erp_integration/fulfil/persistence.rb +16 -11
- data/lib/erp_integration/resource.rb +9 -6
- data/lib/erp_integration/resources/persistence.rb +40 -0
- data/lib/erp_integration/resources/validations.rb +35 -0
- data/lib/erp_integration/version.rb +1 -1
- data/lib/erp_integration.rb +2 -0
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2636d8881ff93450aabba350ae21870e98ebf72dbe104b952567a37f49685fde
|
4
|
+
data.tar.gz: 84d2fc64b31a928e93d10c9090f7f1ebbbe187b933889437c62f914b6dacc72a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc1fe8cf4bd8739773092308b849f78fa40e740d347850b887f5e33f1d5df873d07635b9b66249ed5c9297e1405f0058f03d99eb433e9d32fdf330686c4cd129
|
7
|
+
data.tar.gz: 43e155e350b9e3cf3be08a3c08770213b5cf06f81c24d579971a75d62d173f21a3a6d49cd316ff9508df9d3548a0df444621870416f951663eacfd63d26265b9
|
@@ -5,21 +5,26 @@ module ErpIntegration
|
|
5
5
|
module Persistence
|
6
6
|
# Allows creating new resources in Fulfil.
|
7
7
|
#
|
8
|
-
# @
|
9
|
-
#
|
10
|
-
|
11
|
-
#
|
12
|
-
# @param attributes [Hash] A list of attributes.
|
13
|
-
# @return [ErpIntegration::Resource] The newly created resource.
|
14
|
-
def create(attributes = {})
|
8
|
+
# @param attributes [Hash] A list of attributes for the new resource.
|
9
|
+
# @return [Array|Hash] The response from the API
|
10
|
+
def create(attributes)
|
15
11
|
client
|
16
12
|
.post("model/#{model_name}", normalize_attributes(attributes))
|
17
|
-
.map { |new_record_id|
|
13
|
+
.map { |new_record_id| attributes.merge!(id: new_record_id) }
|
18
14
|
.first
|
19
15
|
rescue ErpIntegration::HttpError::BadRequest => e
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
[attributes, [extract_error_message(e)]]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Updates the resource with the given attributes.
|
20
|
+
#
|
21
|
+
# @param resource_id [Integer] The ID of the resource.
|
22
|
+
# @param attributes [Hash] A list of attributes to update for the resource.
|
23
|
+
# @return [Array|Hash] The response from the API
|
24
|
+
def update(resource_id, attributes)
|
25
|
+
client.put("model/#{model_name}/#{resource_id}", attributes)
|
26
|
+
rescue ErpIntegration::HttpError::BadRequest => e
|
27
|
+
[attributes, [extract_error_message(e)]]
|
23
28
|
end
|
24
29
|
|
25
30
|
private
|
@@ -29,22 +29,25 @@ module ErpIntegration
|
|
29
29
|
# 5. Create a new adapter class prefixed with the adapter's name
|
30
30
|
# (e.g. `FulfilOrder` for the `Order` resource in the `lib/erp_integration/orders` folder).
|
31
31
|
class Resource
|
32
|
+
include Resources::Validations
|
33
|
+
include Resources::Persistence
|
34
|
+
|
32
35
|
attr_accessor :raw_api_response
|
33
36
|
|
34
37
|
def initialize(attributes = {})
|
35
38
|
@raw_api_response = attributes
|
39
|
+
assign_attributes(attributes)
|
40
|
+
end
|
36
41
|
|
42
|
+
# Allows assigning attributes to an resource instance.
|
43
|
+
# @param attributes [Hash] A list of attributes for the resource.
|
44
|
+
# @return [Hash] The list of assigned attributes.
|
45
|
+
def assign_attributes(attributes = {})
|
37
46
|
attributes.each_pair do |name, value|
|
38
47
|
public_send(:"#{name}=", value) if respond_to?(:"#{name}=")
|
39
48
|
end
|
40
49
|
end
|
41
50
|
|
42
|
-
# Exposes all errors related to an `ErpIntegration::Resource`.
|
43
|
-
# @return [ErpIntegration::Resources::Errors] Encapsulation of all error messages.
|
44
|
-
def errors
|
45
|
-
@errors ||= Resources::Errors.new
|
46
|
-
end
|
47
|
-
|
48
51
|
class << self
|
49
52
|
# Dynamically defines and loads the adapter for the class inheriting from
|
50
53
|
# the `ErpIntegration::Resource`.
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ErpIntegration
|
4
|
+
module Resources
|
5
|
+
module Persistence
|
6
|
+
def self.included(base)
|
7
|
+
base.extend ClassMethods
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
# Creates a new resource in the ERP.
|
12
|
+
# @param attributes [Hash] A list of attributes for the new resource.
|
13
|
+
# @return [ErpIntegration::Resource] The (to be) created resource.
|
14
|
+
def create(attributes)
|
15
|
+
attrs, error_messages = adapter.create(**attributes)
|
16
|
+
|
17
|
+
new_resource = new(attrs)
|
18
|
+
new_resource.validate_with(error_messages)
|
19
|
+
new_resource
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Determines whether a `ErpIntegration::Resource` is considered to be persisted.
|
24
|
+
# @return [Boolean] Whether it's persisted or not.
|
25
|
+
def persisted?
|
26
|
+
!id.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
# Update an resource in the ERP.
|
30
|
+
# @param attributes [Hash] A list of attributes to update.
|
31
|
+
# @return [Boolean] Whether the update action was succcesful or not.
|
32
|
+
def update(attributes)
|
33
|
+
attrs, error_messages = self.class.adapter.update(id, **attributes)
|
34
|
+
|
35
|
+
assign_attributes(attrs)
|
36
|
+
validate_with(error_messages)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ErpIntegration
|
4
|
+
module Resources
|
5
|
+
module Validations
|
6
|
+
# Exposes all errors related to an `ErpIntegration::Resource`.
|
7
|
+
#
|
8
|
+
# @return [ErpIntegration::Resources::Errors] Encapsulation of all error messages.
|
9
|
+
def errors
|
10
|
+
@errors ||= Resources::Errors.new
|
11
|
+
end
|
12
|
+
|
13
|
+
# Checks whether an resource is considered valid or not.
|
14
|
+
#
|
15
|
+
# @return [Boolean] Is the resource valid according to the ERP?
|
16
|
+
def valid?
|
17
|
+
errors.none?
|
18
|
+
end
|
19
|
+
|
20
|
+
# Validates the resource by checking the given error messages.
|
21
|
+
#
|
22
|
+
# @param error_messages [Array] A list of error messages.
|
23
|
+
# @return [Boolean] Whether the resource is valid or not.
|
24
|
+
def validate_with(*error_messages)
|
25
|
+
errors.clear
|
26
|
+
|
27
|
+
error_messages.flatten.compact.each do |error_message|
|
28
|
+
errors.add(error_message)
|
29
|
+
end
|
30
|
+
|
31
|
+
valid?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/erp_integration.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erp_integration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Vermaas
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -224,7 +224,7 @@ dependencies:
|
|
224
224
|
- - '='
|
225
225
|
- !ruby/object:Gem::Version
|
226
226
|
version: 1.19.2
|
227
|
-
description:
|
227
|
+
description:
|
228
228
|
email:
|
229
229
|
- stefan@knowndecimal.com
|
230
230
|
executables: []
|
@@ -291,6 +291,8 @@ files:
|
|
291
291
|
- lib/erp_integration/purchase_request.rb
|
292
292
|
- lib/erp_integration/resource.rb
|
293
293
|
- lib/erp_integration/resources/errors.rb
|
294
|
+
- lib/erp_integration/resources/persistence.rb
|
295
|
+
- lib/erp_integration/resources/validations.rb
|
294
296
|
- lib/erp_integration/sales_order.rb
|
295
297
|
- lib/erp_integration/sales_order_line.rb
|
296
298
|
- lib/erp_integration/stock_move.rb
|
@@ -304,7 +306,7 @@ metadata:
|
|
304
306
|
homepage_uri: https://www.github.com/mejuri-inc/erp-integration
|
305
307
|
source_code_uri: https://www.github.com/mejuri-inc/erp-integration
|
306
308
|
changelog_uri: https://www.github.com/mejuri-inc/erp-integration/blob/main/CHANGELOG.md
|
307
|
-
post_install_message:
|
309
|
+
post_install_message:
|
308
310
|
rdoc_options: []
|
309
311
|
require_paths:
|
310
312
|
- lib
|
@@ -320,7 +322,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
320
322
|
version: '0'
|
321
323
|
requirements: []
|
322
324
|
rubygems_version: 3.2.22
|
323
|
-
signing_key:
|
325
|
+
signing_key:
|
324
326
|
specification_version: 4
|
325
327
|
summary: Connects Mejuri with third-party ERP vendors
|
326
328
|
test_files: []
|