mongoid-multitenancy-sidekiq 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/Gemfile.lock +2 -1
- data/lib/mongoid-multitenancy/sidekiq/middleware/client.rb +4 -1
- data/lib/mongoid-multitenancy/sidekiq/middleware/server.rb +3 -2
- data/lib/mongoid-multitenancy/sidekiq/version.rb +1 -1
- data/mongoid-multitenancy-sidekiq.gemspec +1 -0
- data/spec/mongoid_multitenancy_sidekiq_spec.rb +95 -24
- data/spec/spec_helper.rb +21 -1
- metadata +18 -2
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mongoid-multitenancy-sidekiq (0.0.
|
4
|
+
mongoid-multitenancy-sidekiq (0.0.2)
|
5
5
|
mongoid-multitenancy
|
6
6
|
sidekiq (>= 2.11)
|
7
7
|
|
@@ -80,4 +80,5 @@ DEPENDENCIES
|
|
80
80
|
mongoid-multitenancy-sidekiq!
|
81
81
|
rake (~> 10.0)
|
82
82
|
rspec (~> 2.12)
|
83
|
+
rspec-mocks (~> 2.12)
|
83
84
|
yard (~> 0.8)
|
@@ -1,7 +1,10 @@
|
|
1
1
|
module Mongoid::Multitenancy::Sidekiq::Middleware
|
2
2
|
class Client
|
3
3
|
def call(worker_class, item, queue)
|
4
|
-
|
4
|
+
if Mongoid::Multitenancy.current_tenant
|
5
|
+
item['tenant_class'] ||= Mongoid::Multitenancy.current_tenant.class.to_s
|
6
|
+
item['tenant_id'] ||= Mongoid::Multitenancy.current_tenant.id.to_s
|
7
|
+
end
|
5
8
|
yield
|
6
9
|
end
|
7
10
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module Mongoid::Multitenancy::Sidekiq::Middleware
|
2
2
|
class Server
|
3
3
|
def call(worker_class, item, queue)
|
4
|
-
if item['
|
5
|
-
|
4
|
+
if item['tenant_id'] and item['tenant_class']
|
5
|
+
tenant = item['tenant_class'].constantize.find item['tenant_id']
|
6
|
+
Mongoid::Multitenancy.with_tenant(tenant) do
|
6
7
|
yield
|
7
8
|
end
|
8
9
|
else
|
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency('rake', '~> 10.0')
|
22
22
|
spec.add_development_dependency('rspec', '~> 2.12')
|
23
|
+
spec.add_development_dependency('rspec-mocks', '~> 2.12')
|
23
24
|
spec.add_development_dependency('yard', '~> 0.8')
|
24
25
|
spec.add_development_dependency('database_cleaner', '~> 1.0')
|
25
26
|
|
@@ -1,43 +1,114 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
class
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
class User
|
8
|
-
include Mongoid::Document
|
9
|
-
include Mongoid::Multitenancy::Document
|
3
|
+
class FakeActor
|
4
|
+
def processor_done(*args)
|
5
|
+
nil
|
6
|
+
end
|
10
7
|
|
11
|
-
|
8
|
+
def real_thread(*args)
|
9
|
+
nil
|
10
|
+
end
|
12
11
|
end
|
13
12
|
|
14
|
-
class
|
13
|
+
class TestWorker
|
15
14
|
include Sidekiq::Worker
|
16
15
|
|
17
16
|
def perform
|
18
|
-
User.create(tenant: Mongoid::Multitenancy.current_tenant)
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
class Tenant
|
21
|
+
include Mongoid::Document
|
22
|
+
end
|
23
|
+
|
24
|
+
UnitOfWork = Struct.new(:queue, :message) do
|
25
|
+
def acknowledge
|
26
|
+
# nothing to do
|
27
|
+
end
|
28
|
+
|
29
|
+
def queue_name
|
30
|
+
queue
|
31
|
+
end
|
32
|
+
|
33
|
+
def requeue
|
34
|
+
# nothing to do
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
describe Mongoid::Multitenancy::Sidekiq::Middleware::Client do
|
40
|
+
describe '#call' do
|
41
|
+
context 'when Mongoid::Multitenancy.current_tenant is set' do
|
42
|
+
before do
|
43
|
+
Mongoid::Multitenancy.current_tenant = Tenant.create!
|
44
|
+
jid = TestWorker.perform_async
|
45
|
+
@job = Sidekiq::Queue.new.find_job(jid)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'adds both tenant class and tenant_id to the item message' do
|
49
|
+
expect(@job['tenant_class']).to eq Mongoid::Multitenancy.current_tenant.class.to_s
|
50
|
+
expect(@job['tenant_id']).to eq Mongoid::Multitenancy.current_tenant.id.to_s
|
51
|
+
end
|
26
52
|
end
|
27
53
|
|
28
|
-
|
29
|
-
|
30
|
-
|
54
|
+
context 'when Mongoid::Multitenancy.current_tenant is nil' do
|
55
|
+
before do
|
56
|
+
Mongoid::Multitenancy.current_tenant = nil
|
57
|
+
jid = TestWorker.perform_async
|
58
|
+
@job = Sidekiq::Queue.new.find_job(jid)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'does have neither tenant class nor tenant id to the item message' do
|
62
|
+
expect(@job['tenant_class']).to be_nil
|
63
|
+
expect(@job['tenant_id']).to be_nil
|
64
|
+
end
|
31
65
|
end
|
32
66
|
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe Mongoid::Multitenancy::Sidekiq::Middleware::Server do
|
70
|
+
before do
|
71
|
+
actor = FakeActor.new
|
72
|
+
@boss.stub(:async).and_return(actor)
|
73
|
+
end
|
33
74
|
|
34
|
-
|
35
|
-
|
75
|
+
describe '#call' do
|
76
|
+
context 'when the messsage has tenant_class and tenant_id' do
|
77
|
+
before do
|
78
|
+
@tenant1 = Tenant.create!
|
79
|
+
@tenant2 = Tenant.create!
|
80
|
+
Mongoid::Multitenancy.current_tenant = @tenant1
|
36
81
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
82
|
+
jid = TestWorker.perform_async
|
83
|
+
Mongoid::Multitenancy.current_tenant = @tenant2 #change the Tenant, but the worker should be starts with @tenant1
|
84
|
+
|
85
|
+
job = Sidekiq::Queue.new.find_job(jid)
|
86
|
+
msg = Sidekiq.dump_json(job.item)
|
87
|
+
@work = UnitOfWork.new('default', msg)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'yields the Worker with Mongoid::Multitenancy.with_tenant(@tenant1) block' do
|
91
|
+
Mongoid::Multitenancy.should_receive(:with_tenant).with(@tenant1)
|
92
|
+
@processor.process(@work)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when the messsage does not have tenant_class and tenant_id' do
|
97
|
+
before do
|
98
|
+
Mongoid::Multitenancy.current_tenant = nil
|
99
|
+
jid = TestWorker.perform_async
|
100
|
+
|
101
|
+
Mongoid::Multitenancy.current_tenant = Tenant.create! #change the Tenant, but the worker should be starts without tenant
|
102
|
+
|
103
|
+
job = Sidekiq::Queue.new.find_job(jid)
|
104
|
+
msg = Sidekiq.dump_json(job.item)
|
105
|
+
@work = UnitOfWork.new('default', msg)
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'does not yield the Worker with Mongoid::Multitenancy.with_tenant block' do
|
109
|
+
Mongoid::Multitenancy.should_not_receive(:with_tenant)
|
110
|
+
@processor.process(@work)
|
111
|
+
end
|
41
112
|
end
|
42
113
|
end
|
43
|
-
end
|
114
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,16 +11,29 @@ require 'rspec'
|
|
11
11
|
require 'mongoid'
|
12
12
|
require 'mongoid-multitenancy'
|
13
13
|
require 'database_cleaner'
|
14
|
+
|
15
|
+
require 'celluloid'
|
16
|
+
Celluloid.logger = nil
|
17
|
+
|
18
|
+
require 'sidekiq'
|
19
|
+
require 'sidekiq/cli'
|
20
|
+
require 'sidekiq/processor'
|
21
|
+
require 'sidekiq/util'
|
14
22
|
require 'mongoid-multitenancy-sidekiq'
|
15
|
-
require 'sidekiq/testing/inline'
|
16
23
|
|
17
24
|
|
25
|
+
Sidekiq.logger.level = Logger::ERROR
|
26
|
+
|
27
|
+
require 'sidekiq/redis_connection'
|
28
|
+
REDIS = Sidekiq::RedisConnection.create(:url => "redis://localhost/15", :namespace => 'testfoo')
|
29
|
+
|
18
30
|
Mongoid.configure do |config|
|
19
31
|
config.connect_to "mongoid_multitenancy_sidekiq"
|
20
32
|
end
|
21
33
|
|
22
34
|
DatabaseCleaner.orm = 'mongoid'
|
23
35
|
|
36
|
+
Mongoid::Multitenancy::Sidekiq::Middleware.run
|
24
37
|
|
25
38
|
RSpec.configure do |config|
|
26
39
|
config.include Mongoid::Matchers
|
@@ -31,6 +44,13 @@ RSpec.configure do |config|
|
|
31
44
|
|
32
45
|
config.before(:each) do
|
33
46
|
DatabaseCleaner.start
|
47
|
+
|
48
|
+
Celluloid.boot
|
49
|
+
@boss = Object.new
|
50
|
+
@processor = ::Sidekiq::Processor.new(@boss)
|
51
|
+
|
52
|
+
Sidekiq.redis = REDIS
|
53
|
+
Sidekiq.redis { |c| c.flushdb }
|
34
54
|
end
|
35
55
|
|
36
56
|
config.after(:each) do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-multitenancy-sidekiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
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-09-
|
12
|
+
date: 2013-09-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '2.12'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec-mocks
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.12'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.12'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: yard
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|