apartment 0.13.0.1 → 0.13.1

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.
@@ -4,7 +4,7 @@ describe Apartment do
4
4
  it "should be valid" do
5
5
  Apartment.should be_a(Module)
6
6
  end
7
-
7
+
8
8
  it "should be a valid app" do
9
9
  ::Rails.application.should be_a(Dummy::Application)
10
10
  end
@@ -11,13 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20111202022214) do
15
-
16
- create_table "books", :force => true do |t|
17
- t.string "name"
18
- t.integer "pages"
19
- t.datetime "published"
20
- end
14
+ ActiveRecord::Schema.define(:version => 20110613152810) do
21
15
 
22
16
  create_table "companies", :force => true do |t|
23
17
  t.boolean "dummy"
@@ -1,15 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Apartment::Database do
4
-
4
+
5
5
  context "using postgresql" do
6
-
6
+
7
7
  # See apartment.yml file in dummy app config
8
-
8
+
9
9
  let(:config){ Apartment::Test.config['connections']['postgresql'].symbolize_keys }
10
10
  let(:database){ "some_new_database" }
11
11
  let(:database2){ "yet_another_database" }
12
-
12
+
13
13
  before do
14
14
  Apartment.use_postgres_schemas = true
15
15
  ActiveRecord::Base.establish_connection config
@@ -17,47 +17,47 @@ describe Apartment::Database do
17
17
  Apartment::Database.stub(:config).and_return config # Use postgresql database config for this test
18
18
  @schema_search_path = ActiveRecord::Base.connection.schema_search_path
19
19
  end
20
-
20
+
21
21
  after do
22
22
  Apartment::Test.reset
23
23
  end
24
-
24
+
25
25
  describe "#init" do
26
-
26
+
27
27
  it "should process model exclusions" do
28
28
  Apartment.configure do |config|
29
29
  config.excluded_models = ["Company"]
30
30
  end
31
-
31
+
32
32
  Apartment::Database.init
33
-
33
+
34
34
  Company.table_name.should == "public.companies"
35
35
  end
36
-
36
+
37
37
  end
38
-
38
+
39
39
  describe "#adapter" do
40
40
  before do
41
41
  Apartment::Database.reload!
42
42
  end
43
-
43
+
44
44
  it "should load postgresql adapter" do
45
45
  Apartment::Database.adapter
46
46
  Apartment::Adapters::PostgresqlAdapter.should be_a(Class)
47
47
  end
48
-
48
+
49
49
  it "should raise exception with invalid adapter specified" do
50
50
  Apartment::Database.stub(:config).and_return config.merge(:adapter => 'unkown')
51
-
51
+
52
52
  expect {
53
53
  Apartment::Database.adapter
54
54
  }.to raise_error
55
55
  end
56
-
56
+
57
57
  end
58
-
58
+
59
59
  context "with schemas" do
60
-
60
+
61
61
  before do
62
62
  Apartment.configure do |config|
63
63
  config.excluded_models = []
@@ -66,21 +66,21 @@ describe Apartment::Database do
66
66
  end
67
67
  Apartment::Database.create database
68
68
  end
69
-
69
+
70
70
  after do
71
71
  Apartment::Test.drop_schema database
72
72
  end
73
-
73
+
74
74
  describe "#process" do
75
-
75
+
76
76
  before do
77
77
  Apartment::Database.create database2
78
78
  end
79
-
79
+
80
80
  after do
81
81
  Apartment::Test.drop_schema database2
82
82
  end
83
-
83
+
84
84
  it "should connect to new schema" do
85
85
  Apartment::Database.process(database) do
86
86
  Apartment::Database.current_database.should == database
@@ -92,49 +92,49 @@ describe Apartment::Database do
92
92
  Apartment::Database.process(database)
93
93
  Apartment::Database.current_database.should == database2
94
94
  end
95
-
95
+
96
96
  it "should reset to previous schema if database is nil" do
97
97
  Apartment::Database.switch(database)
98
98
  Apartment::Database.process
99
99
  Apartment::Database.current_database.should == database
100
100
  end
101
-
101
+
102
102
  it "should set to public schema if database is nil" do
103
103
  Apartment::Database.process do
104
104
  Apartment::Database.current_database.should == @schema_search_path
105
105
  end
106
106
  end
107
-
107
+
108
108
  end
109
-
109
+
110
110
  describe "#create" do
111
111
  it "should create new postgres schema" do
112
112
  ActiveRecord::Base.connection.execute("SELECT nspname FROM pg_namespace;").collect{|row| row['nspname']}.should include(database)
113
113
  end
114
-
114
+
115
115
  it "should seed data" do
116
116
  Apartment::Database.switch database
117
117
  User.count.should be > 0
118
118
  end
119
119
  end
120
-
120
+
121
121
  describe "#switch" do
122
-
122
+
123
123
  let(:x){ rand(3) }
124
-
124
+
125
125
  it "should connect to new schema" do
126
126
  Apartment::Database.switch database
127
127
  ActiveRecord::Base.connection.schema_search_path.should == database
128
128
  end
129
-
129
+
130
130
  it "should fail with invalid schema" do
