activerecord-multi-tenant 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Appraisals +51 -9
- data/Gemfile.lock +3 -3
- data/gemfiles/active_record_5.1.gemfile +8 -1
- data/gemfiles/active_record_5.1.gemfile.lock +92 -85
- data/gemfiles/active_record_5.2.gemfile +8 -1
- data/gemfiles/active_record_5.2.gemfile.lock +88 -82
- data/gemfiles/active_record_6.0.gemfile +1 -1
- data/gemfiles/active_record_6.0.gemfile.lock +84 -84
- data/gemfiles/rails_4.2.gemfile +9 -1
- data/gemfiles/rails_4.2.gemfile.lock +91 -85
- data/gemfiles/rails_5.0.gemfile +8 -1
- data/gemfiles/rails_5.0.gemfile.lock +99 -94
- data/gemfiles/rails_5.1.gemfile +8 -1
- data/gemfiles/rails_5.1.gemfile.lock +99 -94
- data/gemfiles/rails_5.2.gemfile +8 -1
- data/gemfiles/rails_5.2.gemfile.lock +97 -91
- data/gemfiles/rails_6.0.gemfile +1 -1
- data/gemfiles/rails_6.0.gemfile.lock +84 -84
- data/lib/activerecord-multi-tenant.rb +1 -0
- data/lib/activerecord-multi-tenant/persistence_extension.rb +13 -0
- data/lib/activerecord-multi-tenant/version.rb +1 -1
- data/spec/activerecord-multi-tenant/model_extensions_spec.rb +3 -9
- data/spec/activerecord-multi-tenant/record_modifications_spec.rb +47 -3
- data/spec/activerecord-multi-tenant/schema_dumper_tester.rb +0 -0
- metadata +4 -2
@@ -10,3 +10,4 @@ require_relative 'activerecord-multi-tenant/query_rewriter'
|
|
10
10
|
require_relative 'activerecord-multi-tenant/query_monitor'
|
11
11
|
require_relative 'activerecord-multi-tenant/version'
|
12
12
|
require_relative 'activerecord-multi-tenant/with_lock'
|
13
|
+
require_relative 'activerecord-multi-tenant/persistence_extension'
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module Persistence
|
3
|
+
alias :delete_orig :delete
|
4
|
+
|
5
|
+
def delete
|
6
|
+
if persisted? && MultiTenant.current_tenant_id.nil?
|
7
|
+
MultiTenant.with(self.public_send(self.class.partition_key)) { delete_orig }
|
8
|
+
else
|
9
|
+
delete_orig
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -348,15 +348,9 @@ describe MultiTenant do
|
|
348
348
|
end
|
349
349
|
|
350
350
|
it "applies the team_id conditions in the where clause" do
|
351
|
-
expected_sql =
|
352
|
-
<<-sql
|
353
|
-
SELECT "sub_tasks".* FROM "sub_tasks" INNER JOIN "tasks" ON "sub_tasks"."task_id" = "tasks"."id" AND "sub_tasks"."account_id" = "tasks"."account_id" WHERE "tasks"."account_id" = 1 AND "tasks"."project_id" = 1
|
354
|
-
sql
|
355
|
-
else
|
356
|
-
<<-sql
|
351
|
+
expected_sql = <<-sql
|
357
352
|
SELECT "sub_tasks".* FROM "sub_tasks" INNER JOIN "tasks" ON "sub_tasks"."task_id" = "tasks"."id" AND "sub_tasks"."account_id" = "tasks"."account_id" WHERE "tasks"."account_id" = 1 AND "sub_tasks"."account_id" = 1 AND "tasks"."project_id" = 1
|
358
353
|
sql
|
359
|
-
end
|
360
354
|
|
361
355
|
account1 = Account.create! name: 'Account 1'
|
362
356
|
|
@@ -418,7 +412,7 @@ describe MultiTenant do
|
|
418
412
|
account1 = Account.create! name: 'Account 1'
|
419
413
|
category1 = Category.create! name: 'Category 1'
|
420
414
|
|
421
|
-
expected_sql = if uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR >
|
415
|
+
expected_sql = if uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR > 0
|
422
416
|
<<-sql
|
423
417
|
SELECT "projects"."id" AS t0_r0, "projects"."account_id" AS t0_r1, "projects"."name" AS t0_r2, "categories"."id" AS t1_r0, "categories"."name" AS t1_r1 FROM "projects" LEFT OUTER JOIN "project_categories" ON "project_categories"."project_id" = "projects"."id" AND "project_categories"."account_id" = 1 AND "projects"."account_id" = 1 LEFT OUTER JOIN "categories" ON "categories"."id" = "project_categories"."category_id" AND "project_categories"."account_id" = 1 WHERE "projects"."account_id" = 1
|
424
418
|
sql
|
@@ -461,7 +455,7 @@ describe MultiTenant do
|
|
461
455
|
category1 = Category.create! name: 'Category 1'
|
462
456
|
|
463
457
|
MultiTenant.with(account1) do
|
464
|
-
expected_sql = if uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR >
|
458
|
+
expected_sql = if uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR > 0
|
465
459
|
<<-sql
|
466
460
|
SELECT "tasks".* FROM "tasks" INNER JOIN "projects" ON "projects"."id" = "tasks"."project_id" AND "projects"."account_id" = 1 LEFT JOIN project_categories pc ON project.category_id = pc.id WHERE "tasks"."account_id" = 1
|
467
461
|
sql
|
@@ -2,13 +2,57 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe MultiTenant, 'Record modifications' do
|
4
4
|
let(:account) { Account.create! name: 'test' }
|
5
|
-
let(:
|
5
|
+
let(:account2) { Account.create! name: 'test2' }
|
6
|
+
let(:project) { Project.create! name: 'something', account: account }
|
7
|
+
let(:project2) { Project.create! name: 'something2', account: account2, id: project.id }
|
8
|
+
|
9
|
+
|
10
|
+
it 'includes the tenant_id in DELETEs when using object.destroy' do
|
11
|
+
# two records with same id but different account_id
|
12
|
+
# when doing project.destroy it should delete only the current one
|
13
|
+
# by adding account_id to the destroy
|
14
|
+
|
15
|
+
expect(project.account).to eq(account)
|
16
|
+
expect(project2.account).to eq(account2)
|
17
|
+
expect(project.id).to eq(project2.id)
|
18
|
+
|
19
|
+
MultiTenant.without() do
|
20
|
+
expect(Project.count).to eq(2)
|
21
|
+
project.destroy
|
22
|
+
expect(Project.count).to eq(1)
|
23
|
+
end
|
24
|
+
|
25
|
+
MultiTenant.with(account) do
|
26
|
+
expect(Project.where(id: project.id).first).not_to be_present
|
27
|
+
end
|
28
|
+
MultiTenant.with(account2) do
|
29
|
+
expect(Project.where(id: project2.id).first).to be_present
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'includes the tenant_id in DELETEs when using object.delete' do
|
35
|
+
# two records with same id but different account_id
|
36
|
+
# when project.delete it should delete only the current one
|
37
|
+
# by adding account_id to the destroy
|
38
|
+
|
39
|
+
expect(project.account).to eq(account)
|
40
|
+
expect(project2.account).to eq(account2)
|
41
|
+
expect(project.id).to eq(project2.id)
|
42
|
+
|
43
|
+
MultiTenant.without() do
|
44
|
+
expect(Project.count).to eq(2)
|
45
|
+
project.delete
|
46
|
+
expect(Project.count).to eq(1)
|
47
|
+
end
|
6
48
|
|
7
|
-
it 'includes the tenant_id in DELETEs' do
|
8
|
-
project.destroy
|
9
49
|
MultiTenant.with(account) do
|
10
50
|
expect(Project.where(id: project.id).first).not_to be_present
|
11
51
|
end
|
52
|
+
MultiTenant.with(account2) do
|
53
|
+
expect(Project.where(id: project2.id).first).to be_present
|
54
|
+
end
|
55
|
+
|
12
56
|
end
|
13
57
|
|
14
58
|
it 'includes the tenant_id in UPDATEs' do
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-multi-tenant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Citus Data
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: request_store
|
@@ -191,6 +191,7 @@ files:
|
|
191
191
|
- lib/activerecord-multi-tenant/migrations.rb
|
192
192
|
- lib/activerecord-multi-tenant/model_extensions.rb
|
193
193
|
- lib/activerecord-multi-tenant/multi_tenant.rb
|
194
|
+
- lib/activerecord-multi-tenant/persistence_extension.rb
|
194
195
|
- lib/activerecord-multi-tenant/query_monitor.rb
|
195
196
|
- lib/activerecord-multi-tenant/query_rewriter.rb
|
196
197
|
- lib/activerecord-multi-tenant/sidekiq.rb
|
@@ -204,6 +205,7 @@ files:
|
|
204
205
|
- spec/activerecord-multi-tenant/record_callback_spec.rb
|
205
206
|
- spec/activerecord-multi-tenant/record_finding_spec.rb
|
206
207
|
- spec/activerecord-multi-tenant/record_modifications_spec.rb
|
208
|
+
- spec/activerecord-multi-tenant/schema_dumper_tester.rb
|
207
209
|
- spec/activerecord-multi-tenant/sidekiq_spec.rb
|
208
210
|
- spec/database.yml
|
209
211
|
- spec/schema.rb
|