apartment 0.20.0 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/.rspec +1 -0
- data/.travis.yml +2 -1
- data/.vagrant +1 -0
- data/Cheffile +24 -0
- data/Cheffile.lock +43 -0
- data/Gemfile +24 -10
- data/HISTORY.md +5 -0
- data/README.md +123 -68
- data/Vagrantfile +112 -0
- data/apartment.gemspec +1 -1
- data/lib/apartment/adapters/abstract_jdbc_adapter.rb +51 -0
- data/lib/apartment/adapters/jdbc_mysql_adapter.rb +28 -0
- data/lib/apartment/adapters/jdbc_postgresql_adapter.rb +127 -0
- data/lib/apartment/database.rb +11 -2
- data/lib/apartment/version.rb +1 -1
- data/spec/adapters/jdbc_mysql_adapter_spec.rb +23 -0
- data/spec/adapters/jdbc_postgresql_adapter_spec.rb +43 -0
- data/spec/adapters/mysql2_adapter_spec.rb +29 -27
- data/spec/adapters/postgresql_adapter_spec.rb +23 -21
- data/spec/config/database.yml.sample +23 -0
- data/spec/dummy/config/database.yml.sample +22 -0
- data/spec/integration/delayed_job_integration_spec.rb +60 -58
- data/spec/spec_helper.rb +6 -3
- data/spec/support/config.rb +1 -1
- data/spec/unit/migrator_spec.rb +2 -0
- metadata +48 -36
@@ -1,3 +1,25 @@
|
|
1
|
+
<% if defined?(JRUBY_VERSION) %>
|
2
|
+
connections:
|
3
|
+
postgresql:
|
4
|
+
adapter: postgresql
|
5
|
+
database: apartment_postgresql_test
|
6
|
+
username: postgres
|
7
|
+
min_messages: WARNING
|
8
|
+
driver: org.postgresql.Driver
|
9
|
+
url: jdbc:postgresql://localhost:5432/apartment_postgresql_test
|
10
|
+
timeout: 5000
|
11
|
+
pool: 5
|
12
|
+
|
13
|
+
mysql:
|
14
|
+
adapter: mysql
|
15
|
+
database: apartment_mysql_test
|
16
|
+
username: root
|
17
|
+
min_messages: WARNING
|
18
|
+
driver: com.mysql.jdbc.Driver
|
19
|
+
url: jdbc:mysql://localhost:3306/apartment_mysql_test
|
20
|
+
timeout: 5000
|
21
|
+
pool: 5
|
22
|
+
<% else %>
|
1
23
|
connections:
|
2
24
|
postgresql:
|
3
25
|
adapter: postgresql
|
@@ -12,3 +34,4 @@ connections:
|
|
12
34
|
database: apartment_mysql_test
|
13
35
|
username: root
|
14
36
|
password:
|
37
|
+
<% end %>
|
@@ -1,6 +1,27 @@
|
|
1
1
|
# Warning: The database defined as "test" will be erased and
|
2
2
|
# re-generated from your development database when you run "rake".
|
3
3
|
# Do not set this db to the same as development or production.
|
4
|
+
<% if defined?(JRUBY_VERSION) %>
|
5
|
+
test:
|
6
|
+
adapter: postgresql
|
7
|
+
database: apartment_postgresql_test
|
8
|
+
username: postgres
|
9
|
+
min_messages: WARNING
|
10
|
+
driver: org.postgresql.Driver
|
11
|
+
url: jdbc:postgresql://localhost:5432/apartment_postgresql_test
|
12
|
+
timeout: 5000
|
13
|
+
pool: 5
|
14
|
+
|
15
|
+
development:
|
16
|
+
adapter: postgresql
|
17
|
+
database: apartment_postgresql_development
|
18
|
+
username: postgres
|
19
|
+
min_messages: WARNING
|
20
|
+
driver: org.postgresql.Driver
|
21
|
+
url: jdbc:postgresql://localhost:5432/apartment_postgresql_development
|
22
|
+
timeout: 5000
|
23
|
+
pool: 5
|
24
|
+
<% else %>
|
4
25
|
test:
|
5
26
|
adapter: postgresql
|
6
27
|
database: apartment_postgresql_test
|
@@ -14,3 +35,4 @@ development:
|
|
14
35
|
min_messages: WARNING
|
15
36
|
pool: 5
|
16
37
|
timeout: 5000
|
38
|
+
<% end %>
|
@@ -3,85 +3,87 @@ require 'delayed_job'
|
|
3
3
|
require 'delayed_job_active_record'
|
4
4
|
|
5
5
|
describe Apartment::Delayed do
|
6
|
+
unless defined?(JRUBY_VERSION)
|
6
7
|
|
7
|
-
|
8
|
+
# See apartment.yml file in dummy app config
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
let(:config) { Apartment::Test.config['connections']['postgresql'].symbolize_keys }
|
11
|
+
let(:database) { Apartment::Test.next_db }
|
12
|
+
let(:database2) { Apartment::Test.next_db }
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
Apartment.configure do |config|
|
19
|
-
config.use_schemas = true
|
20
|
-
end
|
21
|
-
|
22
|
-
Apartment::Database.create database
|
23
|
-
Apartment::Database.create database2
|
24
|
-
end
|
25
|
-
|
26
|
-
after do
|
27
|
-
Apartment::Test.drop_schema database
|
28
|
-
Apartment::Test.drop_schema database2
|
29
|
-
Apartment.reset
|
30
|
-
end
|
14
|
+
before do
|
15
|
+
ActiveRecord::Base.establish_connection config
|
16
|
+
Apartment::Test.load_schema # load the Rails schema in the public db schema
|
17
|
+
Apartment::Database.stub(:config).and_return config # Use postgresql database config for this test
|
31
18
|
|
32
|
-
|
19
|
+
Apartment.configure do |config|
|
20
|
+
config.use_schemas = true
|
21
|
+
end
|
33
22
|
|
34
|
-
|
35
|
-
Apartment::Database.
|
36
|
-
User.send(:include, Apartment::Delayed::Requirements)
|
37
|
-
User.create
|
23
|
+
Apartment::Database.create database
|
24
|
+
Apartment::Database.create database2
|
38
25
|
end
|
39
26
|
|
40
|
-
|
41
|
-
|
42
|
-
|
27
|
+
after do
|
28
|
+
Apartment::Test.drop_schema database
|
29
|
+
Apartment::Test.drop_schema database2
|
30
|
+
Apartment.reset
|
43
31
|
end
|
44
32
|
|
45
|
-
|
46
|
-
User.class_eval do
|
47
|
-
after_find :set_name
|
33
|
+
describe Apartment::Delayed::Requirements do
|
48
34
|
|
49
|
-
|
50
|
-
|
51
|
-
|
35
|
+
before do
|
36
|
+
Apartment::Database.switch database
|
37
|
+
User.send(:include, Apartment::Delayed::Requirements)
|
38
|
+
User.create
|
52
39
|
end
|
53
40
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
41
|
+
it "should initialize a database attribute on a class" do
|
42
|
+
user = User.first
|
43
|
+
user.database.should == database
|
44
|
+
end
|
58
45
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
46
|
+
it "should not overwrite any previous after_initialize declarations" do
|
47
|
+
User.class_eval do
|
48
|
+
after_find :set_name
|
49
|
+
|
50
|
+
def set_name
|
51
|
+
self.name = "Some Name"
|
52
|
+
end
|
53
|
+
end
|
63
54
|
|
64
|
-
|
65
|
-
it "should serialize the proper database attribute" do
|
66
|
-
user_yaml = User.first.to_yaml
|
67
|
-
Apartment::Database.switch database2
|
68
|
-
user = YAML.load user_yaml
|
55
|
+
user = User.first
|
69
56
|
user.database.should == database
|
57
|
+
user.name.should == "Some Name"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should set the db on a new record before it saves" do
|
61
|
+
user = User.create
|
62
|
+
user.database.should == database
|
63
|
+
end
|
64
|
+
|
65
|
+
context "serialization" do
|
66
|
+
it "should serialize the proper database attribute" do
|
67
|
+
user_yaml = User.first.to_yaml
|
68
|
+
Apartment::Database.switch database2
|
69
|
+
user = YAML.load user_yaml
|
70
|
+
user.database.should == database
|
71
|
+
end
|
70
72
|
end
|
71
73
|
end
|
72
|
-
end
|
73
74
|
|
74
|
-
|
75
|
+
describe Apartment::Delayed::Job::Hooks do
|
75
76
|
|
76
|
-
|
77
|
-
|
77
|
+
let(:worker) { Delayed::Worker.new }
|
78
|
+
let(:job) { Delayed::Job.enqueue User.new }
|
78
79
|
|
79
|
-
|
80
|
-
|
81
|
-
|
80
|
+
it "should switch to previous db" do
|
81
|
+
Apartment::Database.switch database
|
82
|
+
worker.run(job)
|
82
83
|
|
83
|
-
|
84
|
+
Apartment::Database.current_database.should == database
|
85
|
+
end
|
84
86
|
end
|
85
|
-
end
|
86
87
|
|
88
|
+
end
|
87
89
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,13 +3,16 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
3
3
|
# Configure Rails Environment
|
4
4
|
ENV["RAILS_ENV"] = "test"
|
5
5
|
|
6
|
-
require File.expand_path("../dummy/config/environment.rb",
|
6
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
7
7
|
require "rspec/rails"
|
8
8
|
require 'capybara/rspec'
|
9
9
|
require 'capybara/rails'
|
10
|
-
require 'pry'
|
11
10
|
|
12
|
-
|
11
|
+
begin
|
12
|
+
require 'pry'
|
13
|
+
silence_warnings{ IRB = Pry }
|
14
|
+
rescue LoadError
|
15
|
+
end
|
13
16
|
|
14
17
|
ActionMailer::Base.delivery_method = :test
|
15
18
|
ActionMailer::Base.perform_deliveries = true
|
data/spec/support/config.rb
CHANGED
data/spec/unit/migrator_spec.rb
CHANGED
@@ -10,6 +10,8 @@ describe Apartment::Migrator do
|
|
10
10
|
ActiveRecord::Base.establish_connection config
|
11
11
|
Apartment::Database.stub(:config).and_return config # Use postgresql config for this test
|
12
12
|
@original_schema = ActiveRecord::Base.connection.schema_search_path
|
13
|
+
# Necessary because the JDBC adapter returns $user in the search path
|
14
|
+
@original_schema.gsub!(/"\$user",/, '') if defined?(JRUBY_VERSION)
|
13
15
|
|
14
16
|
Apartment.configure do |config|
|
15
17
|
config.use_schemas = true
|
metadata
CHANGED
@@ -1,51 +1,50 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apartment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 0.21.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ryan Brunner
|
9
9
|
- Brad Robertson
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-04-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
|
-
|
18
|
-
none: false
|
17
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
18
|
requirements:
|
20
|
-
- -
|
19
|
+
- - ">="
|
21
20
|
- !ruby/object:Gem::Version
|
22
21
|
version: 3.1.2
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
22
|
none: false
|
23
|
+
requirement: !ruby/object:Gem::Requirement
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - ">="
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: 3.1.2
|
28
|
+
none: false
|
29
|
+
prerelease: false
|
30
|
+
type: :runtime
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: rack
|
33
|
-
|
34
|
-
none: false
|
33
|
+
version_requirements: !ruby/object:Gem::Requirement
|
35
34
|
requirements:
|
36
|
-
- -
|
35
|
+
- - ">="
|
37
36
|
- !ruby/object:Gem::Version
|
38
37
|
version: 1.3.6
|
39
|
-
type: :runtime
|
40
|
-
prerelease: false
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
42
38
|
none: false
|
39
|
+
requirement: !ruby/object:Gem::Requirement
|
43
40
|
requirements:
|
44
|
-
- -
|
41
|
+
- - ">="
|
45
42
|
- !ruby/object:Gem::Version
|
46
43
|
version: 1.3.6
|
47
|
-
|
48
|
-
|
44
|
+
none: false
|
45
|
+
prerelease: false
|
46
|
+
type: :runtime
|
47
|
+
description: Apartment allows Rack applications to deal with database multitenancy through ActiveRecord
|
49
48
|
email:
|
50
49
|
- ryan@influitive.com
|
51
50
|
- brad@influitive.com
|
@@ -53,19 +52,26 @@ executables: []
|
|
53
52
|
extensions: []
|
54
53
|
extra_rdoc_files: []
|
55
54
|
files:
|
56
|
-
- .gitignore
|
57
|
-
- .pryrc
|
58
|
-
- .rspec
|
59
|
-
- .rvmrc
|
60
|
-
- .travis.yml
|
55
|
+
- ".gitignore"
|
56
|
+
- ".pryrc"
|
57
|
+
- ".rspec"
|
58
|
+
- ".rvmrc"
|
59
|
+
- ".travis.yml"
|
60
|
+
- ".vagrant"
|
61
|
+
- Cheffile
|
62
|
+
- Cheffile.lock
|
61
63
|
- Gemfile
|
62
64
|
- HISTORY.md
|
63
65
|
- README.md
|
64
66
|
- Rakefile
|
67
|
+
- Vagrantfile
|
65
68
|
- apartment.gemspec
|
66
69
|
- circle.yml
|
67
70
|
- lib/apartment.rb
|
68
71
|
- lib/apartment/adapters/abstract_adapter.rb
|
72
|
+
- lib/apartment/adapters/abstract_jdbc_adapter.rb
|
73
|
+
- lib/apartment/adapters/jdbc_mysql_adapter.rb
|
74
|
+
- lib/apartment/adapters/jdbc_postgresql_adapter.rb
|
69
75
|
- lib/apartment/adapters/mysql2_adapter.rb
|
70
76
|
- lib/apartment/adapters/postgis_adapter.rb
|
71
77
|
- lib/apartment/adapters/postgresql_adapter.rb
|
@@ -90,6 +96,8 @@ files:
|
|
90
96
|
- lib/generators/apartment/install/install_generator.rb
|
91
97
|
- lib/generators/apartment/install/templates/apartment.rb
|
92
98
|
- lib/tasks/apartment.rake
|
99
|
+
- spec/adapters/jdbc_mysql_adapter_spec.rb
|
100
|
+
- spec/adapters/jdbc_postgresql_adapter_spec.rb
|
93
101
|
- spec/adapters/mysql2_adapter_spec.rb
|
94
102
|
- spec/adapters/postgresql_adapter_spec.rb
|
95
103
|
- spec/apartment_spec.rb
|
@@ -155,35 +163,39 @@ files:
|
|
155
163
|
homepage: https://github.com/influitive/apartment
|
156
164
|
licenses:
|
157
165
|
- MIT
|
158
|
-
post_install_message:
|
166
|
+
post_install_message:
|
159
167
|
rdoc_options: []
|
160
168
|
require_paths:
|
161
169
|
- lib
|
162
170
|
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
171
|
requirements:
|
165
|
-
- -
|
172
|
+
- - ">="
|
166
173
|
- !ruby/object:Gem::Version
|
167
|
-
version: '0'
|
168
174
|
segments:
|
169
175
|
- 0
|
170
|
-
hash:
|
171
|
-
|
176
|
+
hash: 2
|
177
|
+
version: !binary |-
|
178
|
+
MA==
|
172
179
|
none: false
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
181
|
requirements:
|
174
|
-
- -
|
182
|
+
- - ">="
|
175
183
|
- !ruby/object:Gem::Version
|
176
|
-
version: '0'
|
177
184
|
segments:
|
178
185
|
- 0
|
179
|
-
hash:
|
186
|
+
hash: 2
|
187
|
+
version: !binary |-
|
188
|
+
MA==
|
189
|
+
none: false
|
180
190
|
requirements: []
|
181
|
-
rubyforge_project:
|
191
|
+
rubyforge_project:
|
182
192
|
rubygems_version: 1.8.24
|
183
|
-
signing_key:
|
193
|
+
signing_key:
|
184
194
|
specification_version: 3
|
185
195
|
summary: A Ruby gem for managing database multitenancy
|
186
196
|
test_files:
|
197
|
+
- spec/adapters/jdbc_mysql_adapter_spec.rb
|
198
|
+
- spec/adapters/jdbc_postgresql_adapter_spec.rb
|
187
199
|
- spec/adapters/mysql2_adapter_spec.rb
|
188
200
|
- spec/adapters/postgresql_adapter_spec.rb
|
189
201
|
- spec/apartment_spec.rb
|