workers_loader 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README +4 -2
- data/lib/workers_loader/path.rb +5 -0
- data/lib/workers_loader/version.rb +1 -1
- data/lib/workers_loader.rb +23 -12
- data/spec/lib/workers_loader/path_spec.rb +11 -1
- data/spec/lib/workers_loader_spec.rb +24 -12
- data/spec/spec_helper.rb +5 -0
- data/spec/support/data/not_a_worker.rb +4 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YzQ0ZjM0ZmJhYWNjZmYwNDhkOWU0YzgwZTVkY2NlMGY5MWNmZjBjNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDYyZjhiMTZiOWU1ZTgxYzBiY2ExMzQ0MTY3MzhhM2NhNGRmMjlmZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ODIxZDMyMGVlMzQ2NTIzN2JmOGFmNjllOGY0YWQ2NmJlZDc4N2UxNzFiZWNi
|
10
|
+
YTk2N2Q1ODA0ZjQ2ZWIyOThlMzczZDY1ZGE5NDM1ZWIxMGRiMmMwZDdhNzNm
|
11
|
+
NWM4ZWY3MjU0YmVkYWM3YmExM2YwNGE2Y2Y1NDczNmZjMTcxMjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTkzMDI3OTM3MGFhYjFhNDJhMjU4ZmY1MTU5OWMwZDIzMzY0MTliMDY4MGNl
|
14
|
+
Mjc0NjgwYzEwODNlYTA1M2E0NzIyYmI5NGJlMzc3MzAwNGRkY2EzYjBkZWY3
|
15
|
+
YTk0MWRkMDZiMWQxNWUzZWUwMTEzZTg3Y2NhY2M1MjYwZTg2NjA=
|
data/README
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
This library is intended to let workers modularization.
|
2
2
|
|
3
|
-
|
4
3
|
It lets you load workers queue names from a given directory.
|
5
4
|
|
6
5
|
Let's say you have some engines with workers in folder /my_engine/app/workers
|
@@ -12,7 +11,9 @@ You can place an initializer like follow in your engine so then the container ap
|
|
12
11
|
module MyApp
|
13
12
|
class Engine < ::Rails::Engine
|
14
13
|
initializer 'my_app.wokers_path' do |app|
|
15
|
-
WorkersLoader.
|
14
|
+
WorkersLoader.resque_mailer!
|
15
|
+
workers_path = MyApp::Engine.root.join('app', 'workers', 'my_app')
|
16
|
+
WorkersLoader.add_path(workers_path)
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
@@ -24,3 +25,4 @@ You can get the complete list of queues by doing the following:
|
|
24
25
|
WorkersLoader.load_workers!
|
25
26
|
WorkersLoader.workers
|
26
27
|
|
28
|
+
With this list you can tell resque what queues to listen to.
|
data/lib/workers_loader/path.rb
CHANGED
@@ -18,6 +18,11 @@ module WorkersLoader
|
|
18
18
|
.map { |file| /#{base}\/(.*).rb/.match(file)[1] }
|
19
19
|
end
|
20
20
|
|
21
|
+
def find
|
22
|
+
files.map { |file| queue_for(file) }
|
23
|
+
.reject(&:blank?)
|
24
|
+
end
|
25
|
+
|
21
26
|
def class_for(relative_path)
|
22
27
|
relative_path.split('/').map(&:camelize).join('::').constantize
|
23
28
|
rescue NameError
|
data/lib/workers_loader.rb
CHANGED
@@ -10,31 +10,42 @@ module WorkersLoader
|
|
10
10
|
mattr_accessor :workers
|
11
11
|
@@workers = []
|
12
12
|
|
13
|
+
mattr_accessor :resque_mailer
|
14
|
+
@@resque_mailer = false
|
15
|
+
|
13
16
|
class << self
|
14
|
-
def add_path(path)
|
17
|
+
def add_path(path, parent = true)
|
15
18
|
fail "Directory not found: `#{path}`" unless Dir.exist?(path)
|
16
|
-
@@workers_paths << path
|
17
|
-
end
|
18
|
-
|
19
|
-
def find(path)
|
20
|
-
path = Path.new(path)
|
21
|
-
path.files.map { |file| path.queue_for(file) }
|
22
|
-
.reject(&:blank?)
|
19
|
+
@@workers_paths << Path.new(path, parent)
|
23
20
|
end
|
24
21
|
|
25
22
|
def load_workers!
|
26
23
|
workers_paths.each do |path|
|
27
|
-
workers_in_path = find
|
24
|
+
workers_in_path = path.find
|
28
25
|
next if workers_in_path.empty?
|
29
26
|
|
30
27
|
duplacates = workers_in_path
|
31
28
|
.select { |worker| workers.include?(worker) }
|
32
|
-
|
33
|
-
|
34
|
-
end
|
29
|
+
.sort.join(', ')
|
30
|
+
fail("Workers already present! #{duplacates}") unless duplacates.blank?
|
35
31
|
|
36
32
|
self.workers += workers_in_path
|
37
33
|
end
|
34
|
+
|
35
|
+
resque_mailer_install
|
36
|
+
end
|
37
|
+
|
38
|
+
def resque_mailer_install
|
39
|
+
return if !resque_mailer? || self.workers.include?(:mailer)
|
40
|
+
self.workers << :mailer
|
41
|
+
end
|
42
|
+
|
43
|
+
def resque_mailer!
|
44
|
+
@@resque_mailer = true
|
45
|
+
end
|
46
|
+
|
47
|
+
def resque_mailer?
|
48
|
+
@@resque_mailer
|
38
49
|
end
|
39
50
|
end
|
40
51
|
|
@@ -23,19 +23,25 @@ describe WorkersLoader::Path do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '#files' do
|
26
|
-
let(:files) { %w(user reports/usage).sort }
|
26
|
+
let(:files) { %w(not_a_worker user reports/usage).sort }
|
27
27
|
it { expect(subject.files.sort).to eq(files) }
|
28
28
|
end
|
29
29
|
|
30
30
|
describe '#class_for' do
|
31
|
+
it { expect(subject.class_for('not_a_worker')).to eq(NotAWorker) }
|
31
32
|
it { expect(subject.class_for('user')).to eq(User) }
|
32
33
|
it { expect(subject.class_for('reports/usage')).to eq(Reports::Usage) }
|
33
34
|
end
|
34
35
|
|
35
36
|
describe '#queue_for' do
|
37
|
+
it { expect(subject.queue_for('not_a_worker')).to be(false) }
|
36
38
|
it { expect(subject.queue_for('user')).to eq(:user_queue) }
|
37
39
|
it { expect(subject.queue_for('reports/usage')).to eq(:usage_queue) }
|
38
40
|
end
|
41
|
+
|
42
|
+
describe '::find' do
|
43
|
+
it { expect(subject.find.sort).to eq([:user_queue, :usage_queue].sort) }
|
44
|
+
end
|
39
45
|
end
|
40
46
|
|
41
47
|
context 'with parent' do
|
@@ -70,5 +76,9 @@ describe WorkersLoader::Path do
|
|
70
76
|
it { expect(subject.queue_for('dummy/foo')).to eq(:dummy_foo) }
|
71
77
|
it { expect(subject.queue_for('dummy/bar/baz')).to eq(:baz_queue) }
|
72
78
|
end
|
79
|
+
|
80
|
+
describe '::find' do
|
81
|
+
it { expect(subject.find.sort).to eq([:dummy_foo, :baz_queue].sort) }
|
82
|
+
end
|
73
83
|
end
|
74
84
|
end
|
@@ -15,8 +15,8 @@ describe WorkersLoader do
|
|
15
15
|
|
16
16
|
describe '::add_path' do
|
17
17
|
before { described_class.add_path(workers_path) }
|
18
|
-
|
19
|
-
it { expect(
|
18
|
+
subject { described_class.workers_paths.first }
|
19
|
+
it { expect(subject).to be_a(WorkersLoader::Path) }
|
20
20
|
|
21
21
|
context 'dubplicate worker' do
|
22
22
|
let(:message) { 'Directory not found: `foo`' }
|
@@ -24,21 +24,33 @@ describe WorkersLoader do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
describe '::
|
28
|
-
|
27
|
+
describe '::load_workers!' do
|
28
|
+
let(:workers) { [:baz_queue, :dummy_foo].sort }
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
context 'load workers' do
|
31
|
+
before do
|
32
|
+
described_class.add_path(workers_path)
|
33
|
+
described_class.load_workers!
|
34
|
+
end
|
32
35
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
36
|
+
it { expect(described_class.workers.sort).to eq(workers) }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'load mailer' do
|
40
|
+
before do
|
41
|
+
described_class.resque_mailer!
|
42
|
+
described_class.load_workers!
|
43
|
+
end
|
44
|
+
|
45
|
+
it { expect(described_class.workers.sort).to include(:mailer) }
|
37
46
|
end
|
38
|
-
let(:workers) { [:baz_queue, :dummy_foo].sort }
|
39
|
-
it { expect(described_class.workers.sort).to eq(workers) }
|
40
47
|
|
41
48
|
context 'prevent duplicates' do
|
49
|
+
before do
|
50
|
+
described_class.add_path(workers_path)
|
51
|
+
described_class.load_workers!
|
52
|
+
end
|
53
|
+
|
42
54
|
let(:message) { "Workers already present! #{workers.join(', ')}" }
|
43
55
|
it { expect { described_class.load_workers! }.to raise_error(message) }
|
44
56
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workers_loader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricard Forniol
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- spec/lib/workers_loader/path_spec.rb
|
97
97
|
- spec/lib/workers_loader_spec.rb
|
98
98
|
- spec/spec_helper.rb
|
99
|
+
- spec/support/data/not_a_worker.rb
|
99
100
|
- spec/support/data/reports/usage.rb
|
100
101
|
- spec/support/data/user.rb
|
101
102
|
- spec/support/dummy/bar/base.rb
|
@@ -128,6 +129,7 @@ test_files:
|
|
128
129
|
- spec/lib/workers_loader/path_spec.rb
|
129
130
|
- spec/lib/workers_loader_spec.rb
|
130
131
|
- spec/spec_helper.rb
|
132
|
+
- spec/support/data/not_a_worker.rb
|
131
133
|
- spec/support/data/reports/usage.rb
|
132
134
|
- spec/support/data/user.rb
|
133
135
|
- spec/support/dummy/bar/base.rb
|