erp_integration 0.15.0 → 0.17.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: 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