action_subscriber 2.1.0.pre1 → 2.1.0

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: cdfd01dd3dd2055815f165b70bce923d36fe1db7
4
- data.tar.gz: 261530f967fe4368afa58295344e1fe40ee70746
3
+ metadata.gz: c31b26344944773ea0c63f2ba81c2b9d2d9e3c8b
4
+ data.tar.gz: f8f231f821d5b33937abfff11ce996033d810f88
5
5
  SHA512:
6
- metadata.gz: 109f19c08d6975bca0af2df1ff70483ef8e3211d235e4c4767cba1d386c78085be51d021357ccc76f1d2f86564fa3a43c3500869ba690e970f5cc06a3032ed9e
7
- data.tar.gz: 3646c5fe3efb28a73d98a3a8aa991dfeac31e71d7946b0549dc7e32610c30cd6914241e6775f867828729e3bb15c6fa15ba48be715a1b1a7bc30352acc6e160e
6
+ metadata.gz: 5f095a28d75908af71ef2bbf5d75638b434663248bef1b728818ff566c5b21cbd411a4dc17bd5ffa89964516636d38ffd506d781df4b53411bf5d3a3769bfa5c
7
+ data.tar.gz: e20052f487628bd2bd7a4af42c399db06c4257f17b3adaaf3aafeff272f4031816899ef4a30053d871aa9313790b4cf591fbd70445117baed92734785d710d87
@@ -29,6 +29,7 @@ require "action_subscriber/route_set"
29
29
  require "action_subscriber/router"
30
30
  require "action_subscriber/threadpool"
31
31
  require "action_subscriber/base"
32
+ require "action_subscriber/uri"
32
33
 
33
34
  module ActionSubscriber
34
35
  ##
@@ -12,14 +12,17 @@ module ActionSubscriber
12
12
  :host,
13
13
  :hosts,
14
14
  :mode,
15
+ :password,
15
16
  :pop_interval,
16
17
  :port,
17
18
  :prefetch,
18
19
  :publisher_confirms,
19
20
  :seconds_to_wait_for_graceful_shutdown,
21
+ :username,
20
22
  :threadpool_size,
21
23
  :timeout,
22
- :times_to_pop
24
+ :times_to_pop,
25
+ :virtual_host
23
26
 
24
27
  DEFAULTS = {
25
28
  :allow_low_priority_methods => false,
@@ -39,7 +42,10 @@ module ActionSubscriber
39
42
  :seconds_to_wait_for_graceful_shutdown => 30,
40
43
  :threadpool_size => 8,
41
44
  :timeout => 1,
42
- :times_to_pop => 8
45
+ :times_to_pop => 8,
46
+ :username => "guest",
47
+ :password => "guest",
48
+ :virtual_host => "/"
43
49
  }
44
50
 
45
51
  ##
@@ -89,6 +95,13 @@ module ActionSubscriber
89
95
  self.decoder.merge!(decoders)
90
96
  end
91
97
 
98
+ def connection_string=(url)
99
+ settings = ::ActionSubscriber::URI.parse_amqp_url(url)
100
+ settings.each do |key, value|
101
+ send("#{key}=", value)
102
+ end
103
+ end
104
+
92
105
  def hosts
93
106
  return @hosts if @hosts.size > 0
94
107
  [ host ]
@@ -62,10 +62,13 @@ module ActionSubscriber
62
62
 
63
63
  def self.connection_options
