beanstalk_farmer 0.3.0 → 0.3.1
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.
- data/Changelog.md +4 -0
- data/lib/beanstalk_farmer/dsl.rb +10 -7
- data/lib/beanstalk_farmer/job.rb +10 -2
- data/lib/beanstalk_farmer/runner.rb +7 -4
- data/lib/beanstalk_farmer/service.rb +5 -2
- data/lib/beanstalk_farmer/version.rb +1 -1
- data/spec/beanstalk_farmer/dsl_spec.rb +13 -12
- data/spec/beanstalk_farmer/runner_spec.rb +2 -5
- metadata +60 -60
data/Changelog.md
CHANGED
data/lib/beanstalk_farmer/dsl.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
module BeanstalkFarmer
|
2
2
|
# @private Provides a clean slate object that we can safely instance eval on.
|
3
3
|
class DSL
|
4
|
-
|
5
|
-
|
4
|
+
attr_accessor :handler_pool
|
5
|
+
|
6
|
+
def initialize(handler_pool)
|
7
|
+
self.handler_pool = handler_pool
|
8
|
+
end
|
6
9
|
|
7
|
-
|
10
|
+
def eval(&block)
|
11
|
+
instance_eval &block
|
8
12
|
end
|
9
13
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
+
def tube(tube_name, job_handler=nil, &block)
|
15
|
+
job_handler = block.to_proc if block_given?
|
16
|
+
handler_pool[tube_name] = job_handler
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
data/lib/beanstalk_farmer/job.rb
CHANGED
@@ -29,6 +29,14 @@ module BeanstalkFarmer
|
|
29
29
|
handle_job_response
|
30
30
|
end
|
31
31
|
|
32
|
+
def method_missing(name, *args, &block)
|
33
|
+
if job.respond_to?(name)
|
34
|
+
job.public_send(name, args, &block)
|
35
|
+
else
|
36
|
+
super
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
32
40
|
# A pool of job handlers that can work on jobs in our queue
|
33
41
|
#
|
34
42
|
# @param [Boolean] reset (false) When true, our collection of job handlers
|
@@ -64,11 +72,11 @@ module BeanstalkFarmer
|
|
64
72
|
job.public_send(*response)
|
65
73
|
else
|
66
74
|
logger.info "JOB (#{name}) done. Deleting by default."
|
67
|
-
|
75
|
+
delete
|
68
76
|
end
|
69
77
|
rescue NoMethodError => e
|
70
78
|
logger.info "JOB (#{name}) done. Assuming delete from response: #{response.inspect}"
|
71
|
-
|
79
|
+
delete
|
72
80
|
end
|
73
81
|
end
|
74
82
|
end
|
@@ -11,9 +11,10 @@ module BeanstalkFarmer
|
|
11
11
|
#
|
12
12
|
# runner.run!
|
13
13
|
class Runner
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
attr_reader :handler_pool
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@handler_pool = Hash.new
|
17
18
|
end
|
18
19
|
|
19
20
|
# @return [Farmer::BeanstalkService] a connection to the Beanstalk queue
|
@@ -54,7 +55,9 @@ module BeanstalkFarmer
|
|
54
55
|
# tube 'mine', Proc.new { |args| puts args }
|
55
56
|
# end
|
56
57
|
def register_handlers(&block)
|
57
|
-
DSL.
|
58
|
+
dsl = DSL.new(handler_pool)
|
59
|
+
dsl.eval(&block)
|
60
|
+
dsl
|
58
61
|
end
|
59
62
|
|
60
63
|
# Looks for jobs to reserve, and applies handlers to them
|
@@ -76,8 +76,11 @@ module BeanstalkFarmer
|
|
76
76
|
|
77
77
|
# Helper method. Used when testing to see if our queue works
|
78
78
|
def enqueue(tube_name, args={})
|
79
|
-
|
80
|
-
|
79
|
+
encoded_message = MultiJson.encode([tube_name, args])
|
80
|
+
|
81
|
+
connection.on_tube(tube_name) do |conn|
|
82
|
+
conn.put(encoded_message, DEFAULT_PRIORITY, DEFAULT_DELAY, DEFAULT_TTR)
|
83
|
+
end
|
81
84
|
end
|
82
85
|
|
83
86
|
# @param [Integer, nil] timeout When nil, a job is reserved indefinitely,
|
@@ -1,25 +1,26 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe BeanstalkFarmer::DSL do
|
4
|
+
let(:handler_pool) { Hash.new }
|
5
|
+
|
6
|
+
subject { described_class.new(handler_pool) }
|
7
|
+
|
8
|
+
describe '#intialize' do
|
9
|
+
its(:handler_pool) { should == handler_pool }
|
10
|
+
end
|
11
|
+
|
4
12
|
describe '#tube' do
|
5
13
|
let(:tube_name) { 'my_tube' }
|
6
14
|
let(:handler) { Proc.new { |args| args } }
|
7
15
|
|
8
|
-
|
9
|
-
BeanstalkFarmer::Job.handler_pool(true)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'correctly adds job handlers for some tube' do
|
16
|
+
it 'adds a handler to the pool for the named tube' do
|
13
17
|
subject.tube(tube_name, handler)
|
14
|
-
|
18
|
+
subject.handler_pool[tube_name].should == handler
|
15
19
|
end
|
16
20
|
|
17
|
-
it '
|
18
|
-
subject.tube
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
BeanstalkFarmer::Job.handler_pool['block'].should be_a(Proc)
|
21
|
+
it 'accepts a block argument to define a handler' do
|
22
|
+
subject.tube(tube_name) { |args| args }
|
23
|
+
subject.handler_pool[tube_name].should be_a(Proc)
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
@@ -5,11 +5,8 @@ describe BeanstalkFarmer::Runner do
|
|
5
5
|
|
6
6
|
its(:service) { should be_a_kind_of(BeanstalkFarmer::Service) }
|
7
7
|
|
8
|
-
describe '#
|
9
|
-
|
10
|
-
BeanstalkFarmer::Job.should_receive(:handler_pool)
|
11
|
-
subject.handler_pool
|
12
|
-
end
|
8
|
+
describe '#initialize' do
|
9
|
+
its(:handler_pool) { should be_a(Hash) }
|
13
10
|
end
|
14
11
|
|
15
12
|
describe '#prep_tubes' do
|
metadata
CHANGED
@@ -1,82 +1,78 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: beanstalk_farmer
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.1
|
4
5
|
prerelease:
|
5
|
-
version: 0.3.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- James Herdamn
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-10-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: beanstalk-client
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70289652643300 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
18
|
+
requirements:
|
21
19
|
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 1.1.
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.1.1
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: multi_json
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: *70289652643300
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: multi_json
|
27
|
+
requirement: &70289652642200 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
29
|
+
requirements:
|
32
30
|
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
31
|
+
- !ruby/object:Gem::Version
|
34
32
|
version: 1.0.2
|
35
33
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: rspec
|
39
34
|
prerelease: false
|
40
|
-
|
35
|
+
version_requirements: *70289652642200
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70289652640240 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
40
|
+
requirements:
|
43
41
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.6'
|
46
44
|
type: :development
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: rake
|
50
45
|
prerelease: false
|
51
|
-
|
46
|
+
version_requirements: *70289652640240
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: &70289652657600 !ruby/object:Gem::Requirement
|
52
50
|
none: false
|
53
|
-
requirements:
|
51
|
+
requirements:
|
54
52
|
- - ~>
|
55
|
-
- !ruby/object:Gem::Version
|
53
|
+
- !ruby/object:Gem::Version
|
56
54
|
version: 0.9.0
|
57
55
|
type: :development
|
58
|
-
version_requirements: *id004
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: simplecov
|
61
56
|
prerelease: false
|
62
|
-
|
57
|
+
version_requirements: *70289652657600
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: simplecov
|
60
|
+
requirement: &70289652655340 !ruby/object:Gem::Requirement
|
63
61
|
none: false
|
64
|
-
requirements:
|
62
|
+
requirements:
|
65
63
|
- - ~>
|
66
|
-
- !ruby/object:Gem::Version
|
64
|
+
- !ruby/object:Gem::Version
|
67
65
|
version: 0.4.2
|
68
66
|
type: :development
|
69
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70289652655340
|
70
69
|
description: Farmer is a nice little kit to manage a Beanstalk job queue
|
71
|
-
email:
|
70
|
+
email:
|
72
71
|
- james.herdman@me.com
|
73
72
|
executables: []
|
74
|
-
|
75
73
|
extensions: []
|
76
|
-
|
77
74
|
extra_rdoc_files: []
|
78
|
-
|
79
|
-
files:
|
75
|
+
files:
|
80
76
|
- lib/beanstalk_farmer/config.rb
|
81
77
|
- lib/beanstalk_farmer/dsl.rb
|
82
78
|
- lib/beanstalk_farmer/errors.rb
|
@@ -99,33 +95,37 @@ files:
|
|
99
95
|
- spec/spec_helper.rb
|
100
96
|
- spec/support/have_tube_named.rb
|
101
97
|
homepage: https://github.com/jherdman/beanstalk_farmer
|
102
|
-
licenses:
|
98
|
+
licenses:
|
103
99
|
- MIT
|
104
100
|
post_install_message:
|
105
101
|
rdoc_options: []
|
106
|
-
|
107
|
-
require_paths:
|
102
|
+
require_paths:
|
108
103
|
- lib
|
109
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
105
|
none: false
|
111
|
-
requirements:
|
112
|
-
- -
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version:
|
115
|
-
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
hash: 1192104180556587290
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
114
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
version:
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
hash: 1192104180556587290
|
121
122
|
requirements: []
|
122
|
-
|
123
123
|
rubyforge_project:
|
124
|
-
rubygems_version: 1.8.
|
124
|
+
rubygems_version: 1.8.10
|
125
125
|
signing_key:
|
126
126
|
specification_version: 3
|
127
127
|
summary: A nice little kit to manage a Beanstalk job queue
|
128
|
-
test_files:
|
128
|
+
test_files:
|
129
129
|
- spec/beanstalk_farmer/config_spec.rb
|
130
130
|
- spec/beanstalk_farmer/dsl_spec.rb
|
131
131
|
- spec/beanstalk_farmer/job_spec.rb
|