apartment 0.22.1 → 0.23.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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -2
  3. data/.rspec +2 -1
  4. data/.travis.yml +3 -1
  5. data/Appraisals +7 -0
  6. data/Gemfile +0 -21
  7. data/HISTORY.md +6 -0
  8. data/README.md +13 -71
  9. data/Rakefile +4 -2
  10. data/TODO.md +0 -5
  11. data/apartment.gemspec +19 -0
  12. data/gemfiles/rails3.2.gemfile +7 -0
  13. data/gemfiles/rails4.0.gemfile +7 -0
  14. data/lib/apartment.rb +2 -28
  15. data/lib/apartment/adapters/abstract_adapter.rb +0 -2
  16. data/lib/apartment/adapters/abstract_jdbc_adapter.rb +2 -0
  17. data/lib/apartment/adapters/jdbc_mysql_adapter.rb +2 -0
  18. data/lib/apartment/adapters/jdbc_postgresql_adapter.rb +1 -1
  19. data/lib/apartment/adapters/mysql2_adapter.rb +2 -3
  20. data/lib/apartment/adapters/postgis_adapter.rb +0 -1
  21. data/lib/apartment/adapters/postgresql_adapter.rb +2 -3
  22. data/lib/apartment/adapters/sqlite3_adapter.rb +2 -0
  23. data/lib/apartment/database.rb +0 -4
  24. data/lib/apartment/elevators/domain.rb +2 -0
  25. data/lib/apartment/elevators/first_subdomain.rb +2 -0
  26. data/lib/apartment/elevators/generic.rb +3 -0
  27. data/lib/apartment/elevators/host_hash.rb +2 -0
  28. data/lib/apartment/elevators/subdomain.rb +19 -2
  29. data/lib/apartment/migrator.rb +2 -1
  30. data/lib/apartment/railtie.rb +2 -2
  31. data/lib/apartment/reloader.rb +0 -3
  32. data/lib/apartment/version.rb +2 -2
  33. data/lib/tasks/apartment.rake +2 -0
  34. data/spec/adapters/jdbc_mysql_adapter_spec.rb +1 -3
  35. data/spec/adapters/jdbc_postgresql_adapter_spec.rb +1 -3
  36. data/spec/adapters/mysql2_adapter_spec.rb +1 -2
  37. data/spec/adapters/postgresql_adapter_spec.rb +1 -2
  38. data/spec/adapters/sqlite3_adapter_spec.rb +1 -2
  39. data/spec/database_spec.rb +32 -50
  40. data/spec/dummy/app/models/user.rb +0 -2
  41. data/spec/dummy/config/application.rb +2 -0
  42. data/spec/dummy/config/environments/development.rb +2 -0
  43. data/spec/dummy/config/environments/production.rb +2 -0
  44. data/spec/dummy/config/environments/test.rb +1 -2
  45. data/spec/dummy/config/initializers/apartment.rb +1 -1
  46. data/spec/dummy/db/seeds.rb +1 -4
  47. data/spec/examples/elevator_examples.rb +4 -4
  48. data/spec/integration/apartment_rake_integration_spec.rb +15 -19
  49. data/spec/integration/middleware/domain_elevator_spec.rb +4 -3
  50. data/spec/integration/middleware/generic_elevator_spec.rb +4 -3
  51. data/spec/integration/middleware/subdomain_elevator_spec.rb +29 -3
  52. data/spec/integration/query_caching_spec.rb +8 -4
  53. data/spec/schemas/v1.rb +16 -0
  54. data/spec/schemas/v2.rb +43 -0
  55. data/spec/schemas/v3.rb +49 -0
  56. data/spec/spec_helper.rb +5 -11
  57. data/spec/support/apartment_helpers.rb +4 -2
  58. data/spec/support/contexts.rb +15 -19
  59. data/spec/support/requirements.rb +1 -17
  60. data/spec/support/setup.rb +47 -0
  61. data/spec/tasks/apartment_rake_spec.rb +6 -3
  62. data/spec/unit/config_spec.rb +3 -3
  63. data/spec/unit/middleware/domain_elevator_spec.rb +1 -2
  64. data/spec/{integration → unit}/middleware/first_subdomain_elevator_spec.rb +1 -0
  65. data/spec/unit/middleware/host_hash_elevator_spec.rb +1 -2
  66. data/spec/unit/middleware/subdomain_elevator_spec.rb +1 -2
  67. data/spec/unit/migrator_spec.rb +5 -4
  68. data/spec/unit/reloader_spec.rb +6 -4
  69. metadata +130 -14
  70. data/lib/apartment/delayed_job/enqueue.rb +0 -26
  71. data/lib/apartment/delayed_job/hooks.rb +0 -26
  72. data/lib/apartment/delayed_job/psych_ext.rb +0 -61
  73. data/lib/apartment/delayed_job/requirements.rb +0 -23
  74. data/lib/apartment/delayed_job/syck_ext.rb +0 -29
  75. data/spec/dummy/lib/fake_dj_class.rb +0 -6
  76. data/spec/integration/delayed_job_integration_spec.rb +0 -99
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'rake'
3
+ require 'apartment/migrator'
3
4
 
