propono 0.1.0 → 0.2.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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d088866567c48097ae184895e09ead7de705179d
4
+ data.tar.gz: c6f6e90ed8d3c1773e95e1c7d60c211274df48d9
5
+ SHA512:
6
+ metadata.gz: b39237981ffd1d4c3515247ea61db476633f810e8de97308ec76a25efb4b5a0d6e9db71196c15b9250a88b6dee657f1ccc22940916c87619df8e14547e06f33f
7
+ data.tar.gz: 60bffaf2b6bd7f07189c5b3d441db887b90720ca3d1c5e5365895b407757943289b40c564b0a9244db1a805125b69e78dc534dd19382b6d302890cda3deb3cc7
data/README.md CHANGED
@@ -40,6 +40,7 @@ class Toy
40
40
  Propono.config.access_key = '...'
41
41
  Propono.config.secret_key = '...'
42
42
  Propono.config.queue_region = 'eu-west-1'
43
+ Propono.config.application_name = '...'
43
44
  end
44
45
  end
45
46
 
@@ -1,14 +1,16 @@
1
1
  require "propono/version"
2
2
  require 'propono/configuration'
3
- require 'propono/sns'
4
- require 'propono/sqs'
5
- require "propono/post_subscriber"
6
- require "propono/publisher"
7
- require "propono/queue"
8
- require "propono/queue_creator"
9
- require "propono/queue_subscriber"
10
- require "propono/subscriber"
11
- require "propono/topic_creator"
3
+ require 'propono/components/sns'
4
+ require 'propono/components/sqs'
5
+ require "propono/components/queue"
6
+ require "propono/components/topic"
7
+
8
+ require "propono/services/post_subscriber"
9
+ require "propono/services/publisher"
10
+ require "propono/services/queue_creator"
11
+ require "propono/services/queue_subscriber"
12
+ require "propono/services/subscriber"
13
+ require "propono/services/topic_creator"
12
14
 
13
15
  module Propono
14
16
  def self.config
@@ -0,0 +1,11 @@
1
+ module Propono
2
+ class Topic
3
+
4
+ include Sqs
5
+
6
+ attr_reader :arn
7
+ def initialize(arn)
8
+ @arn = arn
9
+ end
10
+ end
11
+ end
@@ -8,7 +8,7 @@ module Propono
8
8
  class Configuration
9
9
  include Singleton
10
10
 
11
- SETTINGS = [:access_key, :secret_key, :queue_region, :queue_url]
11
+ SETTINGS = [:access_key, :secret_key, :queue_region, :application_name]
12
12
  attr_writer *SETTINGS
13
13
 
14
14
  def initialize
@@ -15,15 +15,19 @@ module Propono
15
15
  end
16
16
 
17
17
  def subscribe
18
- @topic_arn = TopicCreator.find_or_create(@topic_id)
18
+ @topic = TopicCreator.find_or_create(@topic_id)
19
19
  @queue = QueueCreator.find_or_create(queue_name)
20
- sns.subscribe(@topic_arn, @queue.arn, 'sqs')
20
+ sns.subscribe(@topic.arn, @queue.arn, 'sqs')
21
21
  end
22
22
 
23
23
  private
24
24
 
25
25
  def queue_name
26
- @topic_id
26
+ "#{config.application_name.gsub(" ", "_")}::#{@topic_id}"
27
+ end
28
+
29
+ def config
30
+ Configuration.instance
27
31
  end
28
32
  end
29
33
  end
@@ -16,7 +16,8 @@ module Propono
16
16
  def find_or_create
17
17
  result = sns.create_topic(@topic_id)
18
18
  body = result.body
19
- body.fetch('TopicArn') { raise TopicCreatorError.new("No TopicArn returned from SNS") }
19
+ arn = body.fetch('TopicArn') { raise TopicCreatorError.new("No TopicArn returned from SNS") }
20
+ Topic.new(arn)
20
21
  end
21
22
  end
22
23
  end
@@ -1,3 +1,3 @@
1
1
  module Propono
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -34,10 +34,10 @@ module Propono
34
34
  assert_equal queue_region, config.queue_region
35
35
  end
36
36
 
