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) ------------------ 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..414832f1 --- /dev/null +++ b/lib/aws/rails/sqs_active_job.rb @@ -0,0 +1,33 @@ +# 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 + # @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..0a1435d4 --- /dev/null +++ b/spec/aws/rails/sqs_active_job_spec.rb @@ -0,0 +1,51 @@ +# 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 + + 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