apartment 0.14.4 → 0.15.0

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,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
+