circuitry 1.4.1 → 2.0.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.
@@ -0,0 +1,60 @@
1
+ require 'circuitry/services/sns'
2
+ require 'circuitry/topic'
3
+
4
+ module Circuitry
5
+ class SubscriptionCreator
6
+ include Services::SNS
7
+ include Services::SQS
8
+
9
+ attr_reader :queue
10
+ attr_reader :topics
11
+
12
+ def self.subscribe_all(queue, topics)
13
+ new(queue, topics).subscribe_all
14
+ end
15
+
16
+ def initialize(queue, topics)
17
+ raise ArgumentError, 'queue must be a Circuitry::Queue' unless queue.is_a?(Circuitry::Queue)
18
+ raise ArgumentError, 'topics must be an array' unless topics.is_a?(Array)
19
+
20
+ @queue = queue
21
+ @topics = topics
22
+ end
23
+
24
+ def subscribe_all
25
+ topics.each do |topic|
26
+ sns.subscribe(topic_arn: topic.arn, endpoint: queue.arn, protocol: 'sqs')
27
+ end
28
+ sqs.set_queue_attributes(
29
+ queue_url: queue.url,
30
+ attributes: build_policy
31
+ )
32
+ end
33
+
34
+ private
35
+
36
+ def build_policy
37
+ # The aws ruby SDK doesn't have a policy builder :{
38
+ {
39
+ 'Policy' => {
40
+ 'Version' => '2012-10-17',
41
+ 'Id' => '#{queue.arn}/SNSPolicy',
42
+ 'Statement' => topics.map { |t| build_policy_statement(t) }
43
+ }.to_json
44
+ }
45
+ end
46
+
47
+ def build_policy_statement(topic)
48
+ {
49
+ 'Sid' => "Sid#{topic.name}",
50
+ 'Effect' => 'Allow',
51
+ 'Principal' => { 'AWS' => '*' },
52
+ 'Action' => 'SQS:SendMessage',
53
+ 'Resource' => queue.arn,
54
+ 'Condition' => {
55
+ 'ArnEquals' => { 'aws:SourceArn' => topic.arn }
56
+ }
57
+ }
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,11 @@
1
+ namespace :circuitry do
2
+ desc 'Create subscriber queues and subscribe queue to topics'
3
+ task setup: :environment do
4
+ require 'circuitry/provisioner'
5
+
6
+ logger = Logger.new(STDOUT)
7
+ logger.level = Logger::INFO
8
+
9
+ Circuitry::Provisioner.new(Circuitry.config, logger: logger).run
10
+ end
11
+ end
@@ -16,10 +16,10 @@ module Circuitry
16
16
  end
17
17
 
18
18
  def topic
19
- return @topic if defined?(@topic)
19
+ return @_topic if defined?(@_topic)
20
20
 
21
21
  response = sns.create_topic(name: topic_name)
22
- @topic = Topic.new(response.topic_arn)
22
+ @_topic = Topic.new(response.topic_arn)
23
23
  end
24
24
  end
25
25
  end
@@ -1,3 +1,3 @@
1
1
  module Circuitry
2
- VERSION = '1.4.1'
2
+ VERSION = '2.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circuitry
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Huggins
8
+ - Brandon Croft
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2016-01-21 00:00:00.000000000 Z
12
+ date: 2016-01-28 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: aws-sdk
@@ -52,20 +53,6 @@ dependencies:
52
53
  - - "~>"
53
54
  - !ruby/object:Gem::Version
54
55
  version: '1.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: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
56
  - !ruby/object:Gem::Dependency
70
57
  name: bundler
71
58
  requirement: !ruby/object:Gem::Requirement
@@ -81,49 +68,49 @@ dependencies:
81
68
  - !ruby/object:Gem::Version
82
69
  version: '1.8'
83
70
  - !ruby/object:Gem::Dependency
84
- name: rake
71
+ name: codeclimate-test-reporter
85
72
  requirement: !ruby/object:Gem::Requirement
86
73
  requirements:
87
- - - "~>"
74
+ - - ">="
88
75
  - !ruby/object:Gem::Version
89
- version: '10.0'
76
+ version: '0'
90
77
  type: :development
91
78
  prerelease: false
92
79
  version_requirements: !ruby/object:Gem::Requirement
93
80
  requirements:
94
- - - "~>"
81
+ - - ">="
95
82
  - !ruby/object:Gem::Version
96
- version: '10.0'
83
+ version: '0'
97
84
  - !ruby/object:Gem::Dependency
98
- name: rspec
85
+ name: connection_pool
99
86
  requirement: !ruby/object:Gem::Requirement
100
87
  requirements:
101
- - - "~>"
88
+ - - ">="
102
89
  - !ruby/object:Gem::Version
103
- version: '3.2'
90
+ version: '0'
104
91
  type: :development
105
92
  prerelease: false
106
93
  version_requirements: !ruby/object:Gem::Requirement
107
94
  requirements:
108
- - - "~>"
95
+ - - ">="
109
96
  - !ruby/object:Gem::Version
110
- version: '3.2'
97
+ version: '0'
111
98
  - !ruby/object:Gem::Dependency
112
- name: rspec-its
99
+ name: dalli
113
100
  requirement: !ruby/object:Gem::Requirement
114
101
  requirements:
115
- - - "~>"
102
+ - - ">="
116
103
  - !ruby/object:Gem::Version
117
- version: '1.2'
104
+ version: '0'
118
105
  type: :development
