aws-sdk-rails 3.9.0 → 3.10.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: 79de6d1c1c8319fd70a36949eebb7630630bbd9b8a566b6f473d51590e48af38
4
- data.tar.gz: a7d383cfecc470333c998f61ca380330dac77dc13dc5d302a5ba6bb34f8e5a81
3
+ metadata.gz: 34ec24104d9eb230956480f01ab20a9eefc670510727104c4b7ee930f31b281c
4
+ data.tar.gz: 8a60649a724d96aac5c927ad8090b3d942d860f3d6b755a3815cdd65777d46fa
5
5
  SHA512:
6
- metadata.gz: 95e0b8f6e3e565b6aeba24955bdbacff0a280de8c7f8a976a75ebadfd28710fc47c34c4fc079d95bb7d2678f60c185ec158719864eee0f8935424d4adb99d2e1
7
- data.tar.gz: 95c7da0d1ac045139de0e1b4f251b1a118cadfa62a4eef3bfe8925df0e914325f7523fb3009cc3bb433828d4ea916f0c1e12b919a689931773317492a6811156
6
+ metadata.gz: 268c6e207ee1736ba3dad6450c7ccf0461ae0bd5dc55eb1bbae755a5ac5853f3edbef91fb140447c1a62327ca73a91bf534e39f908e51a8e771eab859a9fa389
7
+ data.tar.gz: 3033033fa8121807e2306c57368e29095a746741df12eec4f61b0daa7e388cafb1bf93eb35be67664205c3d0040cdb26151d729bb36b11fed2143547b2205780
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.9.0
1
+ 3.10.0
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveJob
4
+ module QueueAdapters
5
+ class AmazonSqsAdapter
6
+ # == build request parameter of Aws::SQS::Client
7
+ class Params
8
+ class << self
9
+ def assured_delay_seconds(timestamp)
10
+ delay = (timestamp - Time.now.to_f).floor
11
+ delay = 0 if delay.negative?
12
+ raise ArgumentError, 'Unable to queue a job with a delay great than 15 minutes' if delay > 15.minutes
13
+
14
+ delay
15
+ end
16
+ end
17
+
18
+ def initialize(job, body)
19
+ @job = job
20
+ @body = body || job.serialize
21
+ end
22
+
23
+ def queue_url
24
+ @queue_url ||= Aws::Rails::SqsActiveJob.config.queue_url_for(@job.queue_name)
25
+ end
26
+
27
+ def entry
28
+ if Aws::Rails::SqsActiveJob.fifo?(queue_url)
29
+ default_entry.merge(options_for_fifo)
30
+ else
31
+ default_entry
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def default_entry
38
+ {
39
+ message_body: Aws::Json.dump(@body),
40
+ message_attributes: message_attributes
41
+ }
42
+ end
43
+
44
+ def message_attributes
45
+ {
46
+ 'aws_sqs_active_job_class' => {
47
+ string_value: @job.class.to_s,
48
+ data_type: 'String'
49
+ },
50
+ 'aws_sqs_active_job_version' => {
51
+ string_value: Aws::Rails::VERSION,
52
+ data_type: 'String'
53
+ }
54
+ }
55
+ end
56
+
57
+ def options_for_fifo
58
+ options = {}
59
+ options[:message_deduplication_id] =
60
+ Digest::SHA256.hexdigest(Aws::Json.dump(deduplication_body))
61
+
62
+ message_group_id = @job.message_group_id if @job.respond_to?(:message_group_id)
63
+ message_group_id ||= Aws::Rails::SqsActiveJob.config.message_group_id
64
+
65
+ options[:message_group_id] = message_group_id
66
+ options
67
+ end
68
+
69
+ def deduplication_body
70
+ ex_dedup_keys = @job.excluded_deduplication_keys if @job.respond_to?(:excluded_deduplication_keys)
71
+ ex_dedup_keys ||= Aws::Rails::SqsActiveJob.config.excluded_deduplication_keys
72
+
73
+ @body.except(*ex_dedup_keys)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -10,53 +10,44 @@ module ActiveJob
10
10
  end
11
11
 
12
12
  def enqueue_at(job, timestamp)
13
- delay = (timestamp - Time.now.to_f).floor
14
- raise ArgumentError, 'Unable to queue a job with a delay great than 15 minutes' if delay > 15.minutes
15
-
13
+ delay = Params.assured_delay_seconds(timestamp)
16
14
  _enqueue(job, nil, delay_seconds: delay)
17
15
  end
18
16
 
17
+ def enqueue_all(jobs)
18
+ enqueued_count = 0
19
+ jobs.group_by(&:queue_name).each do |queue_name, same_queue_jobs|
20
+ queue_url = Aws::Rails::SqsActiveJob.config.queue_url_for(queue_name)
21
+ base_send_message_opts = { queue_url: queue_url }
22
+
23
+ same_queue_jobs.each_slice(10) do |chunk|
24
+ entries = chunk.map do |job|
25
+ entry = Params.new(job, nil).entry
26
+ entry[:id] = job.job_id
27
+ entry[:delay_seconds] = Params.assured_delay_seconds(job.scheduled_at) if job.scheduled_at
28
+ entry
29
+ end
30
+
31
+ send_message_opts = base_send_message_opts.deep_dup
32
+ send_message_opts[:entries] = entries
33
+
34
+ send_message_batch_result = Aws::Rails::SqsActiveJob.config.client.send_message_batch(send_message_opts)
35
+ enqueued_count += send_message_batch_result.successful.count
36
+ end
37
+ end
38
+ enqueued_count
39
+ end
40
+
19
41
  private
