From 9f18283fa86e4ae10922c9f6c8affc2cf615cfda Mon Sep 17 00:00:00 2001 From: kakubin Date: Sat, 20 Jul 2024 14:04:28 +0900 Subject: [PATCH 1/4] Consolidate the loading of modules related to AWS SQS ActiveJob --- lib/aws-sdk-rails.rb | 9 +-------- lib/aws/rails/sqs_active_job.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 lib/aws/rails/sqs_active_job.rb diff --git a/lib/aws-sdk-rails.rb b/lib/aws-sdk-rails.rb index 64b7e7ac..5754bb21 100644 --- a/lib/aws-sdk-rails.rb +++ b/lib/aws-sdk-rails.rb @@ -5,17 +5,10 @@ require_relative 'aws/rails/railtie' require_relative 'aws/rails/action_mailbox/engine' require_relative 'aws/rails/notifications' -require_relative 'aws/rails/sqs_active_job/configuration' -require_relative 'aws/rails/sqs_active_job/deduplication' -require_relative 'aws/rails/sqs_active_job/executor' -require_relative 'aws/rails/sqs_active_job/job_runner' -require_relative 'aws/rails/sqs_active_job/lambda_handler' +require_relative 'aws/rails/sqs_active_job' require_relative 'aws/rails/middleware/ebs_sqs_active_job_middleware' require_relative 'action_dispatch/session/dynamodb_store' -require_relative 'active_job/queue_adapters/sqs_adapter' -require_relative 'active_job/queue_adapters/sqs_adapter/params' -require_relative 'active_job/queue_adapters/sqs_async_adapter' require_relative 'generators/aws_record/base' diff --git a/lib/aws/rails/sqs_active_job.rb b/lib/aws/rails/sqs_active_job.rb new file mode 100644 index 00000000..fc8a4686 --- /dev/null +++ b/lib/aws/rails/sqs_active_job.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require_relative '../../active_job/queue_adapters/sqs_adapter' +require_relative '../../active_job/queue_adapters/sqs_adapter/params' +require_relative '../../active_job/queue_adapters/sqs_async_adapter' +require_relative 'sqs_active_job/configuration' +require_relative 'sqs_active_job/deduplication' +require_relative 'sqs_active_job/executor' +require_relative 'sqs_active_job/job_runner' +require_relative 'sqs_active_job/lambda_handler' + +module Aws + module Rails + # == AWS SQS ActiveJob. + # + # SQS-based queuing backend for Active Job. + module SqsActiveJob; end + end +end From 5428e36c314716590bb92950474ba69ca492d7eb Mon Sep 17 00:00:00 2001 From: kakubin Date: Sat, 20 Jul 2024 14:06:03 +0900 Subject: [PATCH 2/4] Move SqsActiveJob's class methods --- lib/aws/rails/sqs_active_job.rb | 16 +++++++- lib/aws/rails/sqs_active_job/configuration.rb | 14 ------- .../sqs_active_job/configuration_spec.rb | 30 -------------- spec/aws/rails/sqs_active_job_spec.rb | 39 +++++++++++++++++++ 4 files changed, 54 insertions(+), 45 deletions(-) create mode 100644 spec/aws/rails/sqs_active_job_spec.rb diff --git a/lib/aws/rails/sqs_active_job.rb b/lib/aws/rails/sqs_active_job.rb index fc8a4686..414832f1 100644 --- a/lib/aws/rails/sqs_active_job.rb +++ b/lib/aws/rails/sqs_active_job.rb @@ -14,6 +14,20 @@ module Rails # == AWS SQS ActiveJob. # # SQS-based queuing backend for Active Job. - module SqsActiveJob; end + module SqsActiveJob + # @return [Configuration] the (singleton) Configuration + def self.config + @config ||= Configuration.new + end + + # @yield Configuration + def self.configure + yield(config) + end + + def self.fifo?(queue_url) + queue_url.ends_with? '.fifo' + end + end end end diff --git a/lib/aws/rails/sqs_active_job/configuration.rb b/lib/aws/rails/sqs_active_job/configuration.rb index 33fc116f..b3b490ee 100644 --- a/lib/aws/rails/sqs_active_job/configuration.rb +++ b/lib/aws/rails/sqs_active_job/configuration.rb @@ -4,20 +4,6 @@ module Aws module Rails # Configuration for AWS SQS ActiveJob. module SqsActiveJob - # @return [Configuration] the (singleton) Configuration - def self.config - @config ||= Configuration.new - end - - # @yield Configuration - def self.configure - yield(config) - end - - def self.fifo?(queue_url) - queue_url.ends_with? '.fifo' - end - # Use +Aws::Rails::SqsActiveJob.config+ to access the singleton config instance. class Configuration # Default configuration options diff --git a/spec/aws/rails/sqs_active_job/configuration_spec.rb b/spec/aws/rails/sqs_active_job/configuration_spec.rb index b48699fd..47e50bf1 100644 --- a/spec/aws/rails/sqs_active_job/configuration_spec.rb +++ b/spec/aws/rails/sqs_active_job/configuration_spec.rb @@ -49,36 +49,6 @@ module SqsActiveJob expect { Aws::Rails::SqsActiveJob::Configuration.new }.to_not raise_error end - describe '.config' do - before { Aws::Rails::SqsActiveJob.instance_variable_set(:@config, nil) } - - it 'creates and returns configuration' do - expect(Aws::Rails::SqsActiveJob::Configuration).to receive(:new).and_call_original - expect(Aws::Rails::SqsActiveJob.config).to be_a Aws::Rails::SqsActiveJob::Configuration - end - - it 'creates config only once' do - expect(Aws::Rails::SqsActiveJob::Configuration).to receive(:new).once.and_call_original - # call twice - Aws::Rails::SqsActiveJob.config - Aws::Rails::SqsActiveJob.config - end - end - - describe '.configure' do - it 'allows configuration through a block' do - Aws::Rails::SqsActiveJob.configure do |config| - config.visibility_timeout = 360 - config.excluded_deduplication_keys = [:job_class] - end - - expect(Aws::Rails::SqsActiveJob.config).to have_attributes( - visibility_timeout: 360, - excluded_deduplication_keys: contain_exactly('job_class', 'job_id') - ) - end - end - describe '#client' do it 'does not create client on initialize' do expect(Aws::SQS::Client).not_to receive(:new) diff --git a/spec/aws/rails/sqs_active_job_spec.rb b/spec/aws/rails/sqs_active_job_spec.rb new file mode 100644 index 00000000..e76f5db4 --- /dev/null +++ b/spec/aws/rails/sqs_active_job_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'test_helper' + +module Aws + module Rails + describe SqsActiveJob do + describe '.config' do + before { Aws::Rails::SqsActiveJob.instance_variable_set(:@config, nil) } + + it 'creates and returns configuration' do + expect(Aws::Rails::SqsActiveJob::Configuration).to receive(:new).and_call_original + expect(Aws::Rails::SqsActiveJob.config).to be_a Aws::Rails::SqsActiveJob::Configuration + end + + it 'creates config only once' do + expect(Aws::Rails::SqsActiveJob::Configuration).to receive(:new).once.and_call_original + # call twice + Aws::Rails::SqsActiveJob.config + Aws::Rails::SqsActiveJob.config + end + end + + describe '.configure' do + it 'allows configuration through a block' do + Aws::Rails::SqsActiveJob.configure do |config| + config.visibility_timeout = 360 + config.excluded_deduplication_keys = [:job_class] + end + + expect(Aws::Rails::SqsActiveJob.config).to have_attributes( + visibility_timeout: 360, + excluded_deduplication_keys: contain_exactly('job_class', 'job_id') + ) + end + end + end + end +end From 6531ca44293f1003ae1b965966fc85d6fdc311d1 Mon Sep 17 00:00:00 2001 From: Matt Muller Date: Sun, 21 Jul 2024 20:05:26 -0400 Subject: [PATCH 3/4] Add fifo tests that were missing --- spec/aws/rails/sqs_active_job_spec.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spec/aws/rails/sqs_active_job_spec.rb b/spec/aws/rails/sqs_active_job_spec.rb index e76f5db4..0a1435d4 100644 --- a/spec/aws/rails/sqs_active_job_spec.rb +++ b/spec/aws/rails/sqs_active_job_spec.rb @@ -34,6 +34,18 @@ module Rails ) end end + + describe '.fifo?' do + it 'returns true if queue_url is fifo' do + queue_url = 'https://sqs.us-west-2.amazonaws.com/012345678910/queue.fifo' + expect(Aws::Rails::SqsActiveJob.fifo?(queue_url)).to be(true) + end + + it 'returns false if queue_url is not fifo' do + queue_url = 'https://sqs.us-west-2.amazonaws.com/012345678910/queue' + expect(Aws::Rails::SqsActiveJob.fifo?(queue_url)).to be(false) + end + end end end end From a6ef3770625cdfdd6d76ea6f3e2e65ae103c6b15 Mon Sep 17 00:00:00 2001 From: Matt Muller Date: Sun, 21 Jul 2024 20:09:41 -0400 Subject: [PATCH 4/4] Add changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dfdc4f0b..58f97af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ Unreleased Changes ------------------ +* Issue - Refactor the loading of the SQS ActiveJob adapter to be in `aws/rails/sqs_active_job`. + 4.0.1 (2024-07-18) ------------------