eventq 2.5.0 → 3.1.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c24153f000dd45ba6279ed183820bfe3848eded189017dd04f508d9c30608897
|
4
|
+
data.tar.gz: a5a709991c74cfb090434c80534483a194332f893943cd0af170705190372fac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97e28e78fb129e611b473a9fde30e5815d885a44177935ca14eb386988f7b64b78bd4dcf0329ed3150ace7e823d24dc0553021fe155bc8431b29b0c441ba0c30
|
7
|
+
data.tar.gz: c35141ebe0d1cbeab1393f5284d0cac4a6def35d8eb193fe03856da584ec1578dd58886d3f3013b1b83e09a146a5efb1dae3ceacb4810833eaabb4fd719a513a
|
@@ -15,25 +15,37 @@ module EventQ
|
|
15
15
|
@serialization_manager = EventQ::SerializationProviders::Manager.new
|
16
16
|
@signature_manager = EventQ::SignatureProviders::Manager.new
|
17
17
|
|
18
|
-
# this
|
19
|
-
|
20
|
-
|
18
|
+
# this hash is used to record known event types:
|
19
|
+
# key = event_type / name
|
20
|
+
# value = topic arn
|
21
|
+
@known_event_types = {}
|
21
22
|
end
|
22
23
|
|
24
|
+
# Returns true if the event has already been registerd, or false
|
25
|
+
# otherwise.
|
26
|
+
#
|
27
|
+
# @param [String] event_type
|
28
|
+
# @param [String] region
|
29
|
+
#
|
30
|
+
# @return [Boolean]
|
23
31
|
def registered?(event_type, region = nil)
|
24
32
|
topic_key = "#{region}:#{event_type}"
|
25
|
-
@known_event_types.
|
33
|
+
@known_event_types.key?(topic_key)
|
26
34
|
end
|
27
35
|
|
36
|
+
# Registers the event event_type and returns its topic arn.
|
37
|
+
#
|
38
|
+
# @param [String] event_type
|
39
|
+
# @param [String] region
|
40
|
+
#
|
41
|
+
# @return [String]
|
28
42
|
def register_event(event_type, region = nil)
|
29
|
-
if registered?(event_type, region)
|
30
|
-
return true
|
31
|
-
end
|
32
|
-
|
33
43
|
topic_key = "#{region}:#{event_type}"
|
34
|
-
@
|
35
|
-
|
36
|
-
|
44
|
+
return @known_event_types[topic_key] if registered?(event_type, region)
|
45
|
+
|
46
|
+
topic_arn = @client.sns_helper(region).create_topic_arn(event_type, region)
|
47
|
+
@known_event_types[topic_key] = topic_arn
|
48
|
+
topic_arn
|
37
49
|
end
|
38
50
|
|
39
51
|
def publish(topic:, event:, context: {}, region: nil)
|
@@ -20,7 +20,7 @@ module EventQ
|
|
20
20
|
end
|
21
21
|
|
22
22
|
topic_arn = @client.sns_helper(topic_region).public_send(method, event_type, topic_region)
|
23
|
-
raise Exceptions::EventTypeNotFound,
|
23
|
+
raise Exceptions::EventTypeNotFound, "SNS topic not found, unable to subscribe to #{event_type}" unless topic_arn
|
24
24
|
|
25
25
|
queue_arn = configure_queue(queue, queue_region)
|
26
26
|
|
@@ -29,7 +29,7 @@ module EventQ
|
|
29
29
|
namespaced_topic_arn = topic_arn.gsub(":#{EventQ.namespace}-", ":#{namespace}-")
|
30
30
|
|
31
31
|
# create the sns topic - this method is idempotent & returns the topic arn if it already exists
|
32
|
-
@client.
|
32
|
+
@client.sns_helper.create_topic_arn("#{namespace}-#{event_type}".delete('.')) unless queue.isolated
|
33
33
|
|
34
34
|
# skip subscribe if subscription for given queue/topic already exists
|
35
35
|
# this is a workaround for a localstack issue: https://github.com/localstack/localstack/issues/933
|
@@ -32,6 +32,7 @@ module EventQ
|
|
32
32
|
end
|
33
33
|
|
34
34
|
# Check if a TopicArn exists. This will check with AWS if necessary and cache the results if one is found
|
35
|
+
#
|
35
36
|
# @return TopicArn [String]
|
36
37
|
def get_topic_arn(event_type, region = nil)
|
37
38
|
_event_type = EventQ.create_event_type(event_type)
|
@@ -39,8 +40,7 @@ module EventQ
|
|
39
40
|
|
40
41
|
arn = @@topic_arns[topic_key]
|
41
42
|
unless arn
|
42
|
-
|
43
|
-
arn = response.topics.detect { |topic| topic.topic_arn.end_with?(":#{_event_type}") }&.topic_arn
|
43
|
+
arn = find_topic(_event_type)
|
44
44
|
|
45
45
|
@@topic_arns[topic_key] = arn if arn
|
46
46
|
end
|
@@ -62,6 +62,32 @@ module EventQ
|
|
62
62
|
def aws_safe_name(name)
|
63
63
|
return name[0..79].gsub(/[^a-zA-Z\d_\-]/,'')
|
64
64
|
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
# Finds the given topic, or returns nil if the topic could not be found
|
69
|
+
#
|
70
|
+
# @note Responses to list_topics can be paged, so to check *all* topics
|
71
|
+
# we'll need to request each page of topics using response.next_token for
|
72
|
+
# until the response no longer contains a next_token. Requests to
|
73
|
+
# list_topics are throttled to 30 TPS, so in the future we may need to
|
74
|
+
# handle this if it becomes a problem.
|
75
|
+
#
|
76
|
+
# @param topic_name [String] the name of the topic to find
|
77
|
+
# @return [String]
|
78
|
+
def find_topic(topic_name)
|
79
|
+
response = sns.list_topics
|
80
|
+
topics = response.topics
|
81
|
+
arn = topics.detect { |topic| topic.topic_arn.end_with?(":#{topic_name}") }&.topic_arn
|
82
|
+
|
83
|
+
while arn.nil? && response.next_token
|
84
|
+
response = sns.list_topics(next_token: response.next_token)
|
85
|
+
topics = response.topics
|
86
|
+
arn = topics.detect { |topic| topic.topic_arn.end_with?(":#{topic_name}") }&.topic_arn
|
87
|
+
end
|
88
|
+
|
89
|
+
arn
|
90
|
+
end
|
65
91
|
end
|
66
92
|
end
|
67
93
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SageOne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +38,34 @@ dependencies:
|
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '1.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '11.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '11.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.9'
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: rake
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,7 +95,7 @@ dependencies:
|
|
53
95
|
- !ruby/object:Gem::Version
|
54
96
|
version: '0'
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
98
|
+
name: shoulda-matchers
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
58
100
|
requirements:
|
59
101
|
- - ">="
|
@@ -67,7 +109,7 @@ dependencies:
|
|
67
109
|
- !ruby/object:Gem::Version
|
68
110
|
version: '0'
|
69
111
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
112
|
+
name: simplecov
|
71
113
|
requirement: !ruby/object:Gem::Requirement
|
72
114
|
requirements:
|
73
115
|
- - ">="
|
@@ -81,35 +123,35 @@ dependencies:
|
|
81
123
|
- !ruby/object:Gem::Version
|
82
124
|
version: '0'
|
83
125
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
126
|
+
name: aws-sdk-sqs
|
85
127
|
requirement: !ruby/object:Gem::Requirement
|
86
128
|
requirements:
|
87
129
|
- - "~>"
|
88
130
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
90
|
-
type: :
|
131
|
+
version: '1'
|
132
|
+
type: :runtime
|
91
133
|
prerelease: false
|
92
134
|
version_requirements: !ruby/object:Gem::Requirement
|
93
135
|
requirements:
|
94
136
|
- - "~>"
|
95
137
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
138
|
+
version: '1'
|
97
139
|
- !ruby/object:Gem::Dependency
|
98
|
-
name: aws-sdk
|
140
|
+
name: aws-sdk-sns
|
99
141
|
requirement: !ruby/object:Gem::Requirement
|
100
142
|
requirements:
|
101
143
|
- - "~>"
|
102
144
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
145
|
+
version: '1'
|
104
146
|
type: :runtime
|
105
147
|
prerelease: false
|
106
148
|
version_requirements: !ruby/object:Gem::Requirement
|
107
149
|
requirements:
|
108
150
|
- - "~>"
|
109
151
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
152
|
+
version: '1'
|
111
153
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
154
|
+
name: bunny
|
113
155
|
requirement: !ruby/object:Gem::Requirement
|
114
156
|
requirements:
|
115
157
|
- - ">="
|
@@ -123,7 +165,7 @@ dependencies:
|
|
123
165
|
- !ruby/object:Gem::Version
|
124
166
|
version: '0'
|
125
167
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
168
|
+
name: class_kit
|
127
169
|
requirement: !ruby/object:Gem::Requirement
|
128
170
|
requirements:
|
129
171
|
- - ">="
|
@@ -137,7 +179,7 @@ dependencies:
|
|
137
179
|
- !ruby/object:Gem::Version
|
138
180
|
version: '0'
|
139
181
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
182
|
+
name: concurrent-ruby
|
141
183
|
requirement: !ruby/object:Gem::Requirement
|
142
184
|
requirements:
|
143
185
|
- - ">="
|
@@ -151,7 +193,7 @@ dependencies:
|
|
151
193
|
- !ruby/object:Gem::Version
|
152
194
|
version: '0'
|
153
195
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
196
|
+
name: oj
|
155
197
|
requirement: !ruby/object:Gem::Requirement
|
156
198
|
requirements:
|
157
199
|
- - ">="
|
@@ -165,7 +207,7 @@ dependencies:
|
|
165
207
|
- !ruby/object:Gem::Version
|
166
208
|
version: '0'
|
167
209
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
210
|
+
name: openssl
|
169
211
|
requirement: !ruby/object:Gem::Requirement
|
170
212
|
requirements:
|
171
213
|
- - ">="
|
@@ -179,7 +221,7 @@ dependencies:
|
|
179
221
|
- !ruby/object:Gem::Version
|
180
222
|
version: '0'
|
181
223
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
224
|
+
name: redlock
|
183
225
|
requirement: !ruby/object:Gem::Requirement
|
184
226
|
requirements:
|
185
227
|
- - ">="
|
@@ -268,7 +310,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
268
310
|
- !ruby/object:Gem::Version
|
269
311
|
version: '0'
|
270
312
|
requirements: []
|
271
|
-
rubygems_version: 3.0.
|
313
|
+
rubygems_version: 3.0.8
|
272
314
|
signing_key:
|
273
315
|
specification_version: 4
|
274
316
|
summary: EventQ is a pub/sub system that uses async notifications and message queues
|