20
42
 
21
43
  def _enqueue(job, body = nil, send_message_opts = {})
22
44
  body ||= job.serialize
23
- queue_url = Aws::Rails::SqsActiveJob.config.queue_url_for(job.queue_name)
24
- send_message_opts[:queue_url] = queue_url
25
- send_message_opts[:message_body] = Aws::Json.dump(body)
26
- send_message_opts[:message_attributes] = message_attributes(job)
27
-
28
- if Aws::Rails::SqsActiveJob.fifo?(queue_url)
29
- send_message_opts[:message_deduplication_id] =
30
- Digest::SHA256.hexdigest(Aws::Json.dump(deduplication_body(job, body)))
31
-
32
- message_group_id = job.message_group_id if job.respond_to?(:message_group_id)
33
- message_group_id ||= Aws::Rails::SqsActiveJob.config.message_group_id
34
-
35
- send_message_opts[:message_group_id] = message_group_id
36
- end
45
+ params = Params.new(job, body)
46
+ send_message_opts = send_message_opts.merge(params.entry)
47
+ send_message_opts[:queue_url] = params.queue_url
37
48
 
38
49
  Aws::Rails::SqsActiveJob.config.client.send_message(send_message_opts)
39
50
  end
40
-
41
- def message_attributes(job)
42
- {
43
- 'aws_sqs_active_job_class' => {
44
- string_value: job.class.to_s,
45
- data_type: 'String'
46
- },
47
- 'aws_sqs_active_job_version' => {
48
- string_value: Aws::Rails::VERSION,
49
- data_type: 'String'
50
- }
51
- }
52
- end
53
-
54
- def deduplication_body(job, body)
55
- ex_dedup_keys = job.excluded_deduplication_keys if job.respond_to?(:excluded_deduplication_keys)
56
- ex_dedup_keys ||= Aws::Rails::SqsActiveJob.config.excluded_deduplication_keys
57
-
58
- body.except(*ex_dedup_keys)
59
- end
60
51
  end
61
52
 
62
53
  # create an alias to allow `:amazon` to be used as the adapter name
@@ -126,7 +126,7 @@ module Aws
126
126
  def to_h
127
127
  h = {}
128
128
  instance_variables.each do |v|
129
- v_sym = v.to_s.gsub('@', '').to_sym
129
+ v_sym = v.to_s.delete('@').to_sym
130
130
  val = instance_variable_get(v)
131
131
  h[v_sym] = val
132
132
  end
data/lib/aws-sdk-rails.rb CHANGED
@@ -13,6 +13,7 @@ require_relative 'aws/rails/middleware/ebs_sqs_active_job_middleware'
13
13
 
14
14
  require_relative 'action_dispatch/session/dynamodb_store'
15
15
  require_relative 'active_job/queue_adapters/amazon_sqs_adapter'
16
+ require_relative 'active_job/queue_adapters/amazon_sqs_adapter/params'
16
17
  require_relative 'active_job/queue_adapters/amazon_sqs_async_adapter'
17
18
 
18
19
  require_relative 'generators/aws_record/base'
@@ -147,7 +147,7 @@ module AwsRecord
147
147
  [idx.name, parse_rw_units(idx.name)]
148
148
  end.to_h
149
149
 
150
- options['table_config'].each do |config, _rw_units|
150
+ options['table_config'].each_key do |config|
151
151
  next if config == 'primary'
152
152
 
153
153
  gsi = @gsis.select { |idx| idx.name == config }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.0
4
+ version: 3.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-28 00:00:00.000000000 Z
11
+ date: 2024-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-record
@@ -152,6 +152,7 @@ files:
152
152
  - bin/aws_sqs_active_job
153
153
  - lib/action_dispatch/session/dynamodb_store.rb
154
154
  - lib/active_job/queue_adapters/amazon_sqs_adapter.rb
155
+ - lib/active_job/queue_adapters/amazon_sqs_adapter/params.rb
155
156
  - lib/active_job/queue_adapters/amazon_sqs_async_adapter.rb
156
157
  - lib/aws-sdk-rails.rb
157
158
  - lib/aws/rails/middleware/ebs_sqs_active_job_middleware.rb
@@ -197,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
198
  - !ruby/object:Gem::Version
198
199
  version: '0'
199
200
  requirements: []
200
- rubygems_version: 3.4.10
201
+ rubygems_version: 3.4.22
201
202
  signing_key:
202
203
  specification_version: 4
203
204
  summary: AWS SDK for Ruby on Rails Plugin