cyclone_lariat 0.3.8 → 0.3.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cc046e8076d845378a3e32c67b9afe728f59e98d3728246b7835480464cb6f0
4
- data.tar.gz: 7e521071b62ec40f378cee86d06b42d5a7e1857ca4ad72ddf9a92d97d7e2a2fa
3
+ metadata.gz: db8b83a45f403749ab3ab2503f22e85af53cce8fc3267a63eb31df0246d30683
4
+ data.tar.gz: 31ed6ee400d6778d90adf90ef997cc577df5564b78238cdc36b8067ff9fcaff9
5
5
  SHA512:
6
- metadata.gz: 93830e825f2035d114ebb96ab8692d27670a644429675ddd8f21b582109adb4f7c8a0285bdd0f3c4b55d63af2da1b8f25155de1681250a2aef1f6d053366c012
7
- data.tar.gz: ab100001f182c78762f0278ced7e6b404c25ef02380540946137e1022bda883359300029dce9e44457bc4fce0dd649a0d72ff6f6b4e2f0ffa66fb09c8d1ac834
6
+ metadata.gz: f73b11ffa6189231a1ebd71dcb7db455fbc092aaa00e740b4b1092006dd4db38550ddbb94ccc0266dc1bf4f467d481110a92061344fb1a6fa22e92ef48995b4b
7
+ data.tar.gz: d06087c237bbc3946c7e91772a987edf47b787ccd0f8e1c6e0f341f32fa6c7965b1546dcc7e188967baafaac19dd140ddca0d1cdbafb82ce68ab736d965271ef
data/CHANGELOG.md CHANGED
@@ -4,6 +4,20 @@ 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.10] - 2022-10-05
8
+ Added
9
+ - Added aws_client_od options
10
+ Changed:
11
+ - Renamed all AWS options with prefix _aws
12
+
13
+ ## [0.3.9] - 2022-10-05 Depricated
14
+ Added
15
+ - Added configuration options see README.md
16
+
17
+ ## [0.3.8] - 2022-09-05
18
+ Added
19
+ - Added configuration options see README.md
20
+
7
21
  ## [0.3.8] - 2022-09-05
8
22
  Changed
9
23
  - Added pagination to sns topics list for receiving all topics
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cyclone_lariat (0.3.8)
4
+ cyclone_lariat (0.3.10)
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.626.0)
17
- aws-sdk-core (3.140.0)
16
+ aws-partitions (1.641.0)
17
+ aws-sdk-core (3.158.0)
18
18
  aws-eventstream (~> 1, >= 1.0.2)
19
19
  aws-partitions (~> 1, >= 1.525.0)
20
20
  aws-sigv4 (~> 1.1)
21
21
  jmespath (~> 1, >= 1.6.1)
22
- aws-sdk-sns (1.54.0)
22
+ aws-sdk-sns (1.55.0)
23
23
  aws-sdk-core (~> 3, >= 3.127.0)
24
24
  aws-sigv4 (~> 1.1)
25
25
  aws-sdk-sqs (1.51.1)
26
26
  aws-sdk-core (~> 3, >= 3.127.0)
27
27
  aws-sigv4 (~> 1.1)
28
- aws-sigv4 (1.5.1)
28
+ aws-sigv4 (1.5.2)
29
29
  aws-eventstream (~> 1, >= 1.0.2)
30
30
  byebug (11.1.3)
31
31
  coderay (1.1.3)
