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 +7 -0
- data/.github/workflows/ci.yml +16 -0
- data/.rspec +3 -0
- data/.rubocop.yml +50 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +12 -0
- data/README.md +38 -0
- data/lex-sqs.gemspec +29 -0
- data/lib/legion/extensions/sqs/client.rb +32 -0
- data/lib/legion/extensions/sqs/helpers/client.rb +20 -0
- data/lib/legion/extensions/sqs/runners/messages.rb +50 -0
- data/lib/legion/extensions/sqs/runners/queues.rb +43 -0
- data/lib/legion/extensions/sqs/version.rb +9 -0
- data/lib/legion/extensions/sqs.rb +15 -0
- metadata +73 -0
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
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
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,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: []
|