131
131
  expect {
132
132
  Apartment::Database.switch('some_nonexistent_schema')
133
133
  }.to raise_error Apartment::SchemaNotFound
134
134
  end
135
-
135
+
136
136
  context "creating models" do
137
-
137
+
138
138
  before do
139
139
  Apartment::Database.create database2
140
140
  end
@@ -142,7 +142,7 @@ describe Apartment::Database do
142
142
  after do
143
143
  Apartment::Test.drop_schema database2
144
144
  end
145
-
145
+
146
146
  it "should create a model instance in the current schema" do
147
147
  Apartment::Database.switch database2
148
148
  db2_count = User.count + x.times{ User.create }
@@ -157,25 +157,25 @@ describe Apartment::Database do
157
157
  User.count.should == db_count
158
158
  end
159
159
  end
160
-
160
+
161
161
  context "with excluded models" do
162
-
162
+
163
163
  before do
164
164
  Apartment.configure do |config|
165
165
  config.excluded_models = ["Company"]
166
166
  end
167
167
  Apartment::Database.init
168
168
  end
169
-
169
+
170
170
  it "should ignore excluded models" do
171
171
  Apartment::Database.switch database
172
172
  Company.table_name.should include('public')
173
173
  end
174
-
174
+
175
175
  it "should create excluded models in public schema" do
176
176
  Apartment::Database.reset # ensure we're on public schema
177
177
  count = Company.count + x.times{ Company.create }
178
-
178
+
179
179
  Apartment::Database.switch database
180
180
  x.times{ Company.create }
181
181
  Company.count.should == count + x
@@ -183,18 +183,18 @@ describe Apartment::Database do
183
183
  Company.count.should == count + x
184
184
  end
185
185
  end
186
-
186
+
187
187
  end
188
-
188
+
189
189
  describe "#current_database" do
190
-
190
+
191
191
  it "should return the current schema search path" do
192
192
  Apartment::Database.switch database
193
193
  Apartment::Database.current_database.should == database
194
194
  end
195
195
  end
196
-
196
+
197
197
  end
198
-
198
+
199
199
  end
200
200
  end
@@ -1,41 +1,41 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Apartment::Elevators::Subdomain do
4
-
4
+
5
5
  let(:company){ mock_model(Company, :subdomain => 'foo').as_null_object }
6
6
  let(:domain){ "http://#{company.subdomain}.domain.com" }
7
-
7
+
8
8
  before do
9
9
  Apartment.seed_after_create = false
10
10
  Apartment.use_postgres_schemas = true
11
-
11
+
12
12
  Apartment::Database.create(company.subdomain)
13
13
  end
14
-
14
+
15
15
  after do
16
16
  Apartment::Test.drop_schema(company.subdomain)
17
17
  end
18
-
18
+
19
19
  context "single request" do
20
20
  it "should switch the db" do
21
21
  ActiveRecord::Base.connection.schema_search_path.should_not == 'foo'
22
-
22
+
23
23
  visit(domain)
24
24
  ActiveRecord::Base.connection.schema_search_path.should == company.subdomain
25
25
  end
26
26
  end
27
-
27
+
28
28
  context "simultaneous requests" do
29
29
  let(:company2){ mock_model(Company, :subdomain => 'bar').as_null_object }
30
30
  let(:domain2){ "http://#{company2.subdomain}.domain.com" }
31
-
31
+
32
32
  before do
33
33
  Apartment::Database.create(company2.subdomain)
34
34
  # Create some users for each db
35
35
  Apartment::Database.process(company.subdomain) do
36
36
  @c1_user_count = (2 + rand(2)).times{ User.create }
37
37
  end
38
-
38
+
39
39
  Apartment::Database.process(company2.subdomain) do
40
40
  @c2_user_count = (@c1_user_count + 2).times{ User.create }
41
41
  end
@@ -44,20 +44,20 @@ describe Apartment::Elevators::Subdomain do
44
44
  after do
45
45
  Apartment::Test.drop_schema(company2.subdomain)
46
46
  end
47
-
47
+
48
48
  it "should fetch the correct user count for each session based on subdomain" do
49
49
  visit(domain)
50
-
50
+
51
51
  in_new_session do |session|
52
52
  session.visit(domain2)
53
53
  User.count.should == @c2_user_count
54
54
  end
55
-
55
+
56
56
  visit(domain)
57
57
  User.count.should == @c1_user_count
58
58
  end
59
-
60
-
59
+
60
+
61
61
  end
62
-
62
+
63
63
  end
@@ -19,17 +19,13 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
19
19
 
20
20
 
21
21
  RSpec.configure do |config|
22
-
22
+
23
23
  config.include RSpec::Integration::CapybaraSessions, :type => :request
24
-
24
+
25
25
  config.before(:all) do
26
26
  # Ensure that each test starts with a clean connection
27
27
  # Necessary as some tests will leak things like current_schema into the next test
28
28
  ActiveRecord::Base.clear_all_connections!
29
29
  end
30
-
31
- config.before(:each) do
32
- Apartment.reset
33
- end
34
-
30
+
35
31
  end
