erp_integration 0.20.0 → 0.21.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: cc78fc9da96c988f29c92bf41501a8827626453e66fdd806f51e16a9f1b8e1bc
4
- data.tar.gz: 7f0d3551bdb15ae06fbe67c96ff2d257f14a61eddc3cbe56d554643ec767e6ae
3
+ metadata.gz: c03eaf82065763fce0b3bf8b771b2af9a04e588ab56056f3b617f7696db110ad
4
+ data.tar.gz: bfdf6e68ea49ad4e72a5cfcaa28d2b99d39d67f26cebb866214583076e607047
5
5
  SHA512:
6
- metadata.gz: 642e6917b8580bece6dc22acde22db86f91060419a059eda273861c2c6bf02928220128e4123249533024cf9b88a3d9455208065b538dc82a3a3080ccebd7f69
7
- data.tar.gz: 0f542badd49a4615043e4b237d48606d18c354091fe564d74a92a005846e22338c76b1abff03be6ac99c26f358d78f46ce205dec44c2cb8c02ddcccd5769f864
6
+ metadata.gz: e368a61cd727304adf94f5dbfb14f149b2c976b27e68c7d1de00b93dee9d279f35dfcbf58d197ef3f9775cbf6a0e1d18af1c4ac0883edf8e3466eabe8c7c9fd4
7
+ data.tar.gz: b82940b549df5f315167152bcc65c60ce7fc44ed44d8863513238e06c66e330e553dd2cdbe6799bd01b7c3b418b5fb45d8e2d14d8f0e949e8b9a2c787c93be69
@@ -69,8 +69,8 @@ module ErpIntegration
69
69
  fields: selected_fields,
70
70
  filters: where_clauses,
71
71
  alternative_filters: or_clauses,
72
- offset: offset_value,
73
- limit: limit_value
72
+ limit: limit_value,
73
+ offset: calculated_offset
74
74
  )
75
75
  ).map { |item| resource_klass.new(item) }
76
76
  end
@@ -90,7 +90,7 @@ module ErpIntegration
90
90
  fields: nil,
91
91
  filters: where_clauses,
92
92
  alternative_filters: or_clauses
93
- ).to_h.except(:fields, :offset, :limit)
93
+ ).to_h.except(:fields)
94
94
  )
95
95
  end
96
96
 
@@ -3,18 +3,19 @@
3
3
  module ErpIntegration
4
4
  module Fulfil
5
5
  module PaginationMethods
6
- DEFAULT_OFFSET = 0
6
+ DEFAULT_LIMIT = 500 # Default limit set in FF
7
+ DEFAULT_OFFSET = 0 # Default offset set by FF
7
8
  MAX_LIMIT = 500 # Max limit set by FF
8
9
 
9
- attr_accessor :offset_value, :limit_value
10
+ attr_accessor :limit_value, :offset_value, :page_number
10
11
 
11
12
  # The {#offset} method allows navigating through the returned resources from
12
13
  # Fulfil's API endpoints just as with a regular database.
13
14
  #
14
- # @param value [Integer] The offset for the number of resources.
15
+ # @param value [String, Integer] The offset for the number of resources.
15
16
  # @return [ErpIntegration::Fulfil::ApiResource]
16
17
  def offset(value)
17
- clone.offset!(value)
18
+ clone.offset!(value.to_i)
18
19
  end
19
20
 
20
21
  def offset!(value)
@@ -28,16 +29,58 @@ module ErpIntegration
28
29
  #
29
30
  # NOTE: The maximum limit is 500 per dictation of Fulfil.
30
31
  #
31
- # @param value [Integer] The number of resources to return.
32
+ # @param value [String, Integer] The number of resources to return.
32
33
  # @return [ErpIntegration::Fulfil::ApiResource]
33
34
  def limit(value)
34
- clone.limit!(value)
35
+ clone.limit!(value.to_i)
35
36
  end
36
37
 
37
38
  def limit!(value)
38
39
  self.limit_value = [value, MAX_LIMIT].min
39
40
  self
40
41
  end
42
+
43
+ alias per_page limit
44
+
45
+ # The `page` method will simplify the use of `limit` and `offset` together with
46
+ # the `per_page` method. Is the quantity of pages that we want to get on the response.
47
+ # It sets the instance variable page_number which will be useful to calculate the offset
48
+ # lazily when the method `calculated_offset` is called. This is because we need to know
49
+ # first the limit before calculate the offset
50
+ #
51
+ # @param page_number [Integer, String]
52
+ # @return [ErpIntegration::Fulfil::ApiResource]
53
+ def page(page_number)
54
+ clone.page!(page_number.to_i)
55
+ end
56
+
57
+ # @param page_number [Integer]
58
+ # @return [ErpIntegration::Fulfil::ApiResource]
59
+ def page!(page_number)
60
+ self.page_number = page_number
61
+ self
62
+ end
63
+
64
+ private
65
+
66
+ # @return [Boolean]
67
+ def paginating?
68
+ !page_number.nil?
69
+ end
70
+
71
+ # The `calculated_offset` will calculate the offset_value instance variable lazily
72
+ # @return [Integer]
73
+ def calculated_offset
74
+ return offset_value unless paginating?
75
+
76
+ # When paginating we want to set the {#limit_value} to equal the {MAX_LIMIT}
77
+ # when the {#limit_value} isn't set to prevent inconsistencies in the API response.
78
+ limit!(MAX_LIMIT) if limit_value.nil?
79
+
80
+ # Now, calculate the offset_value based on the {#limit_value} and the {#page_number}.
81
+ offset!((page_number - 1) * limit_value)
82
+ offset_value
83
+ end
41
84
  end
42
85
  end
43
86
  end
@@ -38,12 +38,12 @@ module ErpIntegration
38
38
  end
39
39
 
40
40
  def to_h
41
- {
42
- fields: @fields,
43
- filters: @filters,
44
- offset: @offset,
45
- limit: @limit
46
- }
41
+ {}.tap do |hash|
42
+ hash[:fields] = @fields
43
+ hash[:filters] = @filters
44
+ hash[:limit] = @limit if @limit
45
+ hash[:offset] = @offset if @offset
46
+ end
47
47
  end
48
48
  end
49
49
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ErpIntegration
4
- VERSION = '0.20.0'
4
+ VERSION = '0.21.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.20.0
4
+ version: 0.21.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: 2023-01-27 00:00:00.000000000 Z
11
+ date: 2023-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport