asir_beanstalk 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog CHANGED
@@ -1,3 +1,8 @@
1
+ 2012-12-11 Kurt A. Stephens <ks.github@kurtstephens.com>
2
+
3
+ * v1.1.5: New version.
4
+ * Beanstalk: Properly handle uri, host, port, tube.
5
+
1
6
  2012-12-07 Kurt A. Stephens <ks.github@kurtstephens.com>
2
7
 
3
8
  * v1.1.4: New version.
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_dependency "asir", "~> 1.1.6"
21
+ gem.add_dependency "asir", "~> 1.1.7"
22
22
 
23
23
  gem.add_development_dependency 'rake', '>= 0.9.0'
24
24
  gem.add_development_dependency 'rspec', '~> 2.12.0'
@@ -5,26 +5,40 @@ module ASIR
5
5
  # !SLIDE
6
6
  # Beanstalk Transport
7
7
  class Beanstalk < TcpSocket
8
- LINE_TERMINATOR = "\r\n".freeze
9
-
10
- attr_accessor :tube, :priority, :delay, :ttr
8
+ attr_accessor :tube, :tube_default
9
+ attr_accessor :priority, :delay, :ttr
11
10
 
12
11
  def initialize *args
13
- self.port_default ||= 11300
14
- @tube ||= 'asir'
12
+ self.scheme_default ||= 'beanstalk'
13
+ self.host_default ||= '127.0.0.1'
14
+ self.port_default ||= 11300
15
+ self.tube_default ||= 'asir'
15
16
  @priority ||= 0
16
17
  @delay ||= 0
17
18
  @ttr ||= 600
18
19
  super
19
20
  end
20
21
 
22
+ def tube
23
+ @tube ||=
24
+ @uri && (
25
+ p = _uri.path.sub(%r{\A/}, '')
26
+ p = nil if p.empty?
27
+ p
28
+ ) || tube_default
29
+ end
30
+
31
+ def path_default
32
+ "/#{tube}"
33
+ end
34
+
21
35
  # !SLIDE
22
36
  # Sends the encoded Message payload String.
23
37
  def _send_message message, message_payload
24
38
  stream.with_stream! do | s |
25
39
  begin
