erp_integration 0.63.0 → 1.0.1
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/erp_integration.gemspec +1 -2
- data/lib/erp_integration/fulfil/client.rb +5 -8
- data/lib/erp_integration/fulfil/resources/purchase_order.rb +15 -0
- data/lib/erp_integration/middleware/api_keys_rotation.rb +2 -0
- data/lib/erp_integration/middleware/error_handling.rb +3 -1
- data/lib/erp_integration/middleware/json_decode.rb +27 -0
- data/lib/erp_integration/middleware/json_encode.rb +21 -0
- data/lib/erp_integration/middleware/logger.rb +2 -0
- data/lib/erp_integration/purchase_order.rb +8 -0
- data/lib/erp_integration/version.rb +1 -1
- data/lib/erp_integration.rb +4 -1
- metadata +8 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad3730a4402988984abd10fe810f4865cfee54f4dbc432bfbd43aaf8417153ec
|
4
|
+
data.tar.gz: 1735fdccbea6c4b29ab44f01d8a07965f0acf0c5d4c30ae55a5a082b8fd2df1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cb38e50117fe3ac7ce1da2a3bcddd7446d34aa51b75401bf9f188fab95a7f641a4cc308420bdbd018501633683c4fc96ebb258feb037cda7e3bd6b3315f5b46
|
7
|
+
data.tar.gz: 314fab0d17387b28df68fc5686c54902d5a73e6b646e460abaadfcca940fb719ffc013af602064f5923c15ab37604612d45e81ad39b7cf966d64cb06ad87b4eb
|
data/erp_integration.gemspec
CHANGED
@@ -32,8 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_dependency 'activesupport', '>= 4.1.16'
|
33
33
|
|
34
34
|
# Faraday is a HTTP/REST API client library to interact with third-party API vendors
|
35
|
-
spec.add_dependency 'faraday', '
|
36
|
-
spec.add_dependency 'faraday_middleware', '>= 0.14', '< 1.3'
|
35
|
+
spec.add_dependency 'faraday', '~> 2.12'
|
37
36
|
|
38
37
|
# Development dependencies
|
39
38
|
spec.add_development_dependency 'byebug', '~> 11.0'
|
@@ -26,18 +26,15 @@ module ErpIntegration
|
|
26
26
|
@connection ||= Faraday.new(url: base_url) do |faraday|
|
27
27
|
faraday.headers = default_headers
|
28
28
|
|
29
|
-
faraday.request :
|
30
|
-
faraday.
|
31
|
-
|
32
|
-
faraday.response :follow_redirects
|
33
|
-
faraday.response :json # Decode response bodies as JSON
|
29
|
+
faraday.request :json_encode # Encode request bodies as JSON
|
30
|
+
faraday.response :json_decode # Decode response bodies as JSON
|
34
31
|
|
35
32
|
# Custom error handling for the error response
|
36
|
-
faraday.use
|
33
|
+
faraday.use :error_handling
|
37
34
|
# Custom middleware for rotating API keys
|
38
|
-
faraday.use
|
35
|
+
faraday.use :api_keys_rotation, rotation_options
|
39
36
|
# Custom middleware for logging requests and responses
|
40
|
-
faraday.use
|
37
|
+
faraday.use :custom_logger, @logger, formatter: FORMATTER if @logger
|
41
38
|
|
42
39
|
# Adapter definition should be last in order to make the json parsers be loaded correctly
|
43
40
|
faraday.adapter faraday_adapter
|
@@ -7,6 +7,21 @@ module ErpIntegration
|
|
7
7
|
module Resources
|
8
8
|
class PurchaseOrder < ApiResource
|
9
9
|
self.model_name = 'purchase.purchase'
|
10
|
+
|
11
|
+
# Creates a Purchase Order with options.
|
12
|
+
#
|
13
|
+
# @param options [Hash] The options attributes
|
14
|
+
def create_with_options(options)
|
15
|
+
client.post("model/#{model_name}", options)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Updates a Purchase Order with options.
|
19
|
+
#
|
20
|
+
# @param id [Integer, String] The ID of the Purchase Order
|
21
|
+
# @param options [Hash] The options attributes
|
22
|
+
def update_with_options(id, options)
|
23
|
+
client.put("model/#{model_name}/#{id}", options)
|
24
|
+
end
|
10
25
|
end
|
11
26
|
end
|
12
27
|
end
|
@@ -4,7 +4,7 @@ module ErpIntegration
|
|
4
4
|
module Middleware
|
5
5
|
# The `ErrorHandling` middleware allows to raise our own exceptions that
|
6
6
|
# are easier to catch for the host application (e.g. `mejuri-web`).
|
7
|
-
class ErrorHandling < Faraday::
|
7
|
+
class ErrorHandling < Faraday::Middleware
|
8
8
|
HTTP_ERROR_CODES = {
|
9
9
|
400 => ErpIntegration::HttpError::BadRequest,
|
10
10
|
401 => ErpIntegration::HttpError::AuthorizationRequired,
|
@@ -29,3 +29,5 @@ module ErpIntegration
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
Faraday::Middleware.register_middleware(error_handling: ErpIntegration::Middleware::ErrorHandling)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ErpIntegration
|
4
|
+
module Middleware
|
5
|
+
class JsonDecode < Faraday::Middleware
|
6
|
+
class ParseError < StandardError; end
|
7
|
+
|
8
|
+
def call(env)
|
9
|
+
@app.call(env).on_complete { |response| on_complete(response) }
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def on_complete(env)
|
15
|
+
return unless env.body.is_a?(String)
|
16
|
+
|
17
|
+
begin
|
18
|
+
env.body = env.body.empty? ? nil : JSON.parse(env.body)
|
19
|
+
rescue JSON::ParserError
|
20
|
+
raise ParseError, "Failed to parse JSON response: #{env.body}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Faraday::Response.register_middleware(json_decode: ErpIntegration::Middleware::JsonDecode)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ErpIntegration
|
4
|
+
module Middleware
|
5
|
+
class JsonEncode < Faraday::Middleware
|
6
|
+
def call(env)
|
7
|
+
on_request(env)
|
8
|
+
|
9
|
+
@app.call(env)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def on_request(env)
|
15
|
+
env.body = env.body.to_json if env.body
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Faraday::Request.register_middleware(json_encode: ErpIntegration::Middleware::JsonEncode)
|
@@ -11,5 +11,13 @@ module ErpIntegration
|
|
11
11
|
:purchase_person, :reference, :shipment_method, :shipments, :state,
|
12
12
|
:tax_amount, :total_amount, :total_quantity, :untaxed_amount, :write_date,
|
13
13
|
:write_uid
|
14
|
+
|
15
|
+
def create_with_options(options)
|
16
|
+
self.class.adapter.create_with_options(options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def update_with_options(options)
|
20
|
+
self.class.adapter.update_with_options(id, options)
|
21
|
+
end
|
14
22
|
end
|
15
23
|
end
|
data/lib/erp_integration.rb
CHANGED
@@ -5,7 +5,6 @@ require 'active_support/core_ext/string/inflections'
|
|
5
5
|
require 'active_support/core_ext/module/delegation' # Allows using `delegate`
|
6
6
|
require 'active_support/core_ext/object/blank'
|
7
7
|
require 'faraday'
|
8
|
-
require 'faraday_middleware'
|
9
8
|
require 'json'
|
10
9
|
|
11
10
|
require_relative 'erp_integration/version'
|
@@ -20,9 +19,13 @@ require_relative 'erp_integration/middleware/api_keys_rotation'
|
|
20
19
|
require_relative 'erp_integration/middleware/error_handling'
|
21
20
|
require_relative 'erp_integration/middleware/logger'
|
22
21
|
require_relative 'erp_integration/middleware/formatter'
|
22
|
+
require_relative 'erp_integration/middleware/json_encode'
|
23
|
+
require_relative 'erp_integration/middleware/json_decode'
|
23
24
|
|
24
25
|
# HTTP clients
|
25
26
|
require_relative 'erp_integration/fulfil/client'
|
27
|
+
require_relative 'erp_integration/fulfil/persistence'
|
28
|
+
require_relative 'erp_integration/fulfil/api_resource'
|
26
29
|
|
27
30
|
# The `ErpIntegration` integrates Mejuri with third-party ERP vendors.
|
28
31
|
module ErpIntegration
|
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: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Vermaas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-02-
|
11
|
+
date: 2025-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -28,42 +28,16 @@ dependencies:
|
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.17.3
|
34
|
-
- - "<"
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: 1.9.0
|
37
|
-
type: :runtime
|
38
|
-
prerelease: false
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 0.17.3
|
44
|
-
- - "<"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 1.9.0
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: faraday_middleware
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0.14'
|
54
|
-
- - "<"
|
31
|
+
- - "~>"
|
55
32
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
33
|
+
version: '2.12'
|
57
34
|
type: :runtime
|
58
35
|
prerelease: false
|
59
36
|
version_requirements: !ruby/object:Gem::Requirement
|
60
37
|
requirements:
|
61
|
-
- - "
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '0.14'
|
64
|
-
- - "<"
|
38
|
+
- - "~>"
|
65
39
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
40
|
+
version: '2.12'
|
67
41
|
- !ruby/object:Gem::Dependency
|
68
42
|
name: byebug
|
69
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -322,6 +296,8 @@ files:
|
|
322
296
|
- lib/erp_integration/middleware/api_keys_rotation.rb
|
323
297
|
- lib/erp_integration/middleware/error_handling.rb
|
324
298
|
- lib/erp_integration/middleware/formatter.rb
|
299
|
+
- lib/erp_integration/middleware/json_decode.rb
|
300
|
+
- lib/erp_integration/middleware/json_encode.rb
|
325
301
|
- lib/erp_integration/middleware/logger.rb
|
326
302
|
- lib/erp_integration/party_address.rb
|
327
303
|
- lib/erp_integration/product.rb
|