erp_integration 0.16.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: c7ff2e87acc7c4f7745cfcde8ba1d63782b62a299f5a45aff3c51432bda90573
4
- data.tar.gz: 77dea511053000c3906a188b81d7352257ceb00748b16f437f868b11e454f4e2
3
+ metadata.gz: 18ec55a600cfb88679e7c8ac4a8e397cd304312a5f85a7c2e54d63307d7c86ff
4
+ data.tar.gz: 106c3c7f314668d09bb8589d1ea5243e4586a705871f891edf95efd0d9228028
5
5
  SHA512:
6
- metadata.gz: 21ddea6ca39edef5b14c05e6503fff43c0b6d91589ce45b9bb1694babeb1d7786bc08c93df899dff6898a643863b3d85414575092874b8af63ad848eeeaa105b
7
- data.tar.gz: fe029b567c7d4f50461dfabe03bc231a2eb7482dc3eff962ef16c0843c4ed8bf0b9049d8513e6bdb15e735a8b9633d1a00869799eb704584005b8141e8f4a12e
6
+ metadata.gz: 9b8cd54866c82420eed9237a40d8d668494763ed7ef15ac588a15d73260e163eb416a1fb8bc316cd4e08624dddfc70a99e99b3056b046ed4ebb0601298ae0728
7
+ data.tar.gz: 90e3145efef13b1d5f6307dd75a74811604cc2766f643970847d3570ff7dcba62fa11c252590b94d9f43f46df2b42352e1de754cf3a55a17f2472ce89a8fc980
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ErpIntegration
4
- VERSION = '0.16.0'
4
+ VERSION = '0.17.0'
5
5
  end
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.16.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
@@ -271,6 +271,7 @@ files:
271
271
  - lib/erp_integration/fulfil/client.rb
272
272
  - lib/erp_integration/fulfil/context.rb
273
273
  - lib/erp_integration/fulfil/finder_methods.rb
274
+ - lib/erp_integration/fulfil/or_clause.rb
274
275
  - lib/erp_integration/fulfil/persistence.rb
275
276
  - lib/erp_integration/fulfil/query.rb
276
277
  - lib/erp_integration/fulfil/query_methods.rb
@@ -334,7 +335,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
335
  - !ruby/object:Gem::Version
335
336
  version: '0'
336
337
  requirements: []
337
- rubygems_version: 3.2.3
338
+ rubygems_version: 3.3.7
338
339
  signing_key:
339
340
  specification_version: 4
340
341
  summary: Connects Mejuri with third-party ERP vendors