@@ -1,32 +1,32 @@
1
1
  module Apartment
2
2
  module Test
3
-
3
+
4
4
  extend self
5
-
5
+
6
6
  def reset
7
7
  Apartment.excluded_models = nil
8
8
  Apartment.use_postgres_schemas = nil
9
9
  end
10
-
10
+
11
11
  def drop_schema(schema)
12
12
  ActiveRecord::Base.silence{ ActiveRecord::Base.connection.execute("DROP SCHEMA IF EXISTS #{schema} CASCADE") } rescue true
13
13
  end
14
-
14
+
15
15
  def create_schema(schema)
16
16
  ActiveRecord::Base.connection.execute("CREATE SCHEMA #{schema}")
17
17
  end
18
-
18
+
19
19
  def load_schema
20
20
  silence_stream(STDOUT){ load("#{Rails.root}/db/schema.rb") }
21
21
  end
22
-
22
+
23
23
  def migrate
24
24
  ActiveRecord::Migrator.migrate(Rails.root + ActiveRecord::Migrator.migrations_path)
25
25
  end
26
-
26
+
27
27
  def rollback
28
28
  ActiveRecord::Migrator.rollback(Rails.root + ActiveRecord::Migrator.migrations_path)
29
29
  end
30
-
30
+
31
31
  end
32
32
  end
@@ -18,6 +18,7 @@ describe "apartment rake tasks" do
18
18
 
19
19
  after do
20
20
  Rake.application = nil
21
+ ENV['VERSION'] = nil # linux users reported env variable carrying on between tests
21
22
  end
22
23
 
23
24
  let(:version){ '1234' }
@@ -1,25 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Apartment do
4
-
4
+
5
5
  describe "#config" do
6
-
6
+
7
7
  let(:excluded_models){ [Company] }
8
-
8
+
9
+ after do
10
+ Apartment::Test.reset
11
+ end
12
+
9
13
  it "should yield the Apartment object" do
10
14
  Apartment.configure do |config|
11
15
  config.excluded_models = []
12
16
  config.should == Apartment
13
17
  end
14
18
  end
15
-
19
+
16
20
  it "should set excluded models" do
17
21
  Apartment.configure do |config|
18
22
  config.excluded_models = excluded_models
19
23
  end
20
24
  Apartment.excluded_models.should == excluded_models
21
25
  end
22
-
26
+
23
27
  it "should set postgres_schemas" do
24
28
  Apartment.configure do |config|
25
29
  config.excluded_models = []
@@ -27,7 +31,7 @@ describe Apartment do
27
31
  end
28
32
  Apartment.use_postgres_schemas.should be_false
29
33
  end
30
-
34
+
31
35
  it "should set seed_after_create" do
32
36
  Apartment.configure do |config|
33
37
  config.excluded_models = []
@@ -35,74 +39,40 @@ describe Apartment do
35
39
  end
36
40
  Apartment.seed_after_create.should be_true
37
41
  end
38
-
39
- context "load schema" do
40
- it "should default to true" do
41
- Apartment.configure
42
- Apartment.load_schema.should be_true
43
- end
44
-
45
- it "should set load_schema" do
46
- Apartment.configure do |config|
47
- config.load_schema = false
48
- end
49
- Apartment.load_schema.should be_false
50
- end
51
- end
52
-
42
+
53
43
  context "databases" do
54
44
  it "should return object if it doesnt respond_to call" do
55
45
  database_names = ['users', 'companies']
56
-
46
+
57
47
  Apartment.configure do |config|
58
48
  config.excluded_models = []
59
49
  config.database_names = database_names
60
50
  end
61
51
  Apartment.database_names.should == database_names
62
52
  end
63
-
53
+
64
54
  it "should invoke the proc if appropriate" do
65
55
  database_names = lambda{ ['users', 'users'] }
66
56
  database_names.should_receive(:call)
67
-
57
+
68
58
  Apartment.configure do |config|
69
59
  config.excluded_models = []
70
60
  config.database_names = database_names
71
61
  end
72
62
  Apartment.database_names
73
63
  end
74
-
64
+
75
65
  it "should return the invoked proc if appropriate" do
76
66
  dbs = lambda{ Company.scoped }
77
-
67
+
78
68
  Apartment.configure do |config|
79
69
  config.excluded_models = []
80
70
  config.database_names = dbs
81
71
  end
82
-
72
+
83
73
  Apartment.database_names.should == Company.scoped
84
74
  end
85
75
  end
86
-
87
- describe "#reset" do
88
-
89
- before do
90
- Apartment.configure do |config|
91
- config.excluded_models = ["One", "Two"]
92
- config.database_names = ["one", "two"]
93
- config.seed_after_create = true
94
- config.load_schema = false
95
- end
96
- end
97
-
98
- it "should reset all the config options" do
99
- Apartment.reset
100
- Apartment.excluded_models.should == []
101
- Apartment.database_names.should be_nil
102
- Apartment.seed_after_create.should be_false
103
- Apartment.load_schema.should be_true
104
- end
105
- end
106
-
76
+
107
77
  end
108
78
  end