propono 2.0.0.rc2 → 2.0.0.rc3

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
  SHA1:
3
- metadata.gz: cdafed27b21eb9c0036e0dfcddb71d4fba5942ab
4
- data.tar.gz: 76aeeaf6298fa889277144044ceb6cdf5b735fa7
3
+ metadata.gz: 97673d01a5c39db6689660e59a8667a342c759ab
4
+ data.tar.gz: 3e221dff98ec598ee9bd3144bca3dbae9a286de2
5
5
  SHA512:
6
- metadata.gz: c10ed26f455590cc1f0087e7f3123c252028592e8fdcb736e8b06bf48bb3e0d81ea7b0808ac9c127c24673276512a8d3695f75800f98bc41886c3d3a00d50805
7
- data.tar.gz: 19adb710ff52cef5489ffc7bb5a0c4dddd46b467c1bbe93de7e562d5462b9c11124240ceec6fd69c1c5328f969ebf0edcee292a79ac7b7412de60a7d1805fd91
6
+ metadata.gz: 94bbdc2ef73278a7258ef1d404c225e26e40db5f62cd5f5f3d1b7a35380b6867e256fc39dbda5755291bca3c5333444190a516a86ffcacaac98a21559cc0371c
7
+ data.tar.gz: cac7956743dbf2c7eab5237966471ccdc86cc460756d9f0d113284637d360746af27abbb1dc4eea65a962cca18a0a6696a4a74d279e819ad7a152ec8af215af8
data/README.md CHANGED
@@ -10,7 +10,7 @@ It's beautifully simple to use. [Watch an introduction](https://www.youtube.com/
10
10
 
11
11
  ```ruby
12
12
  # On Machine A
13
- Propono::Client.new.listen_to_queue('some-topic') do |message|
13
+ Propono::Client.new.listen('some-topic') do |message|
14
14
  puts "I just received: #{message}"
15
15
  end
16
16
 
@@ -26,7 +26,7 @@ Propono::Client.new.publish('some-topic', "The Best Message Ever")
26
26
  Version 2 of Propono changed a few things:
27
27
  - We moved from a global interface to a client interface. Rather than calling `publish` and equivalent on `Propono`, you should now initialize a `Propono::Client` and then call everything on that client. This fixes issues with thread safety and global config.
28
28
  - We have also removed the dependancy on Fog and instead switch to the `sns` and `sqs` mini-gems of `aws-sdk`.
29
- - UDP and TCP support have been removed, an subscribe_by_post has been removed.
29
+ - UDP and TCP support have been removed, and `subscribe_by_post` has been removed.
30
30
  - We are now using long-polling. This makes Propono **significantly** faster (10-100x).
31
31
 
32
32
  ## Installation
@@ -68,7 +68,7 @@ Listening for messages is easy too. Just tell Propono what your application is c
68
68
  ```ruby
69
69
  client = Propono::Client.new
70
70
  client.config.application_name = "application-name" # Something unique to this app.
71
- client.listen_to_queue('some-topic') do |message|
71
+ client.listen('some-topic') do |message|
72
72
  # ... Do something interesting with the message
73
73
  end