37
- def test_queue_url
38
- queue_url = "test-queue-url"
39
- config.queue_url = queue_url
40
- assert_equal queue_url, config.queue_url
37
+ def test_application_name
38
+ application_name = "test-application-name"
39
+ config.application_name = application_name
40
+ assert_equal application_name, config.application_name
41
41
  end
42
42
 
43
43
  def test_missing_access_key_throws_exception
@@ -58,9 +58,9 @@ module Propono
58
58
  end
59
59
  end
60
60
 
61
- def test_missing_queue_url_throws_exception
61
+ def test_missing_application_name_throws_exception
62
62
  assert_raises(ConfigurationError) do
63
- config.queue_url
63
+ config.application_name
64
64
  end
65
65
  end
66
66
  end
@@ -3,16 +3,17 @@ require File.expand_path('../test_helper', __FILE__)
3
3
  module Propono
4
4
  class QueueSubscriberTest < Minitest::Test
5
5
  def test_create_topic
6
- topic = 'foobar'
7
- TopicCreator.expects(:find_or_create).with(topic)
8
- QueueSubscriber.subscribe(topic)
6
+ topic_id = 'foobar'
7
+ topic = Topic.new(topic_id)
8
+ TopicCreator.expects(:find_or_create).with(topic_id).returns(topic)
9
+ QueueSubscriber.subscribe(topic_id)
9
10
  end
10
11
 
11
12
  def test_sqs_create_is_called
12
- topic = "Foobar"
13
- subscriber = QueueSubscriber.new(topic)
13
+ topic_id = "Foobar"
14
+ subscriber = QueueSubscriber.new(topic_id)
14
15
 
15
- TopicCreator.stubs(find_or_create: "1123")
16
+ TopicCreator.stubs(find_or_create: Topic.new("1123"))
16
17
 
17
18
  sqs = mock()
18
19
  sqs.expects(:create_queue).with(subscriber.send(:queue_name)).returns(mock(body: {'QueueUrl' => Fog::AWS::SQS::Mock::QueueUrl}))
@@ -22,14 +23,27 @@ module Propono
22
23
  end
23
24
 
24
25
  def test_subscriber_queue_name
25
- skip
26
+ config.application_name = "MyApp"
27
+
28
+ topic_id = "Foobar"
29
+ subscriber = QueueSubscriber.new(topic_id)
30
+
31
+ assert_equal subscriber.send(:queue_name), "MyApp::Foobar"
32
+ end
33
+
34
+ def test_subscriber_queue_name_with_spaces
35
+ config.application_name = "My App"
36
+
37
+ topic_id = "Foobar"
38
+ subscriber = QueueSubscriber.new(topic_id)
39
+
40
+ assert_equal subscriber.send(:queue_name), "My_App::Foobar"
26
41
  end
27
42
 
28
43
  def test_subscribe_calls_subscribe
29
44
  arn = "arn123"
30
- queue_url =
31
45
 
32
- TopicCreator.stubs(find_or_create: arn)
46
+ TopicCreator.stubs(find_or_create: Topic.new(arn))
33
47
  QueueCreator.stubs(find_or_create: Queue.new(Fog::AWS::SQS::Mock::QueueUrl))
34
48
 
35
49
  sns = mock()
@@ -19,6 +19,11 @@ class Minitest::Test
19
19
  Propono::Configuration.instance.access_key = "test-access-key"
20
20
  Propono::Configuration.instance.secret_key = "test-secret-key"
21
21
  Propono::Configuration.instance.queue_region = "us-east-1"
22
+ Propono::Configuration.instance.application_name = "MyApp"
23
+ end
24
+
25
+ def config
26
+ Propono::Configuration.instance
22
27
  end
23
28
  end
24
29
 
@@ -21,7 +21,8 @@ module Propono
21
21
  creator = TopicCreator.new("foobar")
22
22
  creator.stubs(sns: sns)
23
23
 
24
- assert_equal arn, creator.find_or_create
24
+ topic = creator.find_or_create
25
+ assert_equal arn, topic.arn
25
26
  end
26
27
 
