onstomp 1.0.1 → 1.0.2

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.
@@ -1,4 +1,20 @@
1
1
  # Changes
2
2
 
3
+ ## 1.0.2
4
+ * allow failover clients to be constructed from regular OnStomp::Client
5
+ instances, allowing fully configured SSL connections.
6
+
7
+ ## 1.0.1
8
+ * improved failover buffer handling
9
+ * added RECEIPT driven failover buffer handling - more reliable, but slower
10
+ as it requests receipts for nearly all frames.
11
+
12
+ ## 1.0.0
13
+ * initial release
14
+ * support for STOMP 1.0 and STOMP 1.1 protocols
15
+ * fully featured client with event bindings and non-blocking IO
16
+ * experimental support for open-uri STOMP interface
17
+ * experimental support for failover/reliable connection handling
18
+
3
19
  ## 1.0pre - 2011-03-30
4
20
  * initial pre-release
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in onstomp.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'rdiscount'
8
+ end
data/README.md CHANGED
@@ -48,9 +48,9 @@ style API for working with message brokers.
48
48
 
49
49
  ## Further Reading
50
50
 
51
- * A {file:docs/UserNarrative.md User's Narrative}
52
- * A {file:docs/DeveloperNarrative.md Developers's Narrative}
53
- * A {file:docs/CHANGELOG.md History of Changes}
51
+ * A {file:extra_doc/UserNarrative.md User's Narrative}
52
+ * A {file:extra_doc/DeveloperNarrative.md Developers's Narrative}
53
+ * A {file:extra_doc/CHANGELOG.md History of Changes}
54
54
 
55
55
  ## License
56
56
 
@@ -32,13 +32,20 @@ class OnStomp::Failover::Client
32
32
  # @return [true,false]
33
33
  attr_configurable_bool :randomize, :default => false
34
34
 
35
- attr_reader :uri, :client_pool, :active_client, :frame_buffer, :connection
35
+ attr_reader :uri, :hosts,
36
+ :client_pool, :active_client, :frame_buffer, :connection
36
37
 
37
38
  def initialize(uris, options={})
38
- @uri = OnStomp::Failover::URI::FAILOVER.parse uris
39
+ if uris.is_a? Array
40
+ @uri = OnStomp::Failover::URI::FAILOVER.new [], nil
41
+ @hosts = uris
42
+ else
43
+ @uri = OnStomp::Failover::URI::FAILOVER.parse uris
44
+ @hosts = @uri.failover_uris
45
+ end
39
46
  @client_mutex = Mutex.new
40
47
  configure_configurable options
41
- create_client_pool
48
+ create_client_pool hosts
42
49
  @active_client = nil
43
50
  @connection = nil
44
51
  @frame_buffer = buffer.new self
@@ -118,8 +125,8 @@ class OnStomp::Failover::Client
118
125
  sleep(retry_delay) if retry_delay > 0 && attempt > 1
119
126
  end
120
127
 
121
- def create_client_pool
122
- @client_pool = pool.new(uri.failover_uris)
128
+ def create_client_pool hosts
129
+ @client_pool = pool.new hosts
123
130
  on_connection_closed do |client, *_|
124
131
  unless @disconnecting
125
132
  trigger_failover_event(:lost, :on, active_client)
@@ -8,9 +8,9 @@ class OnStomp::Failover::Pools::Base
8
8
 
9
9
  # Creates a new client pool by mapping an array of URIs into an array of
10
10
  # {OnStomp::Client clients}.
11
- def initialize uris
12
- @clients = uris.map do |u|
13
- OnStomp::Client.new u
11
+ def initialize hosts
12
+ @clients = hosts.map do |h|
13
+ h.is_a?(OnStomp::Client) ? h : OnStomp::Client.new(h)
14
14
  end
15
15
  end
16
16
 
@@ -12,9 +12,7 @@ module OnStomp::Failover::URI
12
12
 
13
13
  attr_reader :failover_uris
14
14
  def initialize uris, query
15
- @failover_uris = uris.map do |u|
16
- u.is_a?(::URI) ? u : ::URI.parse(u.strip)
17
- end
15
+ @failover_uris = uris
18
16
  super 'failover', nil, nil, nil, nil, '', "(#{uris.join(',')})", query, nil
19
17
  end
20
18
 
@@ -42,12 +40,10 @@ module OnStomp::Failover::URI
42
40
  # @param [Array<String or URI>] uri_arr
43
41
  # @return [FAILOVER]
44
42
  def parse uri_str
45
- if uri_str.is_a? Array
46
- self.new uri_str, nil
47
- elsif uri_str =~ FAILOVER_REG
43
+ if uri_str =~ FAILOVER_REG
48
44
  self.new $1.split(','), $2
49
45
  else
50
- raise OnStomp::Failover::InvalidFailoverURIError, uri_str
46
+ raise OnStomp::Failover::InvalidFailoverURIError, uri_str.inspect
51
47
  end
52
48
  end
53
49
  end
@@ -7,7 +7,7 @@ module OnStomp
7
7
  # Minor / feature version
8
8
  MINOR = 0
9
9
  # Patch version
10
- PATCH = 1
10
+ PATCH = 2
11
11
  # Complete version
12
12
  VERSION = "#{MAJOR}.#{MINOR}.#{PATCH}"
13
13
  end
@@ -13,6 +13,20 @@ module OnStomp::Failover
13
13
  c.stub(:active_client => active_client)
14
14
  end
15
15
  }
16
+ describe "initialize" do
17
+ it "should be initialized by string" do
18
+ c = Client.new('failover:(stomp:///,stomp+ssl:///)')
19
+ c.uri.to_s.should == 'failover:(stomp:///,stomp+ssl:///)'
20
+ c.hosts.should == ['stomp:///', 'stomp+ssl:///']
21
+ end
22
+ it "should be initialized by array" do
23
+ real_client = OnStomp::Client.new('stomp+ssl:///')
24
+ c = Client.new(['stomp:///', real_client])
25
+ c.uri.to_s.should == 'failover:()'
26
+ c.hosts.should == ['stomp:///', real_client]
27
+ end
28
+ end
29
+
16
30
  describe ".connected?" do
17
31
  it "should be connected if it has an active client that's connected" do
18
32
  active_client.stub(:connected? => true)
@@ -67,7 +81,7 @@ module OnStomp::Failover
67
81
  # Get the hooks installed on our mocks
68
82
  active_client.stub(:connection => connection)
69
83
  client.stub(:client_pool => client_pool)
70
- client.__send__ :create_client_pool
84
+ client.__send__ :create_client_pool, []
71
85
  end
72
86
  it "should do nothing special if there is no active client" do
73
87
  client.stub(:active_client => nil)
@@ -11,42 +11,24 @@ module OnStomp::Failover
11
11
  it "should parse failover:(uri1,uri2...)?failoverParam1=..." do
12
12
  uri = parse_failover_uri 'failover:(stomp://host.domain.tld,stomp+ssl:///?param=value&param2=value2,stomp://user:pass@other.host.tld)?param=blah&param2=testing'
13
13
  uri.query.should == 'param=blah&param2=testing'
14
- uri.failover_uris.map { |u| u.scheme }.should == ['stomp', 'stomp+ssl', 'stomp']
15
- uri.failover_uris.map { |u| u.host }.should == ['host.domain.tld', nil, 'other.host.tld']
16
- uri.failover_uris.map { |u| u.query }.should == [nil, 'param=value&param2=value2', nil]
14
+ uri.failover_uris.should == ['stomp://host.domain.tld', 'stomp+ssl:///?param=value&param2=value2', 'stomp://user:pass@other.host.tld']
17
15
  uri.to_s.should == "failover:(stomp://host.domain.tld,stomp+ssl:///?param=value&param2=value2,stomp://user:pass@other.host.tld)?param=blah&param2=testing"
18
16
  end
19
17
  it "should parse failover://(uri1,uri2...)?failoverParam1=..." do
20
18
  uri = parse_failover_uri 'failover://(stomp://host.domain.tld,stomp+ssl:///?param=value&param2=value2,stomp://user:pass@other.host.tld)?param=blah&param2=testing'
21
19
  uri.query.should == 'param=blah&param2=testing'
22
- uri.failover_uris.map { |u| u.scheme }.should == ['stomp', 'stomp+ssl', 'stomp']
23
- uri.failover_uris.map { |u| u.host }.should == ['host.domain.tld', nil, 'other.host.tld']
24
- uri.failover_uris.map { |u| u.query }.should == [nil, 'param=value&param2=value2', nil]
20
+ uri.failover_uris.should == ['stomp://host.domain.tld', 'stomp+ssl:///?param=value&param2=value2', 'stomp://user:pass@other.host.tld']
25
21
  uri.to_s.should == "failover:(stomp://host.domain.tld,stomp+ssl:///?param=value&param2=value2,stomp://user:pass@other.host.tld)?param=blah&param2=testing"
26
22
  end
27
23
  it "should parse failover://uri1,uri2,..." do
28
24
  uri = parse_failover_uri 'failover://stomp://host.domain.tld,stomp+ssl:///?param=value&param2=value2,stomp://user:pass@other.host.tld'
29
25
  uri.query.should be_nil
30
- uri.failover_uris.map { |u| u.scheme }.should == ['stomp', 'stomp+ssl', 'stomp']
31
- uri.failover_uris.map { |u| u.host }.should == ['host.domain.tld', nil, 'other.host.tld']
32
- uri.failover_uris.map { |u| u.query }.should == [nil, 'param=value&param2=value2', nil]
26
+ uri.failover_uris.should == ['stomp://host.domain.tld', 'stomp+ssl:///?param=value&param2=value2', 'stomp://user:pass@other.host.tld']
33
27
  uri.to_s.should == "failover:(stomp://host.domain.tld,stomp+ssl:///?param=value&param2=value2,stomp://user:pass@other.host.tld)"
34
28
  end
35
- it "should parse an array of failover URIs" do
36
- uris = [ "stomp://host.domain.tld",
37
- ::URI.parse("stomp://user:pass@other.host.tld"),
38
- "stomp+ssl:///?param=value&param2=value2"]
39
- uri = parse_failover_uri uris
40
- uri.query.should be_nil
41
- uri.failover_uris.map { |u| u.scheme }.should == ['stomp', 'stomp', 'stomp+ssl']
42
- uri.failover_uris.map { |u| u.host }.should == ['host.domain.tld', 'other.host.tld', nil]
43
- uri.failover_uris.map { |u| u.query }.should == [nil, nil, 'param=value&param2=value2']
44
- uri.to_s.should == "failover:(stomp://host.domain.tld,stomp://user:pass@other.host.tld,stomp+ssl:///?param=value&param2=value2)"
45
- end
46
29
  it "should raise an error if it doesn't match the regex and isn't an array" do
47
30
  lambda {
48
- # The regex is pretty lax...
49
- parse_failover_uri "failover:"
31
+ parse_failover_uri ["some", "array"]
50
32
  }.should raise_error(OnStomp::Failover::InvalidFailoverURIError)
51
33
  end
52
34
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: onstomp
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.1
5
+ version: 1.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ian D. Eccles
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-05 00:00:00 -04:00
13
+ date: 2011-04-09 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency