employer 0.3.1 → 0.4
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/README.md +18 -4
- data/lib/employer/employees/abstract_employee.rb +9 -0
- data/lib/employer/version.rb +1 -1
- data/spec/support/shared_examples/employee.rb +12 -0
- metadata +4 -4
data/README.md
CHANGED
@@ -68,8 +68,10 @@ won't be attempted again.
|
|
68
68
|
Employer manages its jobs through its pipeline, in order to feed jobs into the
|
69
69
|
pipeline and to get jobs out of the pipeline you need to connect a backend to
|
70
70
|
it. You can either use a backend that someone has built already (if you're using
|
71
|
-
|
72
|
-
|
71
|
+
ActiveRecord 3.2.x you can use the employer-activerecord gem, and if you're
|
72
|
+
using Mongoid 3 you can use the employer-mongoid gem), or implement your own. A
|
73
|
+
valid pipeline backend must implement the methods shown in the below code
|
74
|
+
snippet:
|
73
75
|
|
74
76
|
```ruby
|
75
77
|
class CustomPipelineBackend
|
@@ -106,6 +108,18 @@ class CustomPipelineBackend
|
|
106
108
|
end
|
107
109
|
```
|
108
110
|
|
111
|
+
In the event that your backend needs to do something special before forking or
|
112
|
+
starting a new thread to perform a job you can add in hooks on the appropriate
|
113
|
+
Employee class:
|
114
|
+
|
115
|
+
```ruby
|
116
|
+
Employer::Employees::ForkingEmployee.before_fork { # your code here }
|
117
|
+
|
118
|
+
Employer::Employees::ThreadingEmployee.before_fork { # your code here }
|
119
|
+
```
|
120
|
+
|
121
|
+
You can add multiple hooks, they are executed in the order they were added.
|
122
|
+
|
109
123
|
To hook up the backend to Employer you must generate and edit a config file by
|
110
124
|
running `employer config` (or more likely `bundle exec employer config`). If you
|
111
125
|
don't specify a custom path (with -c /path/to/employer\_config.rb) this will
|
@@ -119,12 +133,12 @@ generate config/employer.rb, the file will look something like this:
|
|
119
133
|
# your database, etc.)
|
120
134
|
# require "./config/environment"
|
121
135
|
|
122
|
-
require "employer-
|
136
|
+
require "employer-activerecord"
|
123
137
|
|
124
138
|
# Setup the backend for the pipeline, this is where the boss gets the jobs to
|
125
139
|
# process. See the documentation for details on writing your own pipeline
|
126
140
|
# backend.
|
127
|
-
pipeline_backend Employer::
|
141
|
+
pipeline_backend Employer::ActiveRecord::Pipeline.new
|
128
142
|
|
129
143
|
# Add loggers to log. Logged output will go to all of the loggers defined here.
|
130
144
|
log_to ::Logger.new("./log/employer.log")
|
@@ -5,6 +5,14 @@ module Employer
|
|
5
5
|
class AbstractEmployee
|
6
6
|
attr_reader :job, :logger
|
7
7
|
|
8
|
+
def self.before_fork_hooks
|
9
|
+
@before_fork_hooks ||= []
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.before_fork(&block)
|
13
|
+
before_fork_hooks << block
|
14
|
+
end
|
15
|
+
|
8
16
|
def initialize(logger)
|
9
17
|
@logger = logger
|
10
18
|
end
|
@@ -12,6 +20,7 @@ module Employer
|
|
12
20
|
def work(job)
|
13
21
|
raise Employer::Errors::EmployeeBusy unless free?
|
14
22
|
@job = job
|
23
|
+
self.class.before_fork_hooks.each(&:call)
|
15
24
|
end
|
16
25
|
|
17
26
|
def perform_job
|
data/lib/employer/version.rb
CHANGED
@@ -40,6 +40,18 @@ shared_examples "an employee" do
|
|
40
40
|
employee.should_receive(:free?).and_return(false)
|
41
41
|
expect { employee.work(job) }.to raise_error(Employer::Errors::EmployeeBusy)
|
42
42
|
end
|
43
|
+
|
44
|
+
it "executes before fork hooks" do
|
45
|
+
hook1 = lambda { "hook 1" }
|
46
|
+
hook1.should_receive(:call)
|
47
|
+
|
48
|
+
hook2 = lambda { "hook 2" }
|
49
|
+
hook2.should_receive(:call)
|
50
|
+
|
51
|
+
described_class.before_fork(&hook1)
|
52
|
+
described_class.before_fork(&hook2)
|
53
|
+
employee.work(job)
|
54
|
+
end
|
43
55
|
end
|
44
56
|
|
45
57
|
describe "#work_in_progress?" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: employer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.4'
|
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: 2013-
|
12
|
+
date: 2013-03-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -135,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
135
|
version: '0'
|
136
136
|
segments:
|
137
137
|
- 0
|
138
|
-
hash:
|
138
|
+
hash: 3326102888235758125
|
139
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
140
|
none: false
|
141
141
|
requirements:
|
@@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
144
|
version: '0'
|
145
145
|
segments:
|
146
146
|
- 0
|
147
|
-
hash:
|
147
|
+
hash: 3326102888235758125
|
148
148
|
requirements: []
|
149
149
|
rubyforge_project:
|
150
150
|
rubygems_version: 1.8.23
|