cyclone_lariat 0.3.7 → 0.3.9
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 +4 -4
- data/CHANGELOG.md +11 -2
- data/Gemfile.lock +10 -10
- data/README.md +13 -0
- data/lib/cyclone_lariat/abstract/client.rb +15 -8
- data/lib/cyclone_lariat/configure.rb +14 -0
- data/lib/cyclone_lariat/list_topics_store.rb +45 -0
- data/lib/cyclone_lariat/sns_client.rb +15 -4
- data/lib/cyclone_lariat/version.rb +1 -1
- data/lib/cyclone_lariat.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e81df0b814b28eff97a38a58e1d3573ef09efc594242da8b9768ed781eb1f989
|
4
|
+
data.tar.gz: ef8441b399c937518506bacc0514a1fbb68cde9c0d92e99d619edf3bfaee9611
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 216f064daa35c0eb8599b368364ee116c0184e1ee7bd2ad94e39b06ce324d5f958c21fca460f2b368db34fcca287bb23db34af03c14718a676618213765ca150
|
7
|
+
data.tar.gz: 947a143ea181f60a450dba792091f3a122c88d6929638272292370bbaa8a5fe0270ecf6ad4d3ba01b560660478987dc9388879327100efa8426717be9cf75b9a
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [0.3.8] - 2022-09-05
|
8
|
+
Added
|
9
|
+
- Added configuration options see README.md
|
10
|
+
|
11
|
+
## [0.3.8] - 2022-09-05
|
12
|
+
Changed
|
13
|
+
- Added pagination to sns topics list for receiving all topics
|
14
|
+
- Added list topics store for reduce unnecessary requests to aws
|
15
|
+
|
7
16
|
## [0.3.7] - 2022-02-10
|
8
17
|
Changed
|
9
18
|
- Add exception when received broken JSON
|
@@ -40,8 +49,8 @@ Added
|
|
40
49
|
|
41
50
|
## [0.2.2] - 2021-06-08
|
42
51
|
Changed
|
43
|
-
- Fix save to database
|
44
|
-
- Rename error to client error
|
52
|
+
- Fix save to database
|
53
|
+
- Rename error to client error
|
45
54
|
|
46
55
|
## [0.2.1] - 2021-06-02
|
47
56
|
- Fix can load from database if error_details is nil
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cyclone_lariat (0.3.
|
4
|
+
cyclone_lariat (0.3.9)
|
5
5
|
aws-sdk-sns
|
6
6
|
aws-sdk-sqs
|
7
7
|
luna_park (~> 0.11)
|
@@ -13,19 +13,19 @@ GEM
|
|
13
13
|
public_suffix (>= 2.0.2, < 5.0)
|
14
14
|
ast (2.4.2)
|
15
15
|
aws-eventstream (1.2.0)
|
16
|
-
aws-partitions (1.
|
17
|
-
aws-sdk-core (3.
|
16
|
+
aws-partitions (1.626.0)
|
17
|
+
aws-sdk-core (3.140.0)
|
18
18
|
aws-eventstream (~> 1, >= 1.0.2)
|
19
19
|
aws-partitions (~> 1, >= 1.525.0)
|
20
20
|
aws-sigv4 (~> 1.1)
|
21
|
-
jmespath (~> 1.
|
22
|
-
aws-sdk-sns (1.
|
23
|
-
aws-sdk-core (~> 3, >= 3.
|
21
|
+
jmespath (~> 1, >= 1.6.1)
|
22
|
+
aws-sdk-sns (1.54.0)
|
23
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
24
24
|
aws-sigv4 (~> 1.1)
|
25
|
-
aws-sdk-sqs (1.
|
26
|
-
aws-sdk-core (~> 3, >= 3.
|
25
|
+
aws-sdk-sqs (1.51.1)
|
26
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
27
27
|
aws-sigv4 (~> 1.1)
|
28
|
-
aws-sigv4 (1.
|
28
|
+
aws-sigv4 (1.5.1)
|
29
29
|
aws-eventstream (~> 1, >= 1.0.2)
|
30
30
|
byebug (11.1.3)
|
31
31
|
coderay (1.1.3)
|
@@ -38,7 +38,7 @@ GEM
|
|
38
38
|
diff-lcs (1.5.0)
|
39
39
|
docile (1.3.5)
|
40
40
|
hashdiff (1.0.1)
|
41
|
-
jmespath (1.
|
41
|
+
jmespath (1.6.1)
|
42
42
|
luna_park (0.11.1)
|
43
43
|
method_source (1.0.0)
|
44
44
|
parallel (1.20.1)
|
data/README.md
CHANGED
@@ -34,6 +34,19 @@ name where the change took place plus the verb past-participle. An event happens
|
|
34
34
|
A command can emit any number of events. The sender of the event does not care who receives it or whether it has been
|
35
35
|
received at all.
|
36
36
|
|
37
|
+
## Configure
|
38
|
+
```ruby
|
39
|
+
# 'config/initializers/cyclone_lariat.rb'
|
40
|
+
CycloneLariat.tap do |cl|
|
41
|
+
cl.default_version = 1 # api version default is 1
|
42
|
+
cl.key = # aws key
|
43
|
+
cl.secret_key = # aws secret
|
44
|
+
cl.default_region = # aws default region
|
45
|
+
cl.publisher = 'auth' # name of your publishers, usually name of your application
|
46
|
+
cl.default_instance = APP_INSTANCE # stage, production, test
|
47
|
+
end
|
48
|
+
```
|
49
|
+
|
37
50
|
## SnsClient
|
38
51
|
You can use client directly
|
39
52
|
|
@@ -14,9 +14,6 @@ module CycloneLariat
|
|
14
14
|
dependency(:aws_client_class) { raise ArgumentError, 'Client class should be defined' }
|
15
15
|
dependency(:aws_credentials_class) { Aws::Credentials }
|
16
16
|
|
17
|
-
DEFAULT_VERSION = 1
|
18
|
-
DEFAULT_INSTANCE = :prod
|
19
|
-
|
20
17
|
def initialize(key:, secret_key:, region:, version: nil, publisher: nil, instance: nil)
|
21
18
|
@key = key
|
22
19
|
@secret_key = secret_key
|
@@ -54,15 +51,15 @@ module CycloneLariat
|
|
54
51
|
|
55
52
|
class << self
|
56
53
|
def version(version = nil)
|
57
|
-
version.nil? ? @version ||
|
54
|
+
version.nil? ? @version || CycloneLariat.default_version : @version = version
|
58
55
|
end
|
59
56
|
|
60
57
|
def instance(instance = nil)
|
61
|
-
instance.nil? ? @instance ||
|
58
|
+
instance.nil? ? @instance || CycloneLariat.default_instance || (raise 'You should define instance') : @instance = instance
|
62
59
|
end
|
63
60
|
|
64
61
|
def publisher(publisher = nil)
|
65
|
-
publisher.nil? ? @publisher || (raise 'You should define publisher') : @publisher = publisher
|
62
|
+
publisher.nil? ? @publisher || CycloneLariat.publisher || (raise 'You should define publisher') : @publisher = publisher
|
66
63
|
end
|
67
64
|
end
|
68
65
|
|
@@ -78,9 +75,19 @@ module CycloneLariat
|
|
78
75
|
@instance ||= self.class.instance
|
79
76
|
end
|
80
77
|
|
81
|
-
|
78
|
+
def key
|
79
|
+
@key ||= CycloneLariat.key
|
80
|
+
end
|
81
|
+
|
82
|
+
def secret_key
|
83
|
+
@secret_key ||= CycloneLariat.secret_key
|
84
|
+
end
|
85
|
+
|
86
|
+
def region
|
87
|
+
@region ||= CycloneLariat.default_region
|
88
|
+
end
|
82
89
|
|
83
|
-
|
90
|
+
private
|
84
91
|
|
85
92
|
def aws_client
|
86
93
|
@aws_client ||= aws_client_class.new(credentials: aws_credentials, region: region)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CycloneLariat
|
4
|
+
class << self
|
5
|
+
DEFAULT_VERSION = 1
|
6
|
+
|
7
|
+
attr_accessor :key, :secret_key, :publisher, :default_region, :default_instance
|
8
|
+
attr_writer :default_version
|
9
|
+
|
10
|
+
def default_version
|
11
|
+
@default_version ||= DEFAULT_VERSION
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
module CycloneLariat
|
6
|
+
class ListTopicsStore
|
7
|
+
include Singleton
|
8
|
+
|
9
|
+
def topic_arn(topic_name)
|
10
|
+
@topics[topic_name.to_sym]
|
11
|
+
end
|
12
|
+
|
13
|
+
def list
|
14
|
+
@topics.keys
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_topics(aws_client)
|
18
|
+
@topics ||= {}
|
19
|
+
@aws_client = aws_client
|
20
|
+
fetch
|
21
|
+
end
|
22
|
+
|
23
|
+
def clear_store!
|
24
|
+
@topics = {}
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def fetch
|
30
|
+
return unless @topics.empty?
|
31
|
+
|
32
|
+
@next_token = ''
|
33
|
+
topics_from_aws until @next_token.nil?
|
34
|
+
end
|
35
|
+
|
36
|
+
def topics_from_aws
|
37
|
+
result = @aws_client.list_topics(next_token: @next_token)
|
38
|
+
@next_token = result.next_token
|
39
|
+
result.topics.each do |topic|
|
40
|
+
topic_name = topic.topic_arn.split(':').last
|
41
|
+
@topics[topic_name.to_sym] = topic.topic_arn
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'aws-sdk-sns'
|
4
4
|
require_relative 'abstract/client'
|
5
|
+
require_relative 'list_topics_store'
|
5
6
|
|
6
7
|
module CycloneLariat
|
7
8
|
class SnsClient < Abstract::Client
|
@@ -31,11 +32,21 @@ module CycloneLariat
|
|
31
32
|
private
|
32
33
|
|
33
34
|
def topic_arn(topic_name)
|
34
|
-
|
35
|
-
|
36
|
-
raise Errors::TopicNotFound.new(expected_topic: topic_name, existed_topics: list.map(&:topic_arn)) if topic.nil?
|
35
|
+
topics_store.add_topics(aws_client)
|
36
|
+
topic_arn = topics_store.topic_arn(topic_name)
|
37
37
|
|
38
|
-
|
38
|
+
if topic_arn.nil?
|
39
|
+
raise Errors::TopicNotFound.new(
|
40
|
+
expected_topic: topic_name,
|
41
|
+
existed_topics: topics_store.list
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
topic_arn
|
46
|
+
end
|
47
|
+
|
48
|
+
def topics_store
|
49
|
+
ListTopicsStore.instance
|
39
50
|
end
|
40
51
|
end
|
41
52
|
end
|
data/lib/cyclone_lariat.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cyclone_lariat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Kudrin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-10-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk-sns
|
@@ -269,8 +269,10 @@ files:
|
|
269
269
|
- lib/cyclone_lariat/abstract/client.rb
|
270
270
|
- lib/cyclone_lariat/abstract/message.rb
|
271
271
|
- lib/cyclone_lariat/command.rb
|
272
|
+
- lib/cyclone_lariat/configure.rb
|
272
273
|
- lib/cyclone_lariat/errors.rb
|
273
274
|
- lib/cyclone_lariat/event.rb
|
275
|
+
- lib/cyclone_lariat/list_topics_store.rb
|
274
276
|
- lib/cyclone_lariat/messages_mapper.rb
|
275
277
|
- lib/cyclone_lariat/messages_repo.rb
|
276
278
|
- lib/cyclone_lariat/middleware.rb
|