119
106
  prerelease: false
120
107
  version_requirements: !ruby/object:Gem::Requirement
121
108
  requirements:
122
- - - "~>"
109
+ - - ">="
123
110
  - !ruby/object:Gem::Version
124
- version: '1.2'
111
+ version: '0'
125
112
  - !ruby/object:Gem::Dependency
126
- name: codeclimate-test-reporter
113
+ name: memcache_mock
127
114
  requirement: !ruby/object:Gem::Requirement
128
115
  requirements:
129
116
  - - ">="
@@ -137,7 +124,7 @@ dependencies:
137
124
  - !ruby/object:Gem::Version
138
125
  version: '0'
139
126
  - !ruby/object:Gem::Dependency
140
- name: redis
127
+ name: mock_redis
141
128
  requirement: !ruby/object:Gem::Requirement
142
129
  requirements:
143
130
  - - ">="
@@ -151,7 +138,7 @@ dependencies:
151
138
  - !ruby/object:Gem::Version
152
139
  version: '0'
153
140
  - !ruby/object:Gem::Dependency
154
- name: mock_redis
141
+ name: pry-byebug
155
142
  requirement: !ruby/object:Gem::Requirement
156
143
  requirements:
157
144
  - - ">="
@@ -165,21 +152,21 @@ dependencies:
165
152
  - !ruby/object:Gem::Version
166
153
  version: '0'
167
154
  - !ruby/object:Gem::Dependency
168
- name: dalli
155
+ name: rake
169
156
  requirement: !ruby/object:Gem::Requirement
170
157
  requirements:
171
- - - ">="
158
+ - - "~>"
172
159
  - !ruby/object:Gem::Version
173
- version: '0'
160
+ version: '10.0'
174
161
  type: :development
175
162
  prerelease: false
176
163
  version_requirements: !ruby/object:Gem::Requirement
177
164
  requirements:
178
- - - ">="
165
+ - - "~>"
179
166
  - !ruby/object:Gem::Version
180
- version: '0'
167
+ version: '10.0'
181
168
  - !ruby/object:Gem::Dependency
182
- name: memcache_mock
169
+ name: redis
183
170
  requirement: !ruby/object:Gem::Requirement
184
171
  requirements:
185
172
  - - ">="
@@ -193,7 +180,35 @@ dependencies:
193
180
  - !ruby/object:Gem::Version
194
181
  version: '0'
195
182
  - !ruby/object:Gem::Dependency
196
- name: connection_pool
183
+ name: rspec
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '3.2'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: '3.2'
196
+ - !ruby/object:Gem::Dependency
197
+ name: rspec-its
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '1.2'
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '1.2'
210
+ - !ruby/object:Gem::Dependency
211
+ name: thor
197
212
  requirement: !ruby/object:Gem::Requirement
198
213
  requirements:
199
214
  - - ">="
@@ -206,15 +221,19 @@ dependencies:
206
221
  - - ">="
207
222
  - !ruby/object:Gem::Version
208
223
  version: '0'
209
- description: Amazon SNS publishing and SQS queue processing.
224
+ description: A Circuitry publisher application can broadcast events which can be processed
225
+ independently by Circuitry subscriber applications.
210
226
  email:
211
227
  - matt.huggins@kapost.com
212
- executables: []
228
+ - brandon@kapost.com
229
+ executables:
230
+ - circuitry
213
231
  extensions: []
214
232
  extra_rdoc_files: []
215
233
  files:
216
234
  - ".gitignore"
217
235
  - ".rspec"
236
+ - ".rubocop.yml"
218
237
  - CHANGELOG.md
219
238
  - Gemfile
220
239
  - LICENSE.txt
@@ -224,7 +243,9 @@ files:
224
243
  - bin/setup
225
244
  - circle.yml
226
245
  - circuitry.gemspec
246
+ - exe/circuitry
227
247
  - lib/circuitry.rb
248
+ - lib/circuitry/cli.rb
228
249
  - lib/circuitry/concerns/async.rb
229
250
  - lib/circuitry/configuration.rb
230
251
  - lib/circuitry/locks/base.rb
@@ -237,10 +258,16 @@ files:
237
258
  - lib/circuitry/processors/batcher.rb
238
259
  - lib/circuitry/processors/forker.rb
239
260
  - lib/circuitry/processors/threader.rb
261
+ - lib/circuitry/provisioner.rb
240
262
  - lib/circuitry/publisher.rb
263
+ - lib/circuitry/queue.rb
264
+ - lib/circuitry/queue_creator.rb
265
+ - lib/circuitry/railtie.rb
241
266
  - lib/circuitry/services/sns.rb
242
267
  - lib/circuitry/services/sqs.rb
243
268
  - lib/circuitry/subscriber.rb
269
+ - lib/circuitry/subscription_creator.rb
270
+ - lib/circuitry/tasks.rb
244
271
  - lib/circuitry/topic.rb
245
272
  - lib/circuitry/topic_creator.rb
246
273
  - lib/circuitry/version.rb
@@ -264,8 +291,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
264
291
  version: '0'
265
292
  requirements: []
266
293
  rubyforge_project:
267
- rubygems_version: 2.4.8
294
+ rubygems_version: 2.5.1
268
295
  signing_key:
269
296
  specification_version: 4
270
- summary: Kapost notification pub/sub and message queue processing.
297
+ summary: Decouple ruby applications using Amazon SNS fanout with SQS processing.
271
298
  test_files: []