mongoid-multitenancy-sidekiq 0.0.1 → 0.0.2
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/.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
|