promoted-ruby-client 4.0.0 → 5.0.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: a4d336aef96b116acbe2e611279e9ccefe5efce88063d5c530fb669b32383d10
4
- data.tar.gz: 6df512d099b5a5b9414b2672847585db2118825b87c178b923da26ba2cb610e8
3
+ metadata.gz: 3b71559ca253efcd620dbbc41ccd95dc17f479a4d9efe3241565038edee43acb
4
+ data.tar.gz: cfb8da8803830124ea5c6147d83150c05d14068518b0d45285528096925a62a3
5
5
  SHA512:
6
- metadata.gz: 7375f08d88303d6de8eefaf3a4b7e2b80333f15e8b709781c4884aee54d84c9d64b6bdc834c4a5c53f1f426a04a5aed9752cc7ceba78d6015f100d7ee6096e0c
7
- data.tar.gz: 2cdff05db0a989331ca56e0f18716f53e635ea7d000d685275693b21445a313763e2001827b201ec2863173eb52f54744b50177f824ae7a0d44a85f975105e5e
6
+ metadata.gz: 20717e1151bb52bb1917456ee22a8e73382b7e8ca0fb33d1aad73f2150e3533837b5ce0c20464a65d1988398be27218af2884eb16227a1a8660a47c600f4d220
7
+ data.tar.gz: 8d4dff6877a2d28dca45c17116292ef6a2c78e2f6e78b4a255b52c1f3c1aab5fb7daaa62d80655f2e6c90527eff44840f27fe85aef04ac85938710f7ef9a738d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- promoted-ruby-client (4.0.0)
4
+ promoted-ruby-client (5.0.0)
5
5
  concurrent-ruby (~> 1)
6
6
  faraday (>= 0.9.0)
7
7
  faraday_middleware (>= 0.9.0)
data/dev.md CHANGED
@@ -11,4 +11,4 @@ bundle exec rspec
11
11
  3. Modify `promoted-ruby-client.gemspec`'s push block.
12
12
  4. Run `gem build promoted-ruby-client.gemspec` to generate `gem`.
13
13
  5. Run `bundle exec rspec`. This updates `Gemfile.lock`.
14
- 6. Run (using new output) `gem push promoted-ruby-client-4.0.0.gem`
14
+ 6. Run (using new output) `gem push promoted-ruby-client-5.0.0.gem`
@@ -13,24 +13,28 @@ module Promoted
13
13
  class Pager
14
14
  def validate_paging(insertions, retrieval_insertion_offset, paging)
15
15
  if paging && paging[:offset]
16
- offset = [0, paging[:offset]].max
17
- if offset >= insertions.length
18
- raise InvalidPagingError.new("Invalid page offset (insertion size #{insertions.length}, offset #{offset})", [])
19
- end
20
- if offset < retrieval_insertion_offset
21
- raise InvalidPagingError.new("Invalid page offset (retrieval_insertion_offset #{retrieval_insertion_offset}, offset #{offset})", [])
22
- end
16
+ offset, retrieval_insertion_offset, index = _sanitize_offsets(retrieval_insertion_offset, paging)
17
+ _validate_paging(insertions, retrieval_insertion_offset, offset, index)
23
18
  end
24
19
  end
25
20
 
26
- def apply_paging(insertions, retrieval_insertion_offset, paging = nil)
27
- begin
28
- validate_paging(insertions, retrieval_insertion_offset, paging)
29
- rescue InvalidPagingError => err
30
- # This is invalid input, stop it before it goes to the server.
31
- return err.default_insertions_page
21
+ def _sanitize_offsets(retrieval_insertion_offset, paging)
22
+ offset = [0, paging[:offset]].max
23
+ retrieval_insertion_offset = [0, retrieval_insertion_offset].max
24
+ index = [0, offset - retrieval_insertion_offset].max
25
+ return [offset, retrieval_insertion_offset, index]
26
+ end
27
+
28
+ def _validate_paging(insertions, retrieval_insertion_offset, offset, index)
29
+ if offset < retrieval_insertion_offset
30
+ raise InvalidPagingError.new("Invalid page offset (retrieval_insertion_offset #{retrieval_insertion_offset}, offset #{offset})", [])
31
+ end
32
+ if index >= insertions.length
33
+ raise InvalidPagingError.new("Invalid page offset (insertion size #{insertions.length}, index #{index})", [])
32
34
  end
35
+ end
33
36
 
37
+ def apply_paging(insertions, retrieval_insertion_offset, paging = nil)
34
38
  if !paging
35
39
  paging = {
36
40
  :offset => 0,
@@ -38,9 +42,14 @@ module Promoted
38
42
  }
39
43
  end
40
44
 
41
- offset = [0, paging[:offset]].max
42
- retrieval_insertion_offset = [0, retrieval_insertion_offset].max
43
- index = [0, offset - retrieval_insertion_offset].max
45
+ offset, retrieval_insertion_offset, index = _sanitize_offsets(retrieval_insertion_offset, paging)
46
+
47
+ begin
48
+ _validate_paging(insertions, retrieval_insertion_offset, offset, index)
49
+ rescue InvalidPagingError => err
50
+ # This is invalid input, stop it before it goes to the server.
51
+ return err.default_insertions_page
52
+ end
44
53
 
45
54
  size = paging[:size]
46
55
  if size <= 0