26
- match =
27
- _beanstalk(s,
40
+ match =
41
+ _beanstalk(s,
28
42
  "put #{message[:beanstalk_priority] || @priority} #{message[:beanstalk_delay] || @delay} #{message[:beanstalk_ttr] || @ttr} #{message_payload.size}\r\n",
29
43
  /\AINSERTED (\d+)\r\n\Z/,
30
44
  message_payload)
@@ -45,12 +59,12 @@ module ASIR
45
59
  def _receive_message channel, additional_data
46
60
  channel.with_stream! do | stream |
47
61
  begin
48
- match =
62
+ match =
49
63
  _beanstalk(stream,
50
64
  RESERVE,
51
65
  /\ARESERVED (\d+) (\d+)\r\n\Z/)
52
66
  additional_data[:beanstalk_job_id] = match[1].to_i
53
- additional_data[:beanstalk_message_size] =
67
+ additional_data[:beanstalk_message_size] =
54
68
  size = match[2].to_i
55
69
  message_payload = stream.read(size)
56
70
  _read_line_and_expect! stream, /\A\r\n\Z/
@@ -72,7 +86,7 @@ module ASIR
72
86
  # There is a possibility here the following could happen:
73
87
  #
74
88
  # _receive_message
75
- # channel == #<Channel:1>
89
+ # channel == #<Channel:1>
76
90
  # channel.stream == #<TCPSocket:1234>
77
91
  # end
78
92
  # ...
@@ -80,7 +94,7 @@ module ASIR
80
94
  # channel.stream.close
81
95
  # channel.stream = nil
82
96
  # ...
83
- # _send_result
97
+ # _send_result
84
98
  # channel == #<Channel:1>
85
99
  # channel.stream == #<TCPSocket:5678> # NEW CONNECTION
86
100
  # stream.write "delete #{job_id}"
@@ -131,6 +145,8 @@ module ASIR
131
145
  match
132
146
  end
133
147
 
148
+ LINE_TERMINATOR = "\r\n".freeze
149
+
134
150
  def _after_connect! stream
135
151
  if @tube
136
152
  _beanstalk(stream,
@@ -148,7 +164,7 @@ module ASIR
148
164
  :try_sleep_increment => 0.1,
149
165
  :try_sleep_max => 10) do | stream |
150
166
  if @tube
151
- _beanstalk(stream,
167
+ _beanstalk(stream,
152
168
  "watch #{@tube}\r\n",
153
169
  /\AWATCHING (\d+)\r\n\Z/)
154
170
  end
@@ -173,8 +189,8 @@ module ASIR
173
189
  end
174
190
 
175
191
  def _start_conduit!
176
- addr = address ? "-l #{address} " : ""
177
- cmd = "beanstalkd #{addr}-p #{port}"
192
+ opt = host ? "-l #{host} " : ""
193
+ cmd = "beanstalkd #{opt}-p #{port}"
178
194
  $stderr.puts " #{cmd}" if @conduit_options[:verbose]
179
195
  exec(cmd)
180
196
  end
@@ -1,3 +1,3 @@
1
1
  module AsirBeanstalk
2
- VERSION = "1.1.4"
2
+ VERSION = "1.1.5"
3
3
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe "ASIR::Transport::Beanstalk" do
4
+ attr_accessor :t
5
+
6
+ it "should default to localhost:11300" do
7
+ t.host.should == '127.0.0.1'
8
+ t.host_default.should == '127.0.0.1'
9
+ t.port.should == 11300
10
+ t.port_default.should == 11300
11
+ t.tube.should == 'asir'
12
+ t.tube_default.should == 'asir'
13
+ t.path.should == '/asir'
14
+ t.uri.should == 'beanstalk://127.0.0.1:11300/asir'
15
+ end
16
+
17
+ it "should return a #host, #port, #tube based on #uri" do
18
+ t.uri = "beanstalk://host:12345/tube"
19
+ t.scheme.should == 'beanstalk'
20
+ t.host.should == 'host'
21
+ t.port.should == 12345
22
+ t.tube.should == 'tube'
23
+ t.path.should == '/tube'
24
+ end
25
+
26
+ it "should return a #uri based on #host, #port, #tube" do
27
+ t.host = 'host'
28
+ t.port = 12345
29
+ t.tube = 'tube'
30
+ t.uri.should == "beanstalk://host:12345/tube"
31
+ end
32
+
33
+ before :each do
34
+ @t = ASIR::Transport::Beanstalk.new
35
+ end
36
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,13 @@
1
1
  require 'rubygems'
2
2
  $:.unshift File.expand_path('../../lib', __FILE__)
3
3
 
4
- gem 'asir'
4
+ if p = ENV['ASIR_LIB_PATH']
5
+ $:.unshift File.expand_path(p)
6
+ else
7
+ gem 'asir'
8
+ end
5
9
  require 'asir'
10
+ require 'asir/transport/beanstalk'
6
11
 
7
12
  module ASIR
8
13
  module Test
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asir_beanstalk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-08 00:00:00.000000000 Z
12
+ date: 2012-12-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: asir
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 1.1.6
21
+ version: 1.1.7
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 1.1.6
29
+ version: 1.1.7
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rake
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -102,6 +102,7 @@ files:
102
102
  - lib/asir/transport/beanstalk.rb
103
103
  - lib/asir_beanstalk.rb
104
104
  - lib/asir_beanstalk/version.rb
105
+ - spec/beanstalk_spec.rb
105
106
  - spec/example_spec.rb
106
107
  - spec/spec_helper.rb
107
108
  homepage: http://github.com/kstephens/abstracting_services_in_ruby
@@ -118,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
119
  version: '0'
119
120
  segments:
120
121
  - 0
121
- hash: -4008377011960426377
122
+ hash: 1666542740013907559
122
123
  required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  none: false
124
125
  requirements:
@@ -127,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
128
  version: '0'
128
129
  segments:
129
130
  - 0
130
- hash: -4008377011960426377
131
+ hash: 1666542740013907559
131
132
  requirements: []
132
133
  rubyforge_project:
133
134
  rubygems_version: 1.8.24
@@ -135,5 +136,6 @@ signing_key:
135
136
  specification_version: 3
136
137
  summary: Beanstalkd transport for ASIR
137
138
  test_files:
139
+ - spec/beanstalk_spec.rb
138
140
  - spec/example_spec.rb
139
141
  - spec/spec_helper.rb