Skip to content

Commit 9c0fe72

Browse files
authored
Merge pull request #273 from rails-on-services/development
Add trilogy adapter support
2 parents 8578ccf + 9c175de commit 9c0fe72

File tree

6 files changed

+98
-2
lines changed

6 files changed

+98
-2
lines changed

.github/workflows/main.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
fail-fast: false
1818
matrix:
1919
ruby_version:
20-
- 3.0
20+
- "3.0"
2121
- 3.1
2222
- 3.2
2323
- 3.3

.rubocop_todo.yml

+3
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ RSpec/ExampleWording:
207207
RSpec/FilePath:
208208
Exclude:
209209
- 'spec/adapters/mysql2_adapter_spec.rb'
210+
- 'spec/adapters/trilogy_adapter_spec.rb'
210211
- 'spec/adapters/postgresql_adapter_spec.rb'
211212
- 'spec/adapters/sqlite3_adapter_spec.rb'
212213
- 'spec/tenant_spec.rb'
@@ -292,6 +293,7 @@ RSpec/MultipleExpectations:
292293
RSpec/NamedSubject:
293294
Exclude:
294295
- 'spec/adapters/mysql2_adapter_spec.rb'
296+
- 'spec/adapters/trilogy_adapter_spec.rb'
295297
- 'spec/adapters/sqlite3_adapter_spec.rb'
296298
- 'spec/support/contexts.rb'
297299
- 'spec/support/requirements.rb'
@@ -315,6 +317,7 @@ RSpec/NoExpectationExample:
315317
RSpec/SpecFilePathFormat:
316318
Exclude:
317319
- 'spec/adapters/mysql2_adapter_spec.rb'
320+
- 'spec/adapters/trilogy_adapter_spec.rb'
318321
- 'spec/adapters/postgresql_adapter_spec.rb'
319322
- 'spec/adapters/sqlite3_adapter_spec.rb'
320323
- 'spec/tenant_spec.rb'
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
require 'apartment/adapters/mysql2_adapter'
4+
5+
module Apartment
6+
# Helper module to decide wether to use trilogy adapter or trilogy adapter with schemas
7+
module Tenant
8+
def self.trilogy_adapter(config)
9+
if Apartment.use_schemas
10+
Adapters::TrilogySchemaAdapter.new(config)
11+
else
12+
Adapters::TrilogyAdapter.new(config)
13+
end
14+
end
15+
end
16+
17+
module Adapters
18+
class TrilogyAdapter < Mysql2Adapter
19+
protected
20+
21+
def rescue_from
22+
Trilogy::Error
23+
end
24+
end
25+
26+
class TrilogySchemaAdapter < Mysql2SchemaAdapter
27+
end
28+
end
29+
end

lib/apartment/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module Apartment
4-
VERSION = '3.0.4'
4+
VERSION = '3.1.0'
55
end

ros-apartment.gemspec

+1
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,6 @@ Gem::Specification.new do |s|
6060
s.add_development_dependency 'mysql2', '~> 0.5'
6161
s.add_development_dependency 'pg', '~> 1.5'
6262
s.add_development_dependency 'sqlite3', '< 2.0'
63+
s.add_development_dependency 'trilogy', '< 3.0'
6364
end
6465
end

spec/adapters/trilogy_adapter_spec.rb

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
require 'apartment/adapters/trilogy_adapter'
5+
6+
describe Apartment::Adapters::TrilogyAdapter, database: :mysql do
7+
unless defined?(JRUBY_VERSION)
8+
9+
subject(:adapter) { Apartment::Tenant.adapter }
10+
11+
def tenant_names
12+
ActiveRecord::Base.connection.execute('SELECT schema_name FROM information_schema.schemata').pluck(0)
13+
end
14+
15+
let(:default_tenant) { subject.switch { ActiveRecord::Base.connection.current_database } }
16+
17+
it_behaves_like 'a generic apartment adapter callbacks'
18+
19+
context 'when using - the equivalent of - schemas' do
20+
before { Apartment.use_schemas = true }
21+
22+
it_behaves_like 'a generic apartment adapter'
23+
24+
describe '#default_tenant' do
25+
it 'is set to the original db from config' do
26+
expect(subject.default_tenant).to eq(config[:database])
27+
end
28+
end
29+
30+
describe '#init' do
31+
include Apartment::Spec::AdapterRequirements
32+
33+
before do
34+
Apartment.configure do |config|
35+
config.excluded_models = ['Company']
36+
end
37+
end
38+
39+
after do
40+
# Apartment::Tenant.init creates per model connection.
41+
# Remove the connection after testing not to unintentionally keep the connection across tests.
42+
Apartment.excluded_models.each do |excluded_model|
43+
excluded_model.constantize.remove_connection
44+
end
45+
end
46+
47+
it 'processes model exclusions' do
48+
Apartment::Tenant.init
49+
50+
expect(Company.table_name).to eq("#{default_tenant}.companies")
51+
end
52+
end
53+
end
54+
55+
context 'when using connections' do
56+
before { Apartment.use_schemas = false }
57+
58+
it_behaves_like 'a generic apartment adapter'
59+
it_behaves_like 'a generic apartment adapter able to handle custom configuration'
60+
it_behaves_like 'a connection based apartment adapter'
61+
end
62+
end
63+
end

0 commit comments

Comments
 (0)