@@ -135,7 +135,7 @@ module Promoted
135
135
  end
136
136
 
137
137
  # TODO - delete?
138
- def validate_metrics_request!(metrics_req)
138
+ def validate_delivery_args!(metrics_req)
139
139
  validate_fields!(
140
140
  metrics_req,
141
141
  "metrics request",
@@ -143,6 +143,10 @@ module Promoted
143
143
  {
144
144
  :name => :request,
145
145
  :required => true
146
+ },
147
+ {
148
+ :name => :retrieval_insertion_offset,
149
+ :type => Integer
146
150
  }
147
151
  ]
148
152
  )
@@ -1,7 +1,7 @@
1
1
  module Promoted
2
2
  module Ruby
3
3
  module Client
4
- VERSION = "4.0.0"
4
+ VERSION = "5.0.0"
5
5
  SERVER_VERSION = "rb." + VERSION
6
6
  end
7
7
  end
@@ -54,7 +54,6 @@ module Promoted
54
54
 
55
55
  @sampler = Sampler.new
56
56
  @pager = Pager.new
57
- @retrieval_insertion_offset = params[:retrieval_insertion_offset] || 0
58
57
 
59
58
  # HTTP Client creation
60
59
  @delivery_endpoint = params[:delivery_endpoint] || DEFAULT_DELIVERY_ENDPOINT
@@ -116,11 +115,12 @@ module Promoted
116
115
  # Make a delivery request. If @perform_checks is set, input validation will occur and possibly raise errors.
117
116
  def deliver args, headers={}
118
117
  args = Promoted::Ruby::Client::Util.translate_hash(args)
118
+ retrieval_insertion_offset = args[:retrieval_insertion_offset] || 0
119
119
 
120
120
  # Respect the enabled state
121
121
  if !@enabled
122
122
  return {
123
- insertion: @pager.apply_paging(args[:request][:insertion], @retrieval_insertion_offset, args[:request][:paging])
123
+ insertion: @pager.apply_paging(args[:request][:insertion], retrieval_insertion_offset, args[:request][:paging])
124
124
  # No log request returned when disabled
125
125
  }
126
126
  end
@@ -152,7 +152,7 @@ module Promoted
152
152
  end
153
153
 
154
154
  begin
155
- @pager.validate_paging(delivery_request_builder.insertion, @retrieval_insertion_offset, delivery_request_builder.request[:paging])
155
+ @pager.validate_paging(delivery_request_builder.insertion, retrieval_insertion_offset, delivery_request_builder.request[:paging])
156
156
  rescue InvalidPagingError => err
157
157
  # Invalid input, log and do SDK-side delivery.
158
158
  @logger.warn(err) if @logger
@@ -194,7 +194,7 @@ module Promoted
194
194
  end
195
195
 
196
196
  if !insertions_from_delivery then
197
- response_insertions = build_sdk_response_insertions(delivery_request_builder)
197
+ response_insertions = build_sdk_response_insertions(delivery_request_builder, retrieval_insertion_offset)
198
198
  end
199
199
 
200
200
  log_req = nil
@@ -239,8 +239,8 @@ module Promoted
239
239
 
240
240
  ##
241
241
  # Creates response insertions for SDK-side delivery, when we don't get response insertions from Delivery API.
242
- def build_sdk_response_insertions delivery_request_builder
243
- response_insertions = @pager.apply_paging(delivery_request_builder.insertion, @retrieval_insertion_offset, delivery_request_builder.request[:paging])
242
+ def build_sdk_response_insertions delivery_request_builder, retrieval_insertion_offset
243
+ response_insertions = @pager.apply_paging(delivery_request_builder.insertion, retrieval_insertion_offset, delivery_request_builder.request[:paging])
244
244
  delivery_request_builder.add_missing_insertion_ids! response_insertions
245
245
  return response_insertions
246
246
  end
@@ -317,7 +317,7 @@ module Promoted
317
317
  delivery_request_params[:client_info][:traffic_type] = Promoted::Ruby::Client::TRAFFIC_TYPE['SHADOW']
318
318
 
319
319
  begin
320
- @pager.validate_paging(delivery_request_builder.insertion, @retrieval_insertion_offset, delivery_request_builder.request[:paging])
320
+ @pager.validate_paging(delivery_request_builder.insertion, args[:retrieval_insertion_offset], delivery_request_builder.request[:paging])
321
321
  rescue InvalidPagingError => err
322
322
  # Invalid input, log and skip.
323
323
  @logger.warn("Shadow traffic call failed with invalid paging #{err}") if @logger
@@ -344,11 +344,11 @@ module Promoted
344
344
  end
345
345
  end
346
346
 
347
- def perform_common_checks!(req)
347
+ def perform_common_checks!(delivery_args)
348
348
  begin
349
- @validator.check_that_log_ids_not_set!(req)
350
- @validator.validate_metrics_request!(req)
351
- @validator.check_that_content_ids_are_set!(req)
349
+ @validator.check_that_log_ids_not_set!(delivery_args)
350
+ @validator.validate_delivery_args!(delivery_args)
351
+ @validator.check_that_content_ids_are_set!(delivery_args)
352
352
  rescue StandardError => err
353
353
  @logger.error(err) if @logger
354
354
  raise
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: promoted-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - scottmcmaster
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-17 00:00:00.000000000 Z
11
+ date: 2023-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday