apartment 0.14.4 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,21 +4,20 @@ 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
+ let(:api){ Apartment::Database }
7
8
 
8
9
  before do
9
10
  Apartment.seed_after_create = false
10
11
  Apartment.use_postgres_schemas = true
11
12
 
12
- Apartment::Database.create(company.subdomain)
13
+ api.create(company.subdomain)
13
14
  end
14
15
 
15
- after do
16
- Apartment::Test.drop_schema(company.subdomain)
17
- end
16
+ after{ api.drop(company.subdomain) }
18
17
 
19
18
  context "single request" do
20
19
  it "should switch the db" do
21
- ActiveRecord::Base.connection.schema_search_path.should_not == 'foo'
20
+ ActiveRecord::Base.connection.schema_search_path.should_not == company.subdomain
22
21
 
23
22
  visit(domain)
24
23
  ActiveRecord::Base.connection.schema_search_path.should == company.subdomain
@@ -29,32 +28,22 @@ describe Apartment::Elevators::Subdomain do
29
28
  let(:company2){ mock_model(Company, :subdomain => 'bar').as_null_object }
30
29
  let(:domain2){ "http://#{company2.subdomain}.domain.com" }
31
30
 
32
- before do
33
- Apartment::Database.create(company2.subdomain)
34
- # Create some users for each db
35
- Apartment::Database.process(company.subdomain) do
36
- @c1_user_count = (2 + rand(2)).times{ User.create }
37
- end
38
-
39
- Apartment::Database.process(company2.subdomain) do
40
- @c2_user_count = (@c1_user_count + 2).times{ User.create }
41
- end
42
- end
43
-
44
- after do
45
- Apartment::Test.drop_schema(company2.subdomain)
46
- end
31
+ before{ api.create(company2.subdomain) }
32
+ after{ api.drop(company2.subdomain) }
33
+
34
+ let!(:c1_user_count){ api.process(company.subdomain){ (2 + rand(2)).times{ User.create } } }
35
+ let!(:c2_user_count){ api.process(company2.subdomain){ (c1_user_count + 2).times{ User.create } } }
47
36
 
48
37
  it "should fetch the correct user count for each session based on subdomain" do
49
38
  visit(domain)
50
39
 
51
40
  in_new_session do |session|
52
41
  session.visit(domain2)
53
- User.count.should == @c2_user_count
42
+ User.count.should == c2_user_count
54
43
  end
55
44
 
56
45
  visit(domain)
57
- User.count.should == @c1_user_count
46
+ User.count.should == c1_user_count
58
47
  end
59
48
 
60
49
 
@@ -27,5 +27,12 @@ RSpec.configure do |config|
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.after(:each) do
32
+ Apartment::Test.reset
33
+ end
34
+
35
+ end
30
36
 
31
- end
37
+ # Load shared examples, must happen after configure for RSpec 3
38
+ Dir["#{File.dirname(__FILE__)}/examples/**/*.rb"].each { |f| require f }
@@ -6,6 +6,12 @@ module Apartment
6
6
  def reset
7
7
  Apartment.excluded_models = nil
8
8
  Apartment.use_postgres_schemas = nil
9
+ Apartment.seed_after_create = nil
10
+ end
11
+
12
+ def next_db
13
+ @x ||= 0
14
+ "db_#{@x += 1}"
9
15
  end
10
16
 
11
17
  def drop_schema(schema)
@@ -17,7 +23,7 @@ module Apartment
17
23
  end
18
24
 
19
25
  def load_schema
20
- silence_stream(STDOUT){ load("#{Rails.root}/db/schema.rb") }
26
+ silence_stream(STDOUT){ load(Rails.root.join('db', 'schema.rb')) }
21
27
  end
22
28
 
23
29
  def migrate
@@ -1,11 +1,11 @@
1
1
  module Apartment
2
-
2
+
3
3
  module Test
4
-
4
+
5
5
  def self.config
6
6
  @config ||= YAML.load_file('spec/config/database.yml')
7
7
  end
8
-
8
+
9
9
  end
10
-
10
+
11
11
  end
@@ -0,0 +1,45 @@
1
+ module Apartment
2
+ module Spec
3
+
4
+ #
5
+ # Define the interface methods required to
6
+ # use an adapter shared example
7
+ #
8
+ #
9
+ module AdapterRequirements
10
+
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ let(:db1){ Apartment::Test.next_db }
15
+ let(:db2){ Apartment::Test.next_db }
16
+ let(:connection){ ActiveRecord::Base.connection }
17
+
18
+ before do
19
+ ActiveRecord::Base.establish_connection config
20
+ subject.create(db1)
21
+ subject.create(db2)
22
+ end
23
+
24
+ after do
25
+ # Reset before dropping (can't drop a db you're connected to)
26
+ subject.reset
27
+
28
+ # sometimes we manually drop these schemas in testing, don't care if we can't drop, hence rescue
29
+ subject.drop(db1) rescue true
30
+ subject.drop(db2) rescue true
31
+
32
+ ActiveRecord::Base.clear_all_connections!
33
+ Apartment::Database.reload!
34
+ end
35
+ end
36
+
37
+ %w{subject config database_names default_database}.each do |method|
38
+ define_method method do
39
+ raise "You must define a `#{method}` method in your host group"
40
+ end unless defined?(method)
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -25,7 +25,7 @@ describe "apartment rake tasks" do
25
25
 
26
26
  context 'database migration' do
27
27
 
28
- let(:database_names){ ['company1', 'company2', 'company3'] }
28
+ let(:database_names){ 3.times.map{ Apartment::Test.next_db } }
29
29
  let(:db_count){ database_names.length }
30
30
 
31
31
  before do
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Apartment::Migrator do
4
4
 
5
5
  let(:config){ Apartment::Test.config['connections']['postgresql'].symbolize_keys }
6
- let(:schema_name){ 'some_db_schema' }
6
+ let(:schema_name){ Apartment::Test.next_db }
7
7
  let(:version){ 20110613152810 } # note this is brittle! I've literally just taken the version of the one migration I made... don't change this version
8
8
 
9
9
  before do
metadata CHANGED
@@ -1,146 +1,162 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: apartment
3
- version: !ruby/object:Gem::Version
4
- version: 0.14.4
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.15.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Ryan Brunner
9
9
  - Brad Robertson
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-08 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: rails
17
- requirement: &2156199960 !ruby/object:Gem::Requirement
13
+
14
+ date: 2012-03-18 00:00:00 -04:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: activerecord
19
+ requirement: &id001 !ruby/object:Gem::Requirement
18
20
  none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
22
24
  version: 3.1.2
23
25
  type: :runtime
24
26
  prerelease: false
25
- version_requirements: *2156199960
26
- - !ruby/object:Gem::Dependency
27
+ version_requirements: *id001
28
+ - !ruby/object:Gem::Dependency
29
+ name: rack
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 1.4.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: *id002
39
+ - !ruby/object:Gem::Dependency
40
+ name: rails
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 3.1.2
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
27
51
  name: rake
28
- requirement: &2156198740 !ruby/object:Gem::Requirement
52
+ requirement: &id004 !ruby/object:Gem::Requirement
29
53
  none: false
30
- requirements:
54
+ requirements:
31
55
  - - ~>
32
- - !ruby/object:Gem::Version
56
+ - !ruby/object:Gem::Version
33
57
  version: 0.9.2
34
58
  type: :development
35
59
  prerelease: false
36
- version_requirements: *2156198740
37
- - !ruby/object:Gem::Dependency
60
+ version_requirements: *id004
61
+ - !ruby/object:Gem::Dependency
38
62
  name: sqlite3
39
- requirement: &2156197960 !ruby/object:Gem::Requirement
63
+ requirement: &id005 !ruby/object:Gem::Requirement
40
64
  none: false
41
- requirements:
42
- - - ! '>='
43
- - !ruby/object:Gem::Version
44
- version: '0'
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
45
69
  type: :development
46
70
  prerelease: false
47
- version_requirements: *2156197960
48
- - !ruby/object:Gem::Dependency
71
+ version_requirements: *id005
72
+ - !ruby/object:Gem::Dependency
49
73
  name: rspec
50
- requirement: &2156197060 !ruby/object:Gem::Requirement
74
+ requirement: &id006 !ruby/object:Gem::Requirement
51
75
  none: false
52
- requirements:
76
+ requirements:
53
77
  - - ~>
54
- - !ruby/object:Gem::Version
78
+ - !ruby/object:Gem::Version
55
79
  version: 2.8.0
56
80
  type: :development
57
81
  prerelease: false
58
- version_requirements: *2156197060
59
- - !ruby/object:Gem::Dependency
82
+ version_requirements: *id006
83
+ - !ruby/object:Gem::Dependency
60
84
  name: rspec-rails
61
- requirement: &2156196160 !ruby/object:Gem::Requirement
85
+ requirement: &id007 !ruby/object:Gem::Requirement
62
86
  none: false
63
- requirements:
87
+ requirements:
64
88
  - - ~>
65
- - !ruby/object:Gem::Version
66
- version: 2.8.0
89
+ - !ruby/object:Gem::Version
90
+ version: 2.8.1
67
91
  type: :development
68
92
  prerelease: false
69
- version_requirements: *2156196160
70
- - !ruby/object:Gem::Dependency
93
+ version_requirements: *id007
94
+ - !ruby/object:Gem::Dependency
71
95
  name: capybara
72
- requirement: &2156195360 !ruby/object:Gem::Requirement
96
+ requirement: &id008 !ruby/object:Gem::Requirement
73
97
  none: false
74
- requirements:
75
- - - =
76
- - !ruby/object:Gem::Version
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
77
101
  version: 1.0.0
78
102
  type: :development
79
103
  prerelease: false
80
- version_requirements: *2156195360
81
- - !ruby/object:Gem::Dependency
104
+ version_requirements: *id008
105
+ - !ruby/object:Gem::Dependency
82
106
  name: pg
83
- requirement: &2156194560 !ruby/object:Gem::Requirement
107
+ requirement: &id009 !ruby/object:Gem::Requirement
84
108
  none: false
85
- requirements:
86
- - - ~>
87
- - !ruby/object:Gem::Version
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
88
112
  version: 0.11.0
89
113
  type: :development
90
114
  prerelease: false
91
- version_requirements: *2156194560
92
- - !ruby/object:Gem::Dependency
115
+ version_requirements: *id009
116
+ - !ruby/object:Gem::Dependency
93
117
  name: mysql2
94
- requirement: &2156176740 !ruby/object:Gem::Requirement
95
- none: false
96
- requirements:
97
- - - ~>
98
- - !ruby/object:Gem::Version
99
- version: 0.3.7
100
- type: :development
101
- prerelease: false
102
- version_requirements: *2156176740
103
- - !ruby/object:Gem::Dependency
104
- name: silent-postgres
105
- requirement: &2156175840 !ruby/object:Gem::Requirement
118
+ requirement: &id010 !ruby/object:Gem::Requirement
106
119
  none: false
107
- requirements:
120
+ requirements:
108
121
  - - ~>
109
- - !ruby/object:Gem::Version
110
- version: 0.1.1
122
+ - !ruby/object:Gem::Version
123
+ version: 0.3.10
111
124
  type: :development
112
125
  prerelease: false
113
- version_requirements: *2156175840
114
- - !ruby/object:Gem::Dependency
126
+ version_requirements: *id010
127
+ - !ruby/object:Gem::Dependency
115
128
  name: delayed_job
116
- requirement: &2156174740 !ruby/object:Gem::Requirement
129
+ requirement: &id011 !ruby/object:Gem::Requirement
117
130
  none: false
118
- requirements:
131
+ requirements:
119
132
  - - ~>
120
- - !ruby/object:Gem::Version
121
- version: 3.0.1
133
+ - !ruby/object:Gem::Version
134
+ version: "3.0"
122
135
  type: :development
123
136
  prerelease: false
124
- version_requirements: *2156174740
125
- - !ruby/object:Gem::Dependency
137
+ version_requirements: *id011
138
+ - !ruby/object:Gem::Dependency
126
139
  name: delayed_job_active_record