74
74
  ```
@@ -51,7 +51,7 @@ module Propono
51
51
 
52
52
  # Creates a new SNS-SQS subscription on the specified topic.
53
53
  #
54
- # This is implicitly called by {#listen_to_queue}.
54
+ # This is implicitly called by {#listen}.
55
55
  #
56
56
  # @param [String] topic The name of the topic to subscribe to.
57
57
  def subscribe(topic)
@@ -5,36 +5,41 @@ module Propono
5
5
 
6
6
  class Configuration
7
7
 
8
- SETTINGS = [
9
- :use_iam_profile, :access_key, :secret_key, :queue_region, :queue_suffix,
10
- :application_name,
11
- :logger,
12
- :max_retries, :num_messages_per_poll
13
- ]
14
- attr_writer *SETTINGS
15
-
16
- def initialize
17
- self.logger = Propono::Logger.new
18
- self.queue_suffix = ""
19
- self.use_iam_profile = false
20
- self.max_retries = 0
21
- self.num_messages_per_poll = 10
22
- end
8
+ def self.add_setting(sym, required: true)
9
+ define_method(sym) do
10
+ required ? get_or_raise(sym) : @settings[sym]
11
+ end
23
12
 
24
- SETTINGS.each do |setting|
25
- define_method setting do
26
- get_or_raise(setting)
13
+ define_method("#{sym}=") do |new_value|
14
+ @settings[sym] = new_value
27
15
  end
28
16
  end
29
17
 
30
- attr_reader :use_iam_profile, :queue_suffix
18
+ add_setting :access_key
19
+ add_setting :secret_key
20
+ add_setting :queue_region
21
+ add_setting :application_name
22
+ add_setting :logger
23
+ add_setting :max_retries
24
+ add_setting :num_messages_per_poll
25
+
26
+ add_setting :use_iam_profile, required: false
27
+ add_setting :queue_suffix, required: false
28
+
29
+ def initialize
30
+ @settings = {
31
+ logger: Propono::Logger.new,
32
+ queue_suffix: "",
33
+ use_iam_profile: false,
34
+ max_retries: 0,
35
+ num_messages_per_poll: 10
36
+ }
37
+ end
31
38
 
32
39
  private
33
40
 
34
41
  def get_or_raise(setting)
35
- val = instance_variable_get("@#{setting.to_s}")
36
- val.nil?? raise(ProponoConfigurationError.new("Configuration for #{setting} is not set")) : val
42
+ @settings[setting] || raise(ProponoConfigurationError.new("Configuration for #{setting} is not set"))
37
43
  end
38
44
  end
39
45
  end
40
-
@@ -6,13 +6,13 @@ module Propono
6
6
 
7
7
  StdLevels.each do |level|
8
8
  define_method level do |*args|
9
- $stdout.puts *args
9
+ $stdout.puts(*args)
10
10
  end
11
11
  end
12
12
 
13
13
  ErrorLevels.each do |level|
14
14
  define_method level do |*args|
15
- $stderr.puts *args
15
+ $stderr.puts(*args)
16
16
  end
17
17
  end
18
18
  end
@@ -93,7 +93,7 @@ module Propono
93
93
 
94
94
  def requeue_message_on_failure(sqs_message, exception)
95
95
  next_queue = (sqs_message.failure_count < propono_config.max_retries) ? main_queue : failed_queue
96
- propono_config.logger.error "Error proessing message, moving to queue: #{next_queue}"
96
+ propono_config.logger.error "Error processing message, moving to queue: #{next_queue}"
97
97
  aws_client.send_to_sqs(next_queue, sqs_message.to_json_with_exception(exception))
98
98
  end
99
99
 
@@ -1,3 +1,3 @@
1
1
  module Propono
2
- VERSION = "2.0.0.rc2"
2
+ VERSION = "2.0.0.rc3"
3
3
  end
@@ -0,0 +1,20 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module Propono
4
+ class AwsClientTest < Minitest::Test
5
+
6
+ def test_publish_to_sns_proxies
7
+ client = AwsClient.new(nil)
8
+ sns_client = mock
9
+ message = {foo: 'bar'}
10
+ topic_arn = "asd"
11
+ topic = mock(arn: topic_arn)
12
+ sns_client.expects(:publish).with(
13
+ topic_arn: topic_arn,
14
+ message: message.to_json
15
+ )
16
+ client.stubs(sns_client: sns_client)
17
+ client.publish_to_sns(topic, message)
18
+ end
19
+ end
20
+ end
@@ -45,12 +45,29 @@ module Propono
45
45
  assert_equal application_name, propono_config.application_name
46
46
  end
47
47
 
48
+ def test_default_logger
49
+ assert propono_config.logger.is_a?(Propono::Logger)
50
+ end
51
+
52
+ def test_logger
53
+ propono_config.logger = :my_logger
54
+ assert_equal :my_logger, propono_config.logger
55
+ end
56
+
57
+ def test_default_queue_suffix
58
+ assert_equal "", propono_config.queue_suffix
59
+ end
60
+
48
61
  def test_queue_suffix
49
62
  queue_suffix = "test-application-name"
50
63
  propono_config.queue_suffix = queue_suffix
51
64
  assert_equal queue_suffix, propono_config.queue_suffix
52
65
  end
53
66
 
67
+ def test_default_num_messages_per_poll
68
+ assert_equal 10, propono_config.num_messages_per_poll
69
+ end
70
+
54
71
  def test_num_messages_per_poll
55
72
  val = 3
56
73
  propono_config.num_messages_per_poll = val
@@ -81,6 +98,27 @@ module Propono
81
98
  end
82
99
  end
83
100
 
101
+ def test_missing_logger_throws_exception
102
+ propono_config.logger = nil
103
+ assert_raises(ProponoConfigurationError) do
104
+ propono_config.logger
105
+ end
106
+ end
107
+
108
+ def test_missing_max_retries_throws_exception
109
+ propono_config.max_retries = nil
110
+ assert_raises(ProponoConfigurationError) do
111
+ propono_config.max_retries
112
+ end
113
+ end
114
+
115
+ def test_missing_num_messages_per_poll_throws_exception
116
+ propono_config.num_messages_per_poll = nil
117
+ assert_raises(ProponoConfigurationError) do
118
+ propono_config.num_messages_per_poll
119
+ end
120
+ end
121
+
84
122
  def test_default_max_retries
85
123
  assert_equal 0, propono_config.max_retries
86
124
  end
@@ -115,12 +115,6 @@ module Propono
115
115
  end
116
116
  end
117
117
 
118
- def test_publish_should_raise_exception_if_topic_is_nil
119
- assert_raises(PublisherError, "Topic is nil") do
120
- Publisher.publish(aws_client, propono_config, nil, "foobar")
121
- end
122
- end
123
-
124
118
  def test_publish_should_raise_exception_if_message_is_nil
125
119
  assert_raises(PublisherError, "Message is nil") do
126
120
  Publisher.publish(aws_client, propono_config, "foobar", nil)
@@ -14,28 +14,23 @@ class Minitest::Test
14
14
  end
15
15
 
16
16
  def propono_config
17
- return @propono_config if @propono_config
18
-
19
- @propono_config = Propono::Configuration.new
20
- @propono_config.access_key = "test-access-key"
21
- @propono_config.secret_key = "test-secret-key"
22
- @propono_config.queue_region = "us-east-1"
23
- @propono_config.application_name = "MyApp"
24
- @propono_config.queue_suffix = ""
25
-
26
- @propono_config.logger.stubs(:debug)
27
- @propono_config.logger.stubs(:info)
28
- @propono_config.logger.stubs(:error)
29
-
30
- @propono_config
17
+ @propono_config ||= Propono::Configuration.new.tap do |c|
18
+ c.access_key = "test-access-key"
19
+ c.secret_key = "test-secret-key"
20
+ c.queue_region = "us-east-1"
21
+ c.application_name = "MyApp"
22
+ c.queue_suffix = ""
23
+
24
+ c.logger.stubs(:debug)
25
+ c.logger.stubs(:info)
26
+ c.logger.stubs(:error)
27
+ end
31
28
  end
32
29
 
33
30
  def aws_client
34
- return @aws_client if @aws_client
35
-
36
- @aws_client = Propono::AwsClient.new(mock)
37
- @aws_client.stubs(:sns_client)
38
- @aws_client.stubs(:sqs_client)
39
- @aws_client
31
+ @aws_client ||= Propono::AwsClient.new(mock).tap do |c|
32
+ c.stubs(:sns_client)
33
+ c.stubs(:sqs_client)
34
+ end
40
35
  end
41
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: propono
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc2
4
+ version: 2.0.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - MalcyL
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-04 00:00:00.000000000 Z
12
+ date: 2017-10-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk-sns
@@ -142,6 +142,7 @@ files:
142
142
  - lib/propono/utils.rb
143
143
  - lib/propono/version.rb
144
144
  - propono.gemspec
145
+ - test/components/aws_client_test.rb
145
146
  - test/components/aws_config_test.rb
146
147
  - test/components/client_test.rb
147
148
  - test/components/queue_subscription_test.rb
@@ -182,6 +183,7 @@ signing_key:
182
183
  specification_version: 4
183
184
  summary: General purpose pub/sub library built on top of AWS SNS and SQS
184
185
  test_files:
186
+ - test/components/aws_client_test.rb
185
187
  - test/components/aws_config_test.rb
186
188
  - test/components/client_test.rb
187
189
  - test/components/queue_subscription_test.rb