4
5
  describe "apartment rake tasks" do
5
6
 
@@ -21,6 +22,10 @@ describe "apartment rake tasks" do
21
22
  ENV['VERSION'] = nil # linux users reported env variable carrying on between tests
22
23
  end
23
24
 
25
+ after(:all) do
26
+ Apartment::Test.load_schema
27
+ end
28
+
24
29
  let(:version){ '1234' }
25
30
 
26
31
  context 'database migration' do
@@ -112,7 +117,5 @@ describe "apartment rake tasks" do
112
117
  @rake['apartment:rollback'].invoke
113
118
  end
114
119
  end
115
-
116
120
  end
117
-
118
- end
121
+ end
@@ -4,7 +4,7 @@ describe Apartment do
4
4
 
5
5
  describe "#config" do
6
6
 
7
- let(:excluded_models){ [Company] }
7
+ let(:excluded_models){ ["Company"] }
8
8
 
9
9
  it "should yield the Apartment object" do
10
10
  Apartment.configure do |config|
@@ -59,14 +59,14 @@ describe Apartment do
59
59
  end
60
60
 
61
61
  it "should return the invoked proc if appropriate" do
62
- dbs = lambda{ Company.scoped }
62
+ dbs = lambda{ Company.all }
63
63
 
64
64
  Apartment.configure do |config|
65
65
  config.excluded_models = []
66
66
  config.database_names = dbs
67
67
  end
68
68
 
69
- Apartment.database_names.should == Company.scoped
69
+ Apartment.database_names.should == Company.all
70
70
  end
71
71
  end
72
72
 
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'apartment/elevators/domain'
2
3
 
3
4
  describe Apartment::Elevators::Domain do
4
5
 
@@ -20,7 +21,5 @@ describe Apartment::Elevators::Domain do
20
21
  elevator = Apartment::Elevators::Domain.new(nil)
21
22
  elevator.parse_database_name(request).should be_nil
22
23
  end
23
-
24
24
  end
25
-
26
25
  end
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'apartment/elevators/first_subdomain'
2
3
 
3
4
  describe Apartment::Elevators::FirstSubdomain do
4
5
  describe "subdomain" do
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'apartment/elevators/host_hash'
2
3
 
3
4
  describe Apartment::Elevators::HostHash do
4
5
 
@@ -20,7 +21,5 @@ describe Apartment::Elevators::HostHash do
20
21
  elevator = Apartment::Elevators::HostHash.new(nil, 'example.com' => 'example_database')
21
22
  expect { elevator.parse_database_name(request) }.to raise_error(Apartment::DatabaseNotFound)
22
23
  end
23
-
24
24
  end
25
-
26
25
  end
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'apartment/elevators/subdomain'
2
3
 
3
4
  describe Apartment::Elevators::Subdomain do
4
5
 
@@ -14,7 +15,5 @@ describe Apartment::Elevators::Subdomain do
14
15
  elevator = Apartment::Elevators::Subdomain.new(nil)
15
16
  elevator.parse_database_name(request).should be_nil
16
17
  end
17
-
18
18
  end
19
-
20
19
  end
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
+ require 'apartment/migrator'
2
3
 
3
- describe Apartment::Migrator do
4
+ describe Apartment::Migrator, database: :postgresql do
4
5
 
5
- let(:config){ Apartment::Test.config['connections']['postgresql'].symbolize_keys }
6
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
 
@@ -28,8 +28,10 @@ describe Apartment::Migrator do
28
28
  Apartment::Test.drop_schema(schema_name)
29
29
  end
30
30
 
31
- context "postgresql" do
31
+ # reset db
32
+ after(:all){ Apartment::Test.load_schema }
32
33
 
34
+ context "postgresql" do
33
35
  context "using schemas" do
34
36
 
35
37
  describe "#migrate" do
@@ -85,5 +87,4 @@ describe Apartment::Migrator do
85
87
  end
86
88
  end
87
89
  end
88
-
89
90
  end
@@ -5,7 +5,11 @@ describe Apartment::Reloader do
5
5
  context "using postgresql schemas" do
6
6
 
7
7
  before do
