erp_integration 0.15.0 → 0.17.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54fc417ece0422718783a178a6a70d86e9d822d0a195996463e07d07a67aeb21
4
- data.tar.gz: a3252c16fc30517a4829b0e617b5c9b4d3d8fd26d86ef1562af33ac1ceb953b9
3
+ metadata.gz: 18ec55a600cfb88679e7c8ac4a8e397cd304312a5f85a7c2e54d63307d7c86ff
4
+ data.tar.gz: 106c3c7f314668d09bb8589d1ea5243e4586a705871f891edf95efd0d9228028
5
5
  SHA512:
6
- metadata.gz: c4e59e843c9740007d99511ea3a5a364f57d0077e40826c2d7528c2c4665dcbb1ebc6ba4f217628b4584cf25f257fd39f944c5d214036232377acf0ce5e06caf
7
- data.tar.gz: bd78fe69cc0d4218a18dda58291a6f18cb37a6d7ac922e80cfff298fb5352ac42848f097d97c6ce931ac134cf54ac0e445a9568b6979edb556e68ac7a6c8d42c
6
+ metadata.gz: 9b8cd54866c82420eed9237a40d8d668494763ed7ef15ac588a15d73260e163eb416a1fb8bc316cd4e08624dddfc70a99e99b3056b046ed4ebb0601298ae0728
7
+ data.tar.gz: 90e3145efef13b1d5f6307dd75a74811604cc2766f643970847d3570ff7dcba62fa11c252590b94d9f43f46df2b42352e1de754cf3a55a17f2472ce89a8fc980
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ErpIntegration
4
+ # The `ErpIntegration::ChannelListing` exposes an uniformed API for interaction with
5
+ # third-party ERP vendors.
6
+ class ChannelListing < Resource
7
+ attr_accessor :id, :channel, :product, :quantity
8
+ end
9
+ end
@@ -37,6 +37,11 @@ module ErpIntegration
37
37
  # @return [Symbol] The configured adapter for the bill_of_material.
38
38
  attr_writer :bill_of_material_output_adapter
39
39
 
40
+ # Allows configuring an adapter for the `ChannelListing` resource. When
41
+ # none is configured, it will default to Fulfil.
42
+ # @return [Symbol] The configured adapter for the channel_listing.
43
+ attr_writer :channel_listing_adapter
44
+
40
45
  # Allows configuring an adapter for the `CustomerShipment` resource. When
41
46
  # none is configured, it will default to Fulfil.
42
47
  # @return [Symbol] The configured adapter for the customer shipment.
@@ -124,6 +129,10 @@ module ErpIntegration
124
129
  @bill_of_material_output_adapter || :fulfil
125
130
  end
126
131
 
132
+ def channel_listing_adapter
133
+ @channel_listing_adapter || :fulfil
134
+ end
135
+
127
136
  def customer_shipment_adapter
128
137
  @customer_shipment_adapter || :fulfil
129
138
  end
@@ -63,7 +63,7 @@ module ErpIntegration
63
63
  @results =
64
64
  client.put(
65
65
  api_resource_path,
66
- Query.new(selected_fields, where_clauses)
66
+ Query.new(selected_fields, where_clauses, or_clauses)
67
67
  ).map { |item| resource_klass.new(item) }
68
68
  end
69
69
 
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ErpIntegration
4
+ module Fulfil
5
+ class OrClause
6
+ LOGIC_OPERATOR = 'OR'
7
+
8
+ def initialize(where_clauses:)
9
+ @where_clauses = where_clauses
10
+ end
11
+
12
+ def to_filter
13
+ return [] unless @where_clauses.any?
14
+
15
+ @where_clauses.map(&:to_filter).unshift(LOGIC_OPERATOR)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -23,9 +23,10 @@ module ErpIntegration
23
23
 
24
24
  # @param fields [Array<String|Symbol>] A list of fields for Fulfil.
25
25
  # @param filters [Array<WhereClause>] A list of where clauses for Fulfil.
26
- def initialize(fields, filters)
26
+ def initialize(fields, filters, alternative_filters = [])
27
27
  @fields = (fields || DEFAULT_FIELDS).map(&:to_s).uniq
28
28
  @filters = (filters || []).map(&:to_filter).uniq
29
+ @filters += alternative_filters.map(&:to_filter).uniq if alternative_filters&.any?
29
30
  end
30
31
 
31
32
  def to_json(*_object)
@@ -2,11 +2,12 @@
2
2
 
3
3
  require_relative 'query'
4
4
  require_relative 'where_clause'
5
+ require_relative 'or_clause'
5
6
 
6
7
  module ErpIntegration
7
8
  module Fulfil
8
9
  module QueryMethods
9
- attr_accessor :selected_fields, :where_clauses
10
+ attr_accessor :selected_fields, :where_clauses, :or_clauses
10
11
 
11
12
  # The `QueryMethods#select` works in two unique ways
12
13
  #
@@ -82,6 +83,47 @@ module ErpIntegration
82
83
  self