64
64
  {
65
+ :continuation_timeout => ::ActionSubscriber.configuration.timeout * 1_000.0, #convert sec to ms
65
66
  :heartbeat => ::ActionSubscriber.configuration.heartbeat,
66
67
  :hosts => ::ActionSubscriber.configuration.hosts,
68
+ :pass => ::ActionSubscriber.configuration.password,
67
69
  :port => ::ActionSubscriber.configuration.port,
68
- :continuation_timeout => ::ActionSubscriber.configuration.timeout * 1_000.0, #convert sec to ms
70
+ :user => ::ActionSubscriber.configuration.username,
71
+ :vhost => ::ActionSubscriber.configuration.virtual_host,
69
72
  :automatically_recover => true,
70
73
  :network_recovery_interval => NETWORK_RECOVERY_INTERVAL,
71
74
  :recover_from_connection_close => true,
@@ -0,0 +1,28 @@
1
+ # Taken and adapted from https://github.com/ruby-amqp/amq-protocol/blob/master/lib/amq/uri.rb
2
+ require "cgi"
3
+ require "uri"
4
+
5
+ module ActionSubscriber
6
+ class URI
7
+ AMQP_PORTS = {"amqp" => 5672, "amqps" => 5671}.freeze
8
+
9
+ def self.parse_amqp_url(connection_string)
10
+ uri = ::URI.parse(connection_string)
11
+ raise ArgumentError.new("Connection URI must use amqp or amqps schema (example: amqp://bus.megacorp.internal:5766), learn more at http://bit.ly/ks8MXK") unless %w{amqp amqps}.include?(uri.scheme)
12
+
13
+ opts = {}
14
+
15
+ opts[:username] = ::CGI::unescape(uri.user) if uri.user
16
+ opts[:password] = ::CGI::unescape(uri.password) if uri.password
17
+ opts[:host] = uri.host if uri.host
18
+ opts[:port] = uri.port || AMQP_PORTS[uri.scheme]
19
+
20
+ if uri.path =~ %r{^/(.*)}
21
+ raise ArgumentError.new("#{uri} has multiple-segment path; please percent-encode any slashes in the vhost name (e.g. /production => %2Fproduction). Learn more at http://bit.ly/amqp-gem-and-connection-uris") if $1.index('/')
22
+ opts[:virtual_host] = ::CGI::unescape($1)
23
+ end
24
+
25
+ opts
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module ActionSubscriber
2
- VERSION = "2.1.0.pre1"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -5,6 +5,7 @@ describe ::ActionSubscriber::Configuration do
5
5
  specify { expect(subject.async_publisher_drop_messages_when_queue_full).to eq(false) }
6
6
  specify { expect(subject.async_publisher_max_queue_size).to eq(1_000_000) }
7
7
  specify { expect(subject.async_publisher_supervisor_interval).to eq(200) }
8
+ specify { expect(subject.default_exchange).to eq("events") }
8
9
  specify { expect(subject.heartbeat).to eq(5) }
9
10
  specify { expect(subject.host).to eq("localhost") }
10
11
  specify { expect(subject.mode).to eq('subscribe') }
@@ -37,4 +38,15 @@ describe ::ActionSubscriber::Configuration do
37
38
  }.to raise_error(/The foo decoder was given with arity of 2/)
38
39
  end
39
40
  end
41
+
42
+ describe "connection_string" do
43
+ it "explodes the connection string into the corresponding settings" do
44
+ subject.connection_string = "amqp://user:pass@host:100/vhost"
45
+ expect(subject.username).to eq("user")
46
+ expect(subject.password).to eq("pass")
47
+ expect(subject.host).to eq("host")
48
+ expect(subject.port).to eq(100)
49
+ expect(subject.virtual_host).to eq("vhost")
50
+ end
51
+ end
40
52
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_subscriber
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0.pre1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Stien
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2016-02-04 00:00:00.000000000 Z
15
+ date: 2016-02-08 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activesupport
@@ -224,6 +224,7 @@ files:
224
224
  - lib/action_subscriber/rspec.rb
225
225
  - lib/action_subscriber/subscribable.rb
226
226
  - lib/action_subscriber/threadpool.rb
227
+ - lib/action_subscriber/uri.rb
227
228
  - lib/action_subscriber/version.rb
228
229
  - routing.md
229
230
  - spec/integration/around_filters_spec.rb
@@ -270,9 +271,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
270
271
  version: '0'
271
272
  required_rubygems_version: !ruby/object:Gem::Requirement
272
273
  requirements:
273
- - - ">"
274
+ - - ">="
274
275
  - !ruby/object:Gem::Version
275
- version: 1.3.1
276
+ version: '0'
276
277
  requirements: []
277
278
  rubyforge_project:
278
279
  rubygems_version: 2.4.5