27
28
  def test_should_raise_exception_if_no_arn_returned
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ module Propono
4
+ class TopicTest < Minitest::Test
5
+ def test_intialization_sets_url
6
+ arn = 'foobar'
7
+ topic = Topic.new(arn)
8
+ assert arn, topic.arn
9
+ end
10
+ end
11
+ end
12
+
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: propono
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - MalcyL
@@ -15,23 +14,20 @@ dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: fog
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ! '>='
18
+ - - '>='
21
19
  - !ruby/object:Gem::Version
22
20
  version: '0'
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ! '>='
25
+ - - '>='
29
26
  - !ruby/object:Gem::Version
30
27
  version: '0'
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: bundler
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ~>
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ~>
45
40
  - !ruby/object:Gem::Version
@@ -47,39 +42,34 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rake
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ! '>='
46
+ - - '>='
53
47
  - !ruby/object:Gem::Version
54
48
  version: '0'
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ! '>='
53
+ - - '>='
61
54
  - !ruby/object:Gem::Version
62
55
  version: '0'
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: mocha
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ! '>='
60
+ - - '>='
69
61
  - !ruby/object:Gem::Version
70
62
  version: '0'
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ! '>='
67
+ - - '>='
77
68
  - !ruby/object:Gem::Version
78
69
  version: '0'
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: minitest
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
74
  - - ~>
85
75
  - !ruby/object:Gem::Version
@@ -87,7 +77,6 @@ dependencies:
87
77
  type: :development
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
81
  - - ~>
93
82
  - !ruby/object:Gem::Version
@@ -108,16 +97,17 @@ files:
108
97
  - README.md
109
98
  - Rakefile
110
99
  - lib/propono.rb
100
+ - lib/propono/components/queue.rb
101
+ - lib/propono/components/sns.rb
102
+ - lib/propono/components/sqs.rb
103
+ - lib/propono/components/topic.rb
111
104
  - lib/propono/configuration.rb
112
- - lib/propono/post_subscriber.rb
113
- - lib/propono/publisher.rb
114
- - lib/propono/queue.rb
115
- - lib/propono/queue_creator.rb
116
- - lib/propono/queue_subscriber.rb
117
- - lib/propono/sns.rb
118
- - lib/propono/sqs.rb
119
- - lib/propono/subscriber.rb
120
- - lib/propono/topic_creator.rb
105
+ - lib/propono/services/post_subscriber.rb
106
+ - lib/propono/services/publisher.rb
107
+ - lib/propono/services/queue_creator.rb
108
+ - lib/propono/services/queue_subscriber.rb
109
+ - lib/propono/services/subscriber.rb
110
+ - lib/propono/services/topic_creator.rb
121
111
  - lib/propono/version.rb
122
112
  - propono.gemspec
123
113
  - test/configuration_test.rb
@@ -131,36 +121,30 @@ files:
131
121
  - test/subscriber_test.rb
132
122
  - test/test_helper.rb
133
123
  - test/topic_creator_test.rb
124
+ - test/topic_test.rb
134
125
  homepage: ''
135
126
  licenses:
136
127
  - AGPL3
128
+ metadata: {}
137
129
  post_install_message:
138
130
  rdoc_options: []
139
131
  require_paths:
140
132
  - lib
141
133
  required_ruby_version: !ruby/object:Gem::Requirement
142
- none: false
143
134
  requirements:
144
- - - ! '>='
135
+ - - '>='
145
136
  - !ruby/object:Gem::Version
146
137
  version: '0'
147
- segments:
148
- - 0
149
- hash: 1295735887844079183
150
138
  required_rubygems_version: !ruby/object:Gem::Requirement
151
- none: false
152
139
  requirements:
153
- - - ! '>='
140
+ - - '>='
154
141
  - !ruby/object:Gem::Version
155
142
  version: '0'
156
- segments:
157
- - 0
158
- hash: 1295735887844079183
159
143
  requirements: []
160
144
  rubyforge_project:
161
- rubygems_version: 1.8.25
145
+ rubygems_version: 2.0.0
162
146
  signing_key:
163
- specification_version: 3
147
+ specification_version: 4
164
148
  summary: General purpose pub/sub library built on top of AWS SNS and SQS
165
149
  test_files:
166
150
  - test/configuration_test.rb
@@ -174,3 +158,4 @@ test_files:
174
158
  - test/subscriber_test.rb
175
159
  - test/test_helper.rb
176
160
  - test/topic_creator_test.rb
161
+ - test/topic_test.rb