Skip to content

Commit 7a9bf4e

Browse files
committed
Add SNS sdk inbound/outbound resource management.
1 parent c12269a commit 7a9bf4e

37 files changed

+512
-54
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ group :development, :test do
1414
gem 'yard'
1515
gem 'rubocop-git'
1616
gem 'aws-sdk-sns'
17+
gem 'concurrent-ruby'
1718
end

Gemfile.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ PATH
44
event_source (0.6.0)
55
addressable (>= 2.8.0)
66
bunny (>= 2.14)
7+
concurrent-ruby
78
deep_merge (~> 1.2.0)
89
dry-configurable (~> 0.12)
910
dry-events (~> 0.3)
@@ -345,6 +346,7 @@ PLATFORMS
345346

346347
DEPENDENCIES
347348
aws-sdk-sns
349+
concurrent-ruby
348350
database_cleaner
349351
event_source!
350352
faker

event_source.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Gem::Specification.new do |spec|
5555
spec.add_dependency 'oj', '~> 3.11'
5656
spec.add_dependency 'ox', '~> 2.14'
5757
spec.add_dependency 'typhoeus', '~> 1.4.0'
58+
spec.add_dependency 'concurrent-ruby'
5859

5960
# TODO: Change to development dependency
6061
spec.add_development_dependency 'database_cleaner'

lib/event_source.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
require 'event_source/channel'
3131
require 'event_source/queue'
3232
require 'event_source/worker'
33+
require 'event_source/worker_pool'
3334
require 'event_source/publish_operation'
3435
require 'event_source/subscribe_operation'
3536
require 'event_source/message'
@@ -45,6 +46,7 @@
4546
require 'event_source/operations/build_message_options'
4647
require 'event_source/operations/build_message'
4748
require 'event_source/boot_registry'
49+
require 'event_source/paginator'
4850

4951
# Event source provides ability to compose, publish and subscribe to events
5052
module EventSource

lib/event_source/async_api/contracts/subscribe_operation_bindings_contract.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require "event_source/protocols/http/contracts/subscribe_operation_bindings_contract"
44
require "event_source/protocols/amqp/contracts/subscribe_operation_binding_contract"
5+
require "event_source/protocols/sns/contracts/subscribe_operation_binding_contract"
56

67
module EventSource
78
module AsyncApi
@@ -11,6 +12,7 @@ class SubscribeOperationBindingsContract < Contract
1112
params do
1213
optional(:http).hash
1314
optional(:amqp).hash
15+
optional(:sns).hash
1416
end
1517

1618
rule(:http) do
@@ -24,6 +26,20 @@ class SubscribeOperationBindingsContract < Contract
2426
end
2527
end
2628
end
29+
30+
rule(:sns) do
31+
if key? && value
32+
validation_result = ::EventSource::Protocols::Sns::Contracts::SubscribeOperationBindingsContract.new.call(value)
33+
if validation_result&.failure?
34+
key.failure(
35+
text: 'invalid operation bindings',
36+
error: validation_result.errors.to_h
37+
)
38+
else
39+
values.data.merge({ sns: validation_result.values })
40+
end
41+
end
42+
end
2743
end
2844
end
2945
end

lib/event_source/async_api/publish_bindings.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
require "event_source/protocols/http/publish_bindings"
55
require "event_source/protocols/amqp/types"
66
require "event_source/protocols/amqp/publish_bindings"
7-
require "event_source/protocols/sns/publish_bindings"
7+
require "event_source/protocols/sns/operation_bindings"
88

99
module EventSource
1010
module AsyncApi

lib/event_source/async_api/subscribe_bindings.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
require "event_source/protocols/http/types"
44
require "event_source/protocols/http/subscribe_bindings"
55
require "event_source/protocols/amqp/subscribe_bindings"
6+
require "event_source/protocols/sns/operation_bindings"
67

78
module EventSource
89
module AsyncApi
910
class SubscribeBindings < Dry::Struct
1011
transform_keys(&:to_sym)
1112
attribute :http, ::EventSource::Protocols::Http::SubscribeBindings.meta(omittable: true)
1213
attribute :amqp, Types::Hash.meta(omittable: true)
14+
attribute :sns, ::EventSource::Protocols::Sns::SubscribeBindings.meta(omittable: true)
1315
end
1416
end
1517
end

lib/event_source/connection_manager.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ def find_connection(params)
8989
connection.publish_operation_exists?(params[:publish_operation_name])
9090
end
9191
else
92+
# raise params[:subscribe_operation_name].inspect if params[:protocol] == :sns
93+
# raise connections.first.subscribe_operations.keys.inspect
9294
connections.detect do |connection|
9395
connection.subscribe_operation_exists?(
9496
params[:subscribe_operation_name]

lib/event_source/loggers.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# frozen_string_literal: true
2+
3+
require 'logging'
4+
require_relative "loggers/inherited_logger"
5+
6+
module EventSource
7+
# Logger implementations for EventSource, providing sensible defaults.
8+
module Loggers
9+
end
10+
end
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# frozen_string_literal: true
2+
3+
require 'logging'
4+
5+
module EventSource
6+
module Loggers
7+
# A logger which, no matter the name, inherits from the EventSource primary logger
8+
class InheritedLogger < ::Logging::Logger
9+
# Inherit from the logger for EventSource
10+
# rubocop:disable Lint/MissingSuper
11+
def initialize(name)
12+
case name
13+
when String
14+
raise(ArgumentError, "logger must have a name") if name.empty?
15+
else raise(ArgumentError, "logger name must be a String") end
16+
17+
_setup(name, :parent => ::Logging.logger["EventSource"])
18+
end
19+
# rubocop:enable Lint/MissingSuper
20+
end
21+
end
22+
end

0 commit comments

Comments
 (0)