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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb75aaf6e64d6ef01f00956f20fb796669477fd7c627e747f97980bff5ddb5da
4
- data.tar.gz: '098968ee5bc648abc6dbc410d623d5561ddd692954b5b12f5e2abb5c6e955d0c'
3
+ metadata.gz: ad3730a4402988984abd10fe810f4865cfee54f4dbc432bfbd43aaf8417153ec
4
+ data.tar.gz: 1735fdccbea6c4b29ab44f01d8a07965f0acf0c5d4c30ae55a5a082b8fd2df1d
5
5
  SHA512:
6
- metadata.gz: 82785e30614943d05dc3385bd11baf281cf306b7fcdd8723575dc8f1a4533abc05b4919accf6b346d29c03f1ab9719d411bd66ca8f727fa9ca416cab557ef812
7
- data.tar.gz: c20e9376d1f3b151568d987a1626dee8bb4cb360eae8c7d011ea6e4b92e6ab1e20214f1f40565726d4c30f627b003b099b33783df66b8853ca04185f08548ae5
6
+ metadata.gz: 4cb38e50117fe3ac7ce1da2a3bcddd7446d34aa51b75401bf9f188fab95a7f641a4cc308420bdbd018501633683c4fc96ebb258feb037cda7e3bd6b3315f5b46
7
+ data.tar.gz: 314fab0d17387b28df68fc5686c54902d5a73e6b646e460abaadfcca940fb719ffc013af602064f5923c15ab37604612d45e81ad39b7cf966d64cb06ad87b4eb
@@ -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', '>= 0.17.3', '< 1.9.0'
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 :json # Encode request bodies as JSON
30
- faraday.request :retry # Retry transient failures
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 ErpIntegration::Middleware::ErrorHandling
33
+ faraday.use :error_handling
37
34
  # Custom middleware for rotating API keys
38
- faraday.use ErpIntegration::Middleware::ApiKeysRotation, rotation_options
35
+ faraday.use :api_keys_rotation, rotation_options
39
36
  # Custom middleware for logging requests and responses
40
- faraday.use ErpIntegration::Middleware::Logger, @logger, formatter: FORMATTER if @logger
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
@@ -38,3 +38,5 @@ module ErpIntegration
38
38
  end
39
39
  end
40
40
  end
41
+
42
+ Faraday::Middleware.register_middleware(api_keys_rotation: ErpIntegration::Middleware::ApiKeysRotation)
@@ -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::Response::Middleware
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)
@@ -49,3 +49,5 @@ module ErpIntegration
49
49
  end
50
50
  end
51
51
  end
52
+
53
+ Faraday::Middleware.register_middleware(custom_logger: ErpIntegration::Middleware::Logger)
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ErpIntegration
4
- VERSION = '0.63.0'
4
+ VERSION = '1.0.1'
5
5
  end
@@ -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.63.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-05 00:00:00.000000000 Z
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: '1.3'
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: '1.3'
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