lex-sqs 0.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 971eadc68591cc66ebc5495db28543e691d3db31a41936961a3c2c2246667204
4
+ data.tar.gz: 0db6f217d3255513c725b9bb7f90582ccec4a8a6e068b8daf6c33e77ce7520c5
5
+ SHA512:
6
+ metadata.gz: c8d66a151513844a4badb06e702f357ddef3bb0d95740f6f3b03fd88c0e0dc43f39ac7992cea7f73d3aa5017b52801b4f7f9494b244efff1e6bae9eb092e606b
7
+ data.tar.gz: b7e1f9b38bb8cfcb9bb88f650b6e526a01585f2ed6c885637108546ff0c113f52e1f6c72eea2503890c957032316a2c74a2f89b70dbbe26d20d748401d1dcfe2
@@ -0,0 +1,16 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches: [origin]
5
+ pull_request:
6
+
7
+ jobs:
8
+ ci:
9
+ uses: LegionIO/.github/.github/workflows/ci.yml@main
10
+
11
+ release:
12
+ needs: ci
13
+ if: github.event_name == 'push' && github.ref == 'refs/heads/origin'
14
+ uses: LegionIO/.github/.github/workflows/release.yml@main
15
+ secrets:
16
+ rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,50 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.4
3
+ NewCops: enable
4
+ SuggestExtensions: false
5
+
6
+ Layout/LineLength:
7
+ Max: 160
8
+
9
+ Layout/SpaceAroundEqualsInParameterDefault:
10
+ EnforcedStyle: space
11
+
12
+ Layout/HashAlignment:
13
+ EnforcedHashRocketStyle: table
14
+ EnforcedColonStyle: table
15
+
16
+ Metrics/MethodLength:
17
+ Max: 50
18
+
19
+ Metrics/ClassLength:
20
+ Max: 1500
21
+
22
+ Metrics/ModuleLength:
23
+ Max: 1500
24
+
25
+ Metrics/BlockLength:
26
+ Max: 40
27
+ Exclude:
28
+ - 'spec/**/*'
29
+
30
+ Metrics/AbcSize:
31
+ Max: 60
32
+
33
+ Metrics/CyclomaticComplexity:
34
+ Max: 15
35
+
36
+ Metrics/PerceivedComplexity:
37
+ Max: 17
38
+
39
+ Style/Documentation:
40
+ Enabled: false
41
+
42
+ Style/SymbolArray:
43
+ Enabled: true
44
+
45
+ Style/FrozenStringLiteralComment:
46
+ Enabled: true
47
+ EnforcedStyle: always
48
+
49
+ Naming/FileName:
50
+ Enabled: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0] - 2026-03-21
4
+
5
+ ### Added
6
+ - Initial release of lex-sqs AWS SQS integration
7
+ - `Helpers::Client` — builds `Aws::SQS::Client` with region and credential support
8
+ - `Runners::Queues` — `list_queues`, `create_queue`, `delete_queue`, `get_queue_attributes`, `get_queue_url`
9
+ - `Runners::Messages` — `send_message`, `receive_messages`, `delete_message`, `purge_queue`, `send_message_batch`
10
+ - Standalone `Client` class for use outside the Legion framework
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ gem 'bundler', '>= 2'
8
+ gem 'rake'
9
+ gem 'rexml'
10
+ gem 'rspec'
11
+ gem 'rubocop'
12
+ gem 'rubocop-rspec'
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # lex-sqs
2
+
3
+ Legion Extension for AWS SQS integration. Provides queue management and message operations.
4
+
5
+ ## Installation
6
+
7
+ Add to your Gemfile:
8
+
9
+ ```ruby
10
+ gem 'lex-sqs'
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ### Standalone client
16
+
17
+ ```ruby
18
+ require 'legion/extensions/sqs'
19
+
20
+ client = Legion::Extensions::Sqs::Client.new(
21
+ region: 'us-east-1',
22
+ access_key_id: ENV['AWS_ACCESS_KEY_ID'],
23
+ secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
24
+ )
25
+
26
+ client.list_queues
27
+ client.send_message(queue_url: 'https://sqs.us-east-1.amazonaws.com/123/my-queue', message_body: 'hello')
28
+ client.receive_messages(queue_url: 'https://sqs.us-east-1.amazonaws.com/123/my-queue', max_number: 5)
29
+ ```
30
+
31
+ ## Runners
32
+
33
+ - `Queues`: `list_queues`, `create_queue`, `delete_queue`, `get_queue_attributes`, `get_queue_url`
34
+ - `Messages`: `send_message`, `receive_messages`, `delete_message`, `purge_queue`, `send_message_batch`
35
+
36
+ ## License
37
+
38
+ MIT
data/lex-sqs.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/legion/extensions/sqs/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'lex-sqs'
7
+ spec.version = Legion::Extensions::Sqs::VERSION
8
+ spec.authors = ['Esity']
9
+ spec.email = ['matthewdiverson@gmail.com']
10
+
11
+ spec.summary = 'LEX::Sqs'
12
+ spec.description = 'Connects Legion to AWS SQS for queue and message management'
13
+ spec.homepage = 'https://github.com/LegionIO/lex-sqs'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = '>= 3.4'
16
+
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-sqs'
19
+ spec.metadata['documentation_uri'] = 'https://github.com/LegionIO/lex-sqs'
20
+ spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-sqs'
21
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/LegionIO/lex-sqs/issues'
22
+ spec.metadata['rubygems_mfa_required'] = 'true'
23
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ end
26
+ spec.require_paths = ['lib']
27
+
28
+ spec.add_dependency 'aws-sdk-sqs', '~> 1.0'
29
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helpers/client'
4
+ require_relative 'runners/queues'
5
+ require_relative 'runners/messages'
6
+
7
+ module Legion
8
+ module Extensions
9
+ module Sqs
10
+ class Client
11
+ include Helpers::Client
12
+ include Runners::Queues
13
+ include Runners::Messages
14
+
15
+ attr_reader :opts
16
+
17
+ def initialize(region: 'us-east-1', access_key_id: nil, secret_access_key: nil, **extra)
18
+ @opts = { region: region, access_key_id: access_key_id, secret_access_key: secret_access_key,
19
+ **extra }.compact
20
+ end
21
+
22
+ def sqs_client(**override)
23
+ super(**@opts, **override)
24
+ end
25
+
26
+ def settings
27
+ { options: @opts }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws-sdk-sqs'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Sqs
8
+ module Helpers
9
+ module Client
10
+ def sqs_client(region: 'us-east-1', access_key_id: nil, secret_access_key: nil, **_opts)
11
+ config = { region: region }
12
+ config[:access_key_id] = access_key_id if access_key_id
13
+ config[:secret_access_key] = secret_access_key if secret_access_key
14
+ Aws::SQS::Client.new(**config)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Sqs
6
+ module Runners
7
+ module Messages
8
+ def send_message(queue_url:, message_body:, delay_seconds: 0, **)
9
+ resp = sqs_client(**).send_message(
10
+ queue_url: queue_url,
11
+ message_body: message_body,
12
+ delay_seconds: delay_seconds
13
+ )
14
+ resp.to_h
15
+ end
16
+
17
+ def receive_messages(queue_url:, max_number: 10, wait_time: 0, **)
18
+ resp = sqs_client(**).receive_message(
19
+ queue_url: queue_url,
20
+ max_number_of_messages: max_number,
21
+ wait_time_seconds: wait_time
22
+ )
23
+ { messages: resp.messages.map(&:to_h) }
24
+ end
25
+
26
+ def delete_message(queue_url:, receipt_handle:, **)
27
+ sqs_client(**).delete_message(
28
+ queue_url: queue_url,
29
+ receipt_handle: receipt_handle
30
+ )
31
+ { deleted: true, receipt_handle: receipt_handle }
32
+ end
33
+
34
+ def purge_queue(queue_url:, **)
35
+ sqs_client(**).purge_queue(queue_url: queue_url)
36
+ { purged: true, queue_url: queue_url }
37
+ end
38
+
39
+ def send_message_batch(queue_url:, entries:, **)
40
+ resp = sqs_client(**).send_message_batch(
41
+ queue_url: queue_url,
42
+ entries: entries
43
+ )
44
+ resp.to_h
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Sqs
6
+ module Runners
7
+ module Queues
8
+ def list_queues(**)
9
+ resp = sqs_client(**).list_queues
10
+ { queue_urls: resp.queue_urls }
11
+ end
12
+
13
+ def create_queue(queue_name:, **opts)
14
+ conn_opts = opts.slice(:region, :access_key_id, :secret_access_key)
15
+ queue_opts = opts.except(:region, :access_key_id, :secret_access_key)
16
+ params = { queue_name: queue_name }
17
+ params[:attributes] = queue_opts[:attributes] if queue_opts[:attributes]
18
+ resp = sqs_client(**conn_opts).create_queue(**params)
19
+ { queue_url: resp.queue_url }
20
+ end
21
+
22
+ def delete_queue(queue_url:, **)
23
+ sqs_client(**).delete_queue(queue_url: queue_url)
24
+ { deleted: true, queue_url: queue_url }
25
+ end
26
+
27
+ def get_queue_attributes(queue_url:, attribute_names: ['All'], **)
28
+ resp = sqs_client(**).get_queue_attributes(
29
+ queue_url: queue_url,
30
+ attribute_names: attribute_names
31
+ )
32
+ { queue_url: queue_url, attributes: resp.attributes }
33
+ end
34
+
35
+ def get_queue_url(queue_name:, **)
36
+ resp = sqs_client(**).get_queue_url(queue_name: queue_name)
37
+ { queue_url: resp.queue_url }
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Sqs
6
+ VERSION = '0.1.1'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/sqs/version'
4
+ require 'legion/extensions/sqs/helpers/client'
5
+ require 'legion/extensions/sqs/runners/queues'
6
+ require 'legion/extensions/sqs/runners/messages'
7
+ require 'legion/extensions/sqs/client'
8
+
9
+ module Legion
10
+ module Extensions
11
+ module Sqs
12
+ extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lex-sqs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Esity
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: aws-sdk-sqs
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.0'
26
+ description: Connects Legion to AWS SQS for queue and message management
27
+ email:
28
+ - matthewdiverson@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".github/workflows/ci.yml"
34
+ - ".rspec"
35
+ - ".rubocop.yml"
36
+ - CHANGELOG.md
37
+ - Gemfile
38
+ - README.md
39
+ - lex-sqs.gemspec
40
+ - lib/legion/extensions/sqs.rb
41
+ - lib/legion/extensions/sqs/client.rb
42
+ - lib/legion/extensions/sqs/helpers/client.rb
43
+ - lib/legion/extensions/sqs/runners/messages.rb
44
+ - lib/legion/extensions/sqs/runners/queues.rb
45
+ - lib/legion/extensions/sqs/version.rb
46
+ homepage: https://github.com/LegionIO/lex-sqs
47
+ licenses:
48
+ - MIT
49
+ metadata:
50
+ homepage_uri: https://github.com/LegionIO/lex-sqs
51
+ source_code_uri: https://github.com/LegionIO/lex-sqs
52
+ documentation_uri: https://github.com/LegionIO/lex-sqs
53
+ changelog_uri: https://github.com/LegionIO/lex-sqs
54
+ bug_tracker_uri: https://github.com/LegionIO/lex-sqs/issues
55
+ rubygems_mfa_required: 'true'
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '3.4'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubygems_version: 3.6.9
71
+ specification_version: 4
72
+ summary: LEX::Sqs
73
+ test_files: []