8
- Apartment.excluded_models = ["Company"]
8
+ Apartment.configure do |config|
9
+ config.excluded_models = ["Company"]
10
+ config.use_schemas = true
11
+ end
12
+ Apartment::Database.reload!(config)
9
13
  Company.reset_table_name # ensure we're clean
10
14
  end
11
15
 
@@ -13,10 +17,8 @@ describe Apartment::Reloader do
13
17
 
14
18
  it "should initialize apartment when called" do
15
19
  Company.table_name.should_not include('public.')
16
- subject.call(mock('env'))
20
+ subject.call(double('env'))
17
21
  Company.table_name.should include('public.')
18
22
  end
19
23
  end
20
-
21
-
22
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apartment
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.1
4
+ version: 0.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Brunner
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-21 00:00:00.000000000 Z
12
+ date: 2013-12-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -39,6 +39,118 @@ dependencies:
39
39
  - - '>='
40
40
  - !ruby/object:Gem::Version
41
41
  version: 1.3.6
42
+ - !ruby/object:Gem::Dependency
43
+ name: appraisal
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '0.9'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '0.9'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '2.11'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: '2.11'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec-rails
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: '2.11'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: '2.11'
98
+ - !ruby/object:Gem::Dependency
99
+ name: capybara
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: 1.0.0
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: 1.0.0
112
+ - !ruby/object:Gem::Dependency
113
+ name: mysql2
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: 0.3.10
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.3.10
126
+ - !ruby/object:Gem::Dependency
127
+ name: pg
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - '>='
131
+ - !ruby/object:Gem::Version
132
+ version: 0.11.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: 0.11.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: sqlite3
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
42
154
  description: Apartment allows Rack applications to deal with database multitenancy
43
155
  through ActiveRecord
44
156
  email:
@@ -54,6 +166,7 @@ files:
54
166
  - .ruby-gemset
55
167
  - .ruby-version
56
168
  - .travis.yml
169
+ - Appraisals
57
170
  - Gemfile
58
171
  - HISTORY.md
59
172
  - README.md
@@ -61,6 +174,10 @@ files:
61
174
  - TODO.md
62
175
  - apartment.gemspec
63
176
  - circle.yml
177
+ - gemfiles/rails3.2.gemfile
178
+ - gemfiles/rails3.2.gemfile.lock
179
+ - gemfiles/rails4.0.gemfile
180
+ - gemfiles/rails4.0.gemfile.lock
64
181
  - lib/apartment.rb
65
182
  - lib/apartment/adapters/abstract_adapter.rb
66
183
  - lib/apartment/adapters/abstract_jdbc_adapter.rb
@@ -72,11 +189,6 @@ files:
72
189
  - lib/apartment/adapters/sqlite3_adapter.rb
73
190
  - lib/apartment/console.rb
74
191
  - lib/apartment/database.rb
75
- - lib/apartment/delayed_job/enqueue.rb
76
- - lib/apartment/delayed_job/hooks.rb
77
- - lib/apartment/delayed_job/psych_ext.rb
78
- - lib/apartment/delayed_job/requirements.rb
79
- - lib/apartment/delayed_job/syck_ext.rb
80
192
  - lib/apartment/elevators/domain.rb
81
193
  - lib/apartment/elevators/first_subdomain.rb
82
194
  - lib/apartment/elevators/generic.rb
@@ -126,7 +238,6 @@ files:
126
238
  - spec/dummy/db/schema.rb
127
239
  - spec/dummy/db/seeds.rb
128
240
  - spec/dummy/db/test.sqlite3
129
- - spec/dummy/lib/fake_dj_class.rb
130
241
  - spec/dummy/public/404.html
131
242
  - spec/dummy/public/422.html
132
243
  - spec/dummy/public/500.html
@@ -138,21 +249,24 @@ files:
138
249
  - spec/examples/generic_adapter_examples.rb
139
250
  - spec/examples/schema_adapter_examples.rb
140
251
  - spec/integration/apartment_rake_integration_spec.rb
141
- - spec/integration/delayed_job_integration_spec.rb
142
252
  - spec/integration/middleware/domain_elevator_spec.rb
143
- - spec/integration/middleware/first_subdomain_elevator_spec.rb
144
253
  - spec/integration/middleware/generic_elevator_spec.rb
145
254
  - spec/integration/middleware/subdomain_elevator_spec.rb
146
255
  - spec/integration/query_caching_spec.rb
256
+ - spec/schemas/v1.rb
257
+ - spec/schemas/v2.rb
258
+ - spec/schemas/v3.rb
147
259
  - spec/spec_helper.rb
148
260
  - spec/support/apartment_helpers.rb
149
261
  - spec/support/capybara_sessions.rb