127
- requirement: &2156173700 !ruby/object:Gem::Requirement
140
+ requirement: &id012 !ruby/object:Gem::Requirement
128
141
  none: false
129
- requirements:
130
- - - ! '>='
131
- - !ruby/object:Gem::Version
132
- version: '0'
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: "0"
133
146
  type: :development
134
147
  prerelease: false
135
- version_requirements: *2156173700
148
+ version_requirements: *id012
136
149
  description: Apartment allows Rails applications to deal with database multitenancy
137
- email:
150
+ email:
138
151
  - ryan@ryanbrunner.com
139
152
  - bradleyrobertson@gmail.com
140
153
  executables: []
154
+
141
155
  extensions: []
156
+
142
157
  extra_rdoc_files: []
143
- files:
158
+
159
+ files:
144
160
  - .gitignore
145
161
  - .rspec
146
162
  - .rvmrc
@@ -169,6 +185,7 @@ files:
169
185
  - spec/adapters/postgresql_adapter_spec.rb
170
186
  - spec/apartment_spec.rb
171
187
  - spec/config/database.yml
188
+ - spec/database_spec.rb
172
189
  - spec/dummy/Rakefile
173
190
  - spec/dummy/app/controllers/application_controller.rb
174
191
  - spec/dummy/app/helpers/application_helper.rb
@@ -204,48 +221,55 @@ files:
204
221
  - spec/dummy/public/favicon.ico
205
222
  - spec/dummy/public/stylesheets/.gitkeep
206
223
  - spec/dummy/script/rails
224
+ - spec/examples/db_adapter_examples.rb
225
+ - spec/examples/generic_adapter_examples.rb
226
+ - spec/examples/schema_adapter_examples.rb
207
227
  - spec/integration/apartment_rake_integration_spec.rb
208
- - spec/integration/database_integration_spec.rb
209
228
  - spec/integration/delayed_job_integration_spec.rb
210
229
  - spec/integration/middleware/subdomain_elevator_spec.rb
211
230
  - spec/spec_helper.rb
212
231
  - spec/support/apartment_helpers.rb
213
232
  - spec/support/capybara_sessions.rb
214
233
  - spec/support/config.rb
234
+ - spec/support/requirements.rb
215
235
  - spec/tasks/apartment_rake_spec.rb
216
236
  - spec/unit/config_spec.rb
217
237
  - spec/unit/middleware/subdomain_elevator_spec.rb
218
238
  - spec/unit/migrator_spec.rb
219
239
  - spec/unit/reloader_spec.rb
240
+ has_rdoc: true
220
241
  homepage: http://github.com/bradrobertson/apartment
221
- licenses:
242
+ licenses:
222
243
  - MIT
223
244
  post_install_message:
224
245
  rdoc_options: []
225
- require_paths:
246
+
247
+ require_paths:
226
248
  - lib
227
- required_ruby_version: !ruby/object:Gem::Requirement
249
+ required_ruby_version: !ruby/object:Gem::Requirement
228
250
  none: false
229
- requirements:
230
- - - ! '>='
231
- - !ruby/object:Gem::Version
232
- version: '0'
233
- segments:
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ hash: -617584559
255
+ segments:
234
256
  - 0
235
- hash: -3479851057211563611
236
- required_rubygems_version: !ruby/object:Gem::Requirement
257
+ version: "0"
258
+ required_rubygems_version: !ruby/object:Gem::Requirement
237
259
  none: false
238
- requirements:
239
- - - ! '>='
240
- - !ruby/object:Gem::Version
241
- version: '0'
242
- segments:
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ hash: -617584559
264
+ segments:
243
265
  - 0
244
- hash: -3479851057211563611
266
+ version: "0"
245
267
  requirements: []
268
+
246
269
  rubyforge_project:
247
- rubygems_version: 1.8.10
270
+ rubygems_version: 1.6.2
248
271
  signing_key:
249
272
  specification_version: 3
250
273
  summary: A Ruby gem for managing database multitenancy in Rails applications
251
274
  test_files: []
275
+