erp_integration 0.20.0 → 0.21.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: 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