150
262
  - spec/support/config.rb
151
263
  - spec/support/contexts.rb
152
264
  - spec/support/requirements.rb
265
+ - spec/support/setup.rb
153
266
  - spec/tasks/apartment_rake_spec.rb
154
267
  - spec/unit/config_spec.rb
155
268
  - spec/unit/middleware/domain_elevator_spec.rb
269
+ - spec/unit/middleware/first_subdomain_elevator_spec.rb
156
270
  - spec/unit/middleware/host_hash_elevator_spec.rb
157
271
  - spec/unit/middleware/subdomain_elevator_spec.rb
158
272
  - spec/unit/migrator_spec.rb
@@ -177,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
291
  version: '0'
178
292
  requirements: []
179
293
  rubyforge_project:
180
- rubygems_version: 2.0.3
294
+ rubygems_version: 2.1.10
181
295
  signing_key:
182
296
  specification_version: 4
183
297
  summary: A Ruby gem for managing database multitenancy
@@ -218,7 +332,6 @@ test_files:
218
332
  - spec/dummy/db/schema.rb
219
333
  - spec/dummy/db/seeds.rb
220
334
  - spec/dummy/db/test.sqlite3
221
- - spec/dummy/lib/fake_dj_class.rb
222
335
  - spec/dummy/public/404.html
223
336
  - spec/dummy/public/422.html
224
337
  - spec/dummy/public/500.html
@@ -230,21 +343,24 @@ test_files:
230
343
  - spec/examples/generic_adapter_examples.rb
231
344
  - spec/examples/schema_adapter_examples.rb
232
345
  - spec/integration/apartment_rake_integration_spec.rb
233
- - spec/integration/delayed_job_integration_spec.rb
234
346
  - spec/integration/middleware/domain_elevator_spec.rb
235
- - spec/integration/middleware/first_subdomain_elevator_spec.rb
236
347
  - spec/integration/middleware/generic_elevator_spec.rb
237
348
  - spec/integration/middleware/subdomain_elevator_spec.rb
238
349
  - spec/integration/query_caching_spec.rb
350
+ - spec/schemas/v1.rb
351
+ - spec/schemas/v2.rb
352
+ - spec/schemas/v3.rb
239
353
  - spec/spec_helper.rb
240
354
  - spec/support/apartment_helpers.rb
241
355
  - spec/support/capybara_sessions.rb
242
356
  - spec/support/config.rb
243
357
  - spec/support/contexts.rb
244
358
  - spec/support/requirements.rb
359
+ - spec/support/setup.rb
245
360
  - spec/tasks/apartment_rake_spec.rb
246
361
  - spec/unit/config_spec.rb
247
362
  - spec/unit/middleware/domain_elevator_spec.rb
363
+ - spec/unit/middleware/first_subdomain_elevator_spec.rb
248
364
  - spec/unit/middleware/host_hash_elevator_spec.rb
249
365
  - spec/unit/middleware/subdomain_elevator_spec.rb
250
366
  - spec/unit/migrator_spec.rb
@@ -1,26 +0,0 @@
1
- require 'delayed_job'
2
- require 'yaml'
3
-
4
- if YAML.parser.class.name =~ /syck|yecht/i
5
- require 'apartment/delayed_job/syck_ext'
6
- else
7
- require 'apartment/delayed_job/psych_ext'
8
- end
9
-
10
- module Apartment
11
- module Delayed
12
- module Job
13
-
14
- # Will enqueue a job ensuring that it happens within the main 'public' database
15
- #
16
- # Note that this should not longer be required for versions >= 0.11.0 when using postgresql schemas
17
- #
18
- def self.enqueue(payload_object, options = {})
19
- Apartment::Database.process do
20
- ::Delayed::Job.enqueue(payload_object, options)
21
- end
22
- end
23
-
24
- end
25
- end
26
- end
@@ -1,26 +0,0 @@
1
- require 'apartment/delayed_job/enqueue'
2
-
3
- module Apartment
4
- module Delayed
5
- module Job
6
-
7
- # Before and after hooks for performing Delayed Jobs within a particular apartment database
8
- # Include these in your delayed jobs models and make sure provide a @database attr that will be serialized by DJ
9
- # Note also that any models that are being serialized need the Apartment::Delayed::Requirements module mixed in to it
10
- module Hooks
11
-
12
- attr_accessor :database
13
-
14
- def before(job)
15
- @_current_database = Apartment::Database.current_database
16
- Apartment::Database.switch(job.payload_object.database) if job.payload_object.database
17
- end
18
-
19
- def after
20
- Apartment::Database.switch(@_current_database)
21
- end
22
-
23
- end
24
- end
25
- end
26
- end