data/README.md CHANGED
@@ -34,6 +34,20 @@ 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.aws_key = # aws key
43
+ cl.aws_secret_key = # aws secret
44
+ cl.aws_client_id = # aws client id
45
+ cl.aws_default_region = # aws default region
46
+ cl.publisher = 'auth' # name of your publishers, usually name of your application
47
+ cl.default_instance = APP_INSTANCE # stage, production, test
48
+ end
49
+ ```
50
+
37
51
  ## SnsClient
38
52
  You can use client directly
39
53
 
@@ -14,16 +14,14 @@ 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
- def initialize(key:, secret_key:, region:, version: nil, publisher: nil, instance: nil)
17
+ def initialize(key: nil, secret_key: nil, region: nil, version: nil, publisher: nil, instance: nil, client_id: nil)
21
18
  @key = key
22
19
  @secret_key = secret_key
23
20
  @region = region
24
21
  @version = version
25
22
  @publisher = publisher
26
23
  @instance = instance
24
+ @client_id = client_id
27
25
  end
28
26
 
29
27
  def event(type, data: {}, version: self.version, uuid: SecureRandom.uuid)
@@ -54,15 +52,15 @@ module CycloneLariat
54
52
 
55
53
  class << self
56
54
  def version(version = nil)
57
- version.nil? ? @version || DEFAULT_VERSION : @version = version
55
+ version.nil? ? @version || CycloneLariat.default_version : @version = version
58
56
  end
59
57
 
60
58
  def instance(instance = nil)
61
- instance.nil? ? @instance || DEFAULT_INSTANCE : @instance = instance
59
+ instance.nil? ? @instance || CycloneLariat.default_instance || (raise 'You should define instance') : @instance = instance
62
60
  end
63
61
 
64
62
  def publisher(publisher = nil)
65
- publisher.nil? ? @publisher || (raise 'You should define publisher') : @publisher = publisher
63
+ publisher.nil? ? @publisher || CycloneLariat.publisher || (raise 'You should define publisher') : @publisher = publisher
66
64
  end
67
65
  end
68
66
 
@@ -78,9 +76,23 @@ module CycloneLariat
78
76
  @instance ||= self.class.instance
79
77
  end
80
78
 
81
- private
79
+ def key
80
+ @key ||= CycloneLariat.aws_key
81
+ end
82
+
83
+ def secret_key
84
+ @secret_key ||= CycloneLariat.aws_secret_key
85
+ end
82
86
 
83
- attr_reader :key, :secret_key, :region
87
+ def region
88
+ @region ||= CycloneLariat.aws_default_region
89
+ end
90
+
91
+ def client_id
92
+ @client_id ||= CycloneLariat.aws_client_id
93
+ end
94
+
95
+ private
84
96
 
85
97
  def aws_client
86
98
  @aws_client ||= aws_client_class.new(credentials: aws_credentials, region: region)
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CycloneLariat
4
+ class << self
5
+ DEFAULT_VERSION = 1
6
+
7
+ attr_accessor :aws_key, :aws_secret_key, :publisher, :aws_default_region, :default_instance,
8
+ :aws_client_id
9
+ attr_writer :default_version
10
+
11
+ def default_version
12
+ @default_version ||= DEFAULT_VERSION
13
+ end
14
+ end
15
+ end
@@ -9,10 +9,6 @@ module CycloneLariat
9
9
  message 'Received message is empty'
10
10
  end
11
11
 
12
- class TopicNotFound < LunaPark::Errors::System
13
- message { |d| "Could not found topic: `#{d[:expected_topic]}`" }
14
- end
15
-
16
12
  class ClientError < LunaPark::Errors::Business
17
13
  attr_writer :message, :details
18
14
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'aws-sdk-sns'
4
4
  require_relative 'abstract/client'
5
- require_relative 'list_topics_store'
6
5
 
7
6
  module CycloneLariat
8
7
  class SnsClient < Abstract::Client
@@ -13,12 +12,9 @@ module CycloneLariat
13
12
  SNS_SUFFIX = :fanout
14
13
 
15
14
  def publish(msg, topic: nil)
16
- topic ||= [instance, msg.kind, SNS_SUFFIX, publisher, msg.type].join('-')
17
-
18
- aws_client.publish(
19
- topic_arn: topic_arn(topic),
20
- message: msg.to_json
21
- )
15
+ topic ||= get_topic(msg.kind, msg.type)
16
+ arn = get_arn(topic)
17
+ aws_client.publish(topic_arn: arn, message: msg.to_json)
22
18
  end
23
19
 
24
20
  def publish_event(type, data: {}, version: self.version, uuid: SecureRandom.uuid, topic: nil)
@@ -31,22 +27,12 @@ module CycloneLariat
31
27
 
32
28
  private
33
29
 
34
- def topic_arn(topic_name)
35
- topics_store.add_topics(aws_client)
36
- topic_arn = topics_store.topic_arn(topic_name)
37
-
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
30
+ def get_arn(topic)
31
+ ['arn', 'aws', 'sns', region, client_id, topic].join ':'
46
32
  end
47
33
 
48
- def topics_store
49
- ListTopicsStore.instance
34
+ def get_topic(kind, type)
35
+ [instance, kind, SNS_SUFFIX, publisher, type].join '-'
50
36
  end
51
37
  end
52
38
  end
@@ -34,8 +34,6 @@ module CycloneLariat
34
34
 
35
35
  def url(topic_name)
36
36
  aws_client.get_queue_url(queue_name: topic_name).queue_url
37
- rescue Aws::SQS::Errors::NonExistentQueue => _e
38
- raise Errors::TopicNotFound.new(expected_topic: topic_name, existed_topics: aws_client.list_queues)
39
37
  end
40
38
  end
41
39
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CycloneLariat
4
- VERSION = '0.3.8'
4
+ VERSION = '0.3.10'
5
5
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'cyclone_lariat/configure'
3
4
  require_relative 'cyclone_lariat/sns_client'
4
5
  require_relative 'cyclone_lariat/errors'
5
6
  require_relative 'cyclone_lariat/event'
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.8
4
+ version: 0.3.10
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-09-06 00:00:00.000000000 Z
12
+ date: 2022-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk-sns
@@ -269,9 +269,9 @@ 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
274
- - lib/cyclone_lariat/list_topics_store.rb
275
275
  - lib/cyclone_lariat/messages_mapper.rb
276
276
  - lib/cyclone_lariat/messages_repo.rb
277
277
  - lib/cyclone_lariat/middleware.rb
@@ -1,45 +0,0 @@
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