83
84
  end
84
85
 
86
+ # The `or` method introduces an interface to query resources in Fulfil
87
+ # Is quite similar to the `where` method but with one big difference.
88
+ # The `or` method allows us to use the OR operator with several conditions
89
+ #
90
+ # @example
91
+ # $ ErpIntegration::SalesOrder.or(id: 100, carrier: 12).all
92
+ # # => <ErpIntegration::Fulfil::Collection @items=[
93
+ # <ErpIntegration::SalesOrder:0x00007f8577cb6d40 @carrier=12, @id=3179663 />
94
+ # <ErpIntegration::SalesOrder:0x00007f8577cb6d40 @carrier=16, @id=100 /> ] />
95
+ #
96
+ # @example
97
+ # $ ErpIntegration::SalesOrder.or(id: [100, 200]).all
98
+ # # => <ErpIntegration::Fulfil::Collection @items=[
99
+ # <ErpIntegration::SalesOrder:0x00007f8577cb6d40 @id=100 />
100
+ # <ErpIntegration::SalesOrder:0x00007f8577cb6d40 @id=200 /> ] />
101
+ #
102
+ # Now we are just accepting the last 'or' method so if we have multiple
103
+ # we are only accepting the last one.
104
+ def or(*args)
105
+ clone.or!(*args)
106
+ end
107
+
108
+ def or!(args)
109
+ where_clauses = []
110
+ args.each_pair do |key, value_or_values|
111
+ [*value_or_values].each do |value|
112
+ where_clauses << WhereClause.new(
113
+ key: key, value: value
114
+ )
115
+ end
116
+ end
117
+
118
+ self.or_clauses = [
119
+ OrClause.new(
120
+ where_clauses: where_clauses
121
+ )
122
+ ]
123
+
124
+ self
125
+ end
126
+
85
127
  def where_ilike(args)
86
128
  where(args.merge(comparison_operator: 'ilike'))
87
129
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../api_resource'
4
+
5
+ module ErpIntegration
6
+ module Fulfil
7
+ module Resources
8
+ class ChannelListing < ApiResource
9
+ self.model_name = 'product.product.channel_listing'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ErpIntegration
4
- VERSION = '0.15.0'
4
+ VERSION = '0.17.0'
5
5
  end
@@ -23,6 +23,7 @@ module ErpIntegration
23
23
  autoload :BillOfMaterial, 'erp_integration/bill_of_material'
24
24
  autoload :BillOfMaterialInput, 'erp_integration/bill_of_material_input'
25
25
  autoload :BillOfMaterialOutput, 'erp_integration/bill_of_material_output'
26
+ autoload :ChannelListing, 'erp_integration/channel_listing'
26
27
  autoload :CustomerShipment, 'erp_integration/customer_shipment'
27
28
  autoload :CustomerShipmentReturn, 'erp_integration/customer_shipment_return'
28
29
  autoload :Product, 'erp_integration/product'
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.15.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Vermaas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-14 00:00:00.000000000 Z
11
+ date: 2023-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -262,6 +262,7 @@ files:
262
262
  - lib/erp_integration/bill_of_material.rb
263
263
  - lib/erp_integration/bill_of_material_input.rb
264
264
  - lib/erp_integration/bill_of_material_output.rb
265
+ - lib/erp_integration/channel_listing.rb
265
266
  - lib/erp_integration/configuration.rb
266
267
  - lib/erp_integration/customer_shipment.rb
267
268
  - lib/erp_integration/customer_shipment_return.rb
@@ -270,12 +271,14 @@ files:
270
271
  - lib/erp_integration/fulfil/client.rb
271
272
  - lib/erp_integration/fulfil/context.rb
272
273
  - lib/erp_integration/fulfil/finder_methods.rb
274
+ - lib/erp_integration/fulfil/or_clause.rb
273
275
  - lib/erp_integration/fulfil/persistence.rb
274
276
  - lib/erp_integration/fulfil/query.rb
275
277
  - lib/erp_integration/fulfil/query_methods.rb
276
278
  - lib/erp_integration/fulfil/resources/bill_of_material.rb
277
279
  - lib/erp_integration/fulfil/resources/bill_of_material_input.rb
278
280
  - lib/erp_integration/fulfil/resources/bill_of_material_output.rb
281
+ - lib/erp_integration/fulfil/resources/channel_listing.rb
279
282
  - lib/erp_integration/fulfil/resources/customer_shipment.rb
280
283
  - lib/erp_integration/fulfil/resources/customer_shipment_return.rb
281
284
  - lib/erp_integration/fulfil/resources/product.rb
@@ -332,7 +335,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
332
335
  - !ruby/object:Gem::Version
333
336
  version: '0'
334
337
  requirements: []
335
- rubygems_version: 3.2.22
338
+ rubygems_version: 3.3.7
336
339
  signing_key:
337
340
  specification_version: 4
338
341
  summary: Connects Mejuri with third-party ERP vendors