ros-apartment 2.4.0 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/.rubocop_todo.yml +1 -1
  4. data/.story_branch.yml +1 -0
  5. data/.travis.yml +13 -30
  6. data/Appraisals +4 -17
  7. data/Gemfile +2 -2
  8. data/Guardfile +3 -1
  9. data/HISTORY.md +90 -0
  10. data/README.md +31 -16
  11. data/Rakefile +34 -22
  12. data/TODO.md +0 -1
  13. data/gemfiles/rails_5_0.gemfile +10 -11
  14. data/gemfiles/rails_5_1.gemfile +10 -11
  15. data/gemfiles/rails_5_2.gemfile +9 -10
  16. data/gemfiles/rails_6_0.gemfile +10 -11
  17. data/gemfiles/rails_master.gemfile +10 -11
  18. data/lib/apartment.rb +31 -13
  19. data/lib/apartment/active_record/connection_handling.rb +17 -0
  20. data/lib/apartment/active_record/internal_metadata.rb +11 -0
  21. data/lib/apartment/active_record/log_subscriber.rb +41 -0
  22. data/lib/apartment/active_record/schema_migration.rb +13 -0
  23. data/lib/apartment/adapters/abstract_adapter.rb +17 -13
  24. data/lib/apartment/adapters/jdbc_postgresql_adapter.rb +9 -4
  25. data/lib/apartment/adapters/mysql2_adapter.rb +2 -0
  26. data/lib/apartment/adapters/postgresql_adapter.rb +33 -4
  27. data/lib/apartment/adapters/sqlite3_adapter.rb +2 -0
  28. data/lib/apartment/console.rb +7 -0
  29. data/lib/apartment/custom_console.rb +23 -7
  30. data/lib/apartment/model.rb +27 -0
  31. data/lib/apartment/railtie.rb +19 -15
  32. data/lib/apartment/tasks/task_helper.rb +35 -0
  33. data/lib/apartment/tenant.rb +16 -5
  34. data/lib/apartment/version.rb +1 -1
  35. data/lib/generators/apartment/install/templates/apartment.rb +5 -0
  36. data/lib/tasks/apartment.rake +16 -37
  37. data/{apartment.gemspec → ros-apartment.gemspec} +12 -6
  38. metadata +16 -213
  39. data/.github/workflows/.rubocop-linter.yml +0 -22
  40. data/spec/adapters/jdbc_mysql_adapter_spec.rb +0 -20
  41. data/spec/adapters/jdbc_postgresql_adapter_spec.rb +0 -39
  42. data/spec/adapters/mysql2_adapter_spec.rb +0 -61
  43. data/spec/adapters/postgresql_adapter_spec.rb +0 -63
  44. data/spec/adapters/sqlite3_adapter_spec.rb +0 -101
  45. data/spec/apartment_spec.rb +0 -13
  46. data/spec/config/database.yml.sample +0 -49
  47. data/spec/dummy/Rakefile +0 -7
  48. data/spec/dummy/app/controllers/application_controller.rb +0 -7
  49. data/spec/dummy/app/helpers/application_helper.rb +0 -4
  50. data/spec/dummy/app/models/application_record.rb +0 -6
  51. data/spec/dummy/app/models/company.rb +0 -5
  52. data/spec/dummy/app/models/user.rb +0 -5
  53. data/spec/dummy/app/views/application/index.html.erb +0 -1
  54. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  55. data/spec/dummy/config.ru +0 -6
  56. data/spec/dummy/config/application.rb +0 -51
  57. data/spec/dummy/config/boot.rb +0 -13
  58. data/spec/dummy/config/database.yml.sample +0 -44
  59. data/spec/dummy/config/environment.rb +0 -7
  60. data/spec/dummy/config/environments/development.rb +0 -29
  61. data/spec/dummy/config/environments/production.rb +0 -53
  62. data/spec/dummy/config/environments/test.rb +0 -36
  63. data/spec/dummy/config/initializers/apartment.rb +0 -6
  64. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -8
  65. data/spec/dummy/config/initializers/inflections.rb +0 -11
  66. data/spec/dummy/config/initializers/mime_types.rb +0 -6
  67. data/spec/dummy/config/initializers/secret_token.rb +0 -9
  68. data/spec/dummy/config/initializers/session_store.rb +0 -10
  69. data/spec/dummy/config/locales/en.yml +0 -5
  70. data/spec/dummy/config/routes.rb +0 -5
  71. data/spec/dummy/db/migrate/20110613152810_create_dummy_models.rb +0 -39
  72. data/spec/dummy/db/migrate/20111202022214_create_table_books.rb +0 -14
  73. data/spec/dummy/db/migrate/20180415260934_create_public_tokens.rb +0 -13
  74. data/spec/dummy/db/schema.rb +0 -55
  75. data/spec/dummy/db/seeds.rb +0 -5
  76. data/spec/dummy/db/seeds/import.rb +0 -7
  77. data/spec/dummy/public/404.html +0 -26
  78. data/spec/dummy/public/422.html +0 -26
  79. data/spec/dummy/public/500.html +0 -26
  80. data/spec/dummy/public/favicon.ico +0 -0
  81. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  82. data/spec/dummy/script/rails +0 -8
  83. data/spec/dummy_engine/.gitignore +0 -8
  84. data/spec/dummy_engine/Gemfile +0 -15
  85. data/spec/dummy_engine/Rakefile +0 -34
  86. data/spec/dummy_engine/bin/rails +0 -12
  87. data/spec/dummy_engine/config/initializers/apartment.rb +0 -52
  88. data/spec/dummy_engine/dummy_engine.gemspec +0 -24
  89. data/spec/dummy_engine/lib/dummy_engine.rb +0 -6
  90. data/spec/dummy_engine/lib/dummy_engine/engine.rb +0 -6
  91. data/spec/dummy_engine/lib/dummy_engine/version.rb +0 -5
  92. data/spec/dummy_engine/test/dummy/Rakefile +0 -6
  93. data/spec/dummy_engine/test/dummy/config.ru +0 -6
  94. data/spec/dummy_engine/test/dummy/config/application.rb +0 -24
  95. data/spec/dummy_engine/test/dummy/config/boot.rb +0 -7
  96. data/spec/dummy_engine/test/dummy/config/database.yml +0 -25
  97. data/spec/dummy_engine/test/dummy/config/environment.rb +0 -7
  98. data/spec/dummy_engine/test/dummy/config/environments/development.rb +0 -39
  99. data/spec/dummy_engine/test/dummy/config/environments/production.rb +0 -80
  100. data/spec/dummy_engine/test/dummy/config/environments/test.rb +0 -41
  101. data/spec/dummy_engine/test/dummy/config/initializers/assets.rb +0 -10
  102. data/spec/dummy_engine/test/dummy/config/initializers/backtrace_silencers.rb +0 -8
  103. data/spec/dummy_engine/test/dummy/config/initializers/cookies_serializer.rb +0 -5
  104. data/spec/dummy_engine/test/dummy/config/initializers/filter_parameter_logging.rb +0 -6
  105. data/spec/dummy_engine/test/dummy/config/initializers/inflections.rb +0 -17
  106. data/spec/dummy_engine/test/dummy/config/initializers/mime_types.rb +0 -5
  107. data/spec/dummy_engine/test/dummy/config/initializers/session_store.rb +0 -5
  108. data/spec/dummy_engine/test/dummy/config/initializers/wrap_parameters.rb +0 -16
  109. data/spec/dummy_engine/test/dummy/config/locales/en.yml +0 -23
  110. data/spec/dummy_engine/test/dummy/config/routes.rb +0 -58
  111. data/spec/dummy_engine/test/dummy/config/secrets.yml +0 -22
  112. data/spec/examples/connection_adapter_examples.rb +0 -44
  113. data/spec/examples/generic_adapter_custom_configuration_example.rb +0 -93
  114. data/spec/examples/generic_adapter_examples.rb +0 -164
  115. data/spec/examples/schema_adapter_examples.rb +0 -239
  116. data/spec/integration/apartment_rake_integration_spec.rb +0 -107
  117. data/spec/integration/query_caching_spec.rb +0 -83
  118. data/spec/integration/use_within_an_engine_spec.rb +0 -28
  119. data/spec/schemas/v1.rb +0 -15
  120. data/spec/schemas/v2.rb +0 -41
  121. data/spec/schemas/v3.rb +0 -47
  122. data/spec/spec_helper.rb +0 -63
  123. data/spec/support/apartment_helpers.rb +0 -47
  124. data/spec/support/capybara_sessions.rb +0 -15
  125. data/spec/support/config.rb +0 -13
  126. data/spec/support/contexts.rb +0 -54
  127. data/spec/support/requirements.rb +0 -48
  128. data/spec/support/setup.rb +0 -46
  129. data/spec/tasks/apartment_rake_spec.rb +0 -124
  130. data/spec/tenant_spec.rb +0 -194
  131. data/spec/unit/config_spec.rb +0 -111
  132. data/spec/unit/elevators/domain_spec.rb +0 -33
  133. data/spec/unit/elevators/first_subdomain_spec.rb +0 -26
  134. data/spec/unit/elevators/generic_spec.rb +0 -55
  135. data/spec/unit/elevators/host_hash_spec.rb +0 -33
  136. data/spec/unit/elevators/host_spec.rb +0 -89
  137. data/spec/unit/elevators/subdomain_spec.rb +0 -77
  138. data/spec/unit/migrator_spec.rb +0 -78
  139. data/spec/unit/reloader_spec.rb +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 885fc6d80e82f41a7e4a0ab4c6aea81859c39ffbc35454394430168c3d82a378
4
- data.tar.gz: 92df175aec9c46552f8d0d68d154fcc89adc3ae40512c3e2ce9ad1c7d891371e
3
+ metadata.gz: f2dcb62b879236f8522148786e9ef35dc10b59be747f5e4cd0e9b0d515add9de
4
+ data.tar.gz: 33cc4f75fbe99a1ec29e6370cee9a83cd9a8ee59b0657ada7ce6f2b0cbd87524
5
5
  SHA512:
6
- metadata.gz: 60a71a3fa90048da38722e43eb60a8345303aa3131127300a9cab4224f9aeaf6e655022b4fce3c1bb49a9f687b98e79949e29a562bac366bed477aae905d6df7
7
- data.tar.gz: 54836f74344304e196678b1d23c07ad9e293f7630651418d9a792cc0d066c619b792e1226426314d8f4969c2e8902321f1f8d47616d0c813f3e09e67b522f99e
6
+ metadata.gz: 3b4fbc349f3d9198c85914667335662c7d3bc8c64a1c6fa0397b417e4d451247eeb18e44a6949d2f79647889a20542f64c0b25de2d700cb9cf6459e2a2120d80
7
+ data.tar.gz: 4b5057afb829f973b0234a04136f0f470b38f7b52e2dc96ccdc7d88f70c1d949c06b5195d41da5a74b6460cd23c5a3b0393dc38be21eb5d69d66caa3507746b6
@@ -4,6 +4,11 @@ inherit_gem:
4
4
  perx-rubocop:
5
5
  - default.yml
6
6
 
7
+ AllCops:
8
+ Exclude:
9
+ - 'gemfiles/**/*.gemfile'
10
+ - 'gemfiles/vendor/**/*'
11
+
7
12
  Style/WordArray:
8
13
  Exclude:
9
14
  - spec/schemas/**/*.rb
@@ -21,7 +21,7 @@ Metrics/BlockLength:
21
21
  # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
22
22
  # URISchemes: http, https
23
23
  Metrics/LineLength:
24
- Max: 237
24
+ Max: 200
25
25
 
26
26
  # Offense count: 4
27
27
  # Configuration parameters: CountComments, ExcludedMethods.
@@ -1,4 +1,5 @@
1
1
  ---
2
2
  tracker: github
3
+ issue_placement: beginning
3
4
  project_id:
4
5
  - rails-on-services/apartment
@@ -5,12 +5,11 @@ services:
5
5
  - docker
6
6
  rvm:
7
7
  - jruby-9.2.11.0
8
- - 2.1.9
9
- - 2.2.9
10
- - 2.3.6
11
- - 2.4.3
12
- - 2.5.0
13
- - 2.6.2
8
+ - 2.4.10
9
+ - 2.5.8
10
+ - 2.6.6
11
+ - 2.7.1
12
+ - jruby-head
14
13
  - ruby-head
15
14
 
16
15
  branches:
@@ -19,48 +18,32 @@ branches:
19
18
  - development
20
19
 
21
20
  gemfile:
22
- - gemfiles/rails_4_2.gemfile
23
21
  - gemfiles/rails_5_0.gemfile
24
22
  - gemfiles/rails_5_1.gemfile
25
23
  - gemfiles/rails_5_2.gemfile
26
24
  - gemfiles/rails_6_0.gemfile
27
25
  - gemfiles/rails_master.gemfile
26
+
28
27
  bundler_args: --without local
29
28
  before_install:
30
29
  - sudo /etc/init.d/mysql stop
31
30
  - sudo /etc/init.d/postgresql stop
32
31
  - docker-compose up -d
33
- - gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
34
- - gem uninstall bundler -v '>= 2' -x || true
35
- - gem install bundler -v '< 2'
32
+
36
33
  env:
37
34
  RUBY_GC_MALLOC_LIMIT: 90000000
38
35
  RUBY_GC_HEAP_FREE_SLOTS: 200000
39
36
  jobs:
37
+ include:
38
+ - name: Rubocop Lint
39
+ script: gem install perx-rubocop && rubocop
40
+
40
41
  allow_failures:
41
42
  - rvm: ruby-head
43
+ - rvm: jruby-head
42
44
  - gemfile: gemfiles/rails_master.gemfile
43
- - rvm: 2.2.9
44
- gemfile: gemfiles/rails_5_2.gemfile
45
- # JRuby does not provide support for anything below rails 5
46
- - rvm: jruby-9.2.11.0
47
- gemfile: gemfiles/rails_4_2.gemfile
48
45
  exclude:
49
- - rvm: 2.1.9
50
- gemfile: gemfiles/rails_5_0.gemfile
51
- - rvm: 2.1.9
52
- gemfile: gemfiles/rails_5_1.gemfile
53
- - rvm: 2.1.9
54
- gemfile: gemfiles/rails_5_2.gemfile
55
- - rvm: 2.1.9
56
- gemfile: gemfiles/rails_6_0.gemfile
57
- - rvm: 2.1.9
58
- gemfile: gemfiles/rails_master.gemfile
59
- - rvm: 2.2.9
60
- gemfile: gemfiles/rails_6_0.gemfile
61
- - rvm: 2.3.6
62
- gemfile: gemfiles/rails_6_0.gemfile
63
- - rvm: 2.4.3
46
+ - rvm: 2.4.10
64
47
  gemfile: gemfiles/rails_6_0.gemfile
65
48
  fast_finish: true
66
49
  cache: bundler
data/Appraisals CHANGED
@@ -1,18 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- appraise 'rails-4-2' do
4
- gem 'rails', '~> 4.2.0'
5
- platforms :ruby do
6
- gem 'pg', '< 1.0.0'
7
- gem 'mysql2', '~> 0.4.0'
8
- end
9
- platforms :jruby do
10
- gem 'activerecord-jdbc-adapter', '~> 1.3'
11
- gem 'activerecord-jdbcpostgresql-adapter', '~> 1.3'
12
- gem 'activerecord-jdbcmysql-adapter', '~> 1.3'
13
- end
14
- end
15
-
16
3
  appraise 'rails-5-0' do
17
4
  gem 'rails', '~> 5.0.0'
18
5
  platforms :ruby do
@@ -47,14 +34,14 @@ appraise 'rails-5-2' do
47
34
  end
48
35
 
49
36
  appraise 'rails-6-0' do
50
- gem 'rails', '~> 6.0.0.rc1'
37
+ gem 'rails', '~> 6.0.0'
51
38
  platforms :ruby do
52
39
  gem 'sqlite3', '~> 1.4'
53
40
  end
54
41
  platforms :jruby do
55
- gem 'activerecord-jdbc-adapter', '~> 60.0.rc1'
56
- gem 'activerecord-jdbcpostgresql-adapter', '~> 60.0.rc1'
57
- gem 'activerecord-jdbcmysql-adapter', '~> 60.0.rc1'
42
+ gem 'activerecord-jdbc-adapter', '~> 60.0'
43
+ gem 'activerecord-jdbcpostgresql-adapter', '~> 60.0'
44
+ gem 'activerecord-jdbcmysql-adapter', '~> 60.0'
58
45
  end
59
46
  end
60
47
 
data/Gemfile CHANGED
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source 'http://rubygems.org'
3
+ source 'https://my.diffend.io/protect/gems'
4
4
 
5
5
  gemspec
6
6
 
7
- gem 'rails', '>= 3.1.2'
8
7
  gem 'perx-rubocop', '~> 0.0.3'
8
+ gem 'rails', '>= 3.1.2'
9
9
 
10
10
  group :local do
11
11
  gem 'guard-rspec', '~> 4.2'
data/Guardfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # A sample Guardfile
2
4
  # More info at https://github.com/guard/guard#readme
3
5
 
@@ -5,7 +7,7 @@ guard :rspec do
5
7
  watch(%r{^spec/.+_spec\.rb$})
6
8
  watch(%r{^lib/apartment/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
7
9
  watch(%r{^lib/apartment/(.+)\.rb$}) { |m| "spec/integration/#{m[1]}_spec.rb" }
8
- watch('spec/spec_helper.rb') { "spec" }
10
+ watch('spec/spec_helper.rb') { 'spec' }
9
11
 
10
12
  # # Rails example
11
13
  # watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
data/HISTORY.md CHANGED
@@ -1,3 +1,93 @@
1
+ # 2.7.1
2
+
3
+ # Enhancements
4
+
5
+ - N/a
6
+
7
+ # Bugfixes
8
+
9
+ - [Resolves #82] Enhanced db:create breaks plugin compatibility - <https://github.com/rails-on-services/apartment/pull/83>
10
+
11
+ # Chores
12
+
13
+ - Update rake version in development
14
+ - Renamed gemspec to match gem name
15
+
16
+ # 2.7.0
17
+
18
+ # Enhancements
19
+
20
+ - [Resolves #70] Rake tasks define methods on main - <https://github.com/rails-on-services/apartment/pull/75>
21
+ - Add database and schema to active record log. Configurable, defaults to false to keep current behavior - <https://github.com/rails-on-services/apartment/pull/55>
22
+
23
+ # Bugfixes
24
+
25
+ - [Fixes #61] Fix database create in mysql - <https://github.com/rails-on-services/apartment/pull/76>
26
+
27
+ # Chores
28
+
29
+ - Remove deprecated tld_length config option: tld_length was removed in influitive#309, this configuration option doesn't have any effect now. - <https://github.com/rails-on-services/apartment/pull/72>
30
+ - Using [diffend.io proxy](https://diffend.io) to safely check required gems
31
+ - Added [story branch](https://github.com/story-branch/story_branch) to the configuration
32
+ - Using travis-ci to run rubocop as well, replacing github actions: github actions do not work in fork's PRs
33
+
34
+ # 2.6.1
35
+
36
+ ## Enhancements
37
+ - N/a
38
+
39
+ ## Bugfixes
40
+ - [Resolves influitive#607] Avoid early connection
41
+ - <https://github.com/rails-on-services/apartment/pull/39>
42
+ - <https://github.com/rails-on-services/apartment/pull/53>
43
+ - <https://github.com/rails-on-services/apartment/pull/51>
44
+ - [Resolves #52] Rake db:setup tries to seed non existent tenant - <https://github.com/rails-on-services/apartment/pull/54>
45
+ - [Resolves #56] DB rollback uses second last migration - <https://github.com/rails-on-services/apartment/pull/57>
46
+
47
+ ## Chores
48
+ - N/a
49
+
50
+ # 2.6.0
51
+
52
+ ## Enhancements
53
+ - [Resolves #26] Support configuration for skip checking of schema existence before switching
54
+ - [Resolves #41] Add tenant info to console boot
55
+
56
+ ## Bugfixes
57
+ - [Resolves #37] Custom Console deprecation warning
58
+ - [Resolves #42] After switch callback not working with nil argument
59
+
60
+ ## Chores
61
+ - Updated github actions configuration to run on PRs as well
62
+
63
+ # 2.5.0
64
+
65
+ ## Enhancements
66
+ - [Resolves #6] Adds support for rails 6.1
67
+ - [Resolves #27] Adds support to not rely on set search path, but instead prepends the schema name to the table name when using postgresql with schemas.
68
+ - [Resolves #35] Cache keys are now tenant dependent
69
+
70
+ ## Bugfixes
71
+ - [Resolves #27] Manually switching connection between read and write forgets the schema
72
+
73
+ ## Chores
74
+ - [Resolves #31] Add latest ruby versions to test matrix
75
+
76
+ # 2.4.0
77
+
78
+ ## Enhancements
79
+ - [Resolves #14] Add console info about tenants and fast switches #17
80
+ - Skip init if we're running webpacker:compile #18
81
+
82
+ ## Bugfixes
83
+ - Don't crash when no database connection is present #16
84
+ - Rescuing ActiveRecord::NoDatabaseError when dropping tenants #19
85
+
86
+ ## Chores
87
+ - Rakefile should use mysql port from configuration #5
88
+ - [Resolves #9] Cleanup rubocop todo #8
89
+ - Cleanup travis matrix #23
90
+
1
91
  # 2.3.0
2
92
  * January 3, 2020
3
93
 
data/README.md CHANGED
@@ -324,6 +324,20 @@ Apartment.configure do |config|
324
324
  end
325
325
  ```
326
326
 
327
+ ### Skip tenant schema check
328
+
329
+ This is configurable by setting: `tenant_presence_check`. It defaults to true
330
+ in order to maintain the original gem behavior. This is only checked when using one of the PostgreSQL adapters.
331
+ The original gem behavior, when running `switch` would look for the existence of the schema before switching. This adds an extra query on every context switch. While in the default simple scenarios this is a valid check, in high volume platforms this adds some unnecessary overhead which can be detected in some other ways on the application level.
332
+
333
+ Setting this configuration value to `false` will disable the schema presence check before trying to switch the context.
334
+
335
+ ```ruby
336
+ Apartment.configure do |config|
337
+ tenant_presence_check = false
338
+ end
339
+ ```
340
+
327
341
  ### Excluding models
328
342
 
329
343
  If you have some models that should always access the 'public' tenant, you can specify this by configuring Apartment using `Apartment.configure`. This will yield a config object for you. You can set excluded models like so:
@@ -341,17 +355,30 @@ Rails will always access the 'public' tenant when accessing these models, but no
341
355
 
342
356
  ### Postgresql Schemas
343
357
 
344
- ## Providing a Different default_schema
358
+ #### Alternative: Creating new schemas by using raw SQL dumps
359
+
360
+ Apartment can be forced to use raw SQL dumps insted of `schema.rb` for creating new schemas. Use this when you are using some extra features in postgres that can't be represented in `schema.rb`, like materialized views etc.
361
+
362
+ This only applies while using postgres adapter and `config.use_schemas` is set to `true`.
363
+ (Note: this option doesn't use `db/structure.sql`, it creates SQL dump by executing `pg_dump`)
364
+
365
+ Enable this option with:
366
+
367
+ ```ruby
368
+ config.use_sql = true
369
+ ```
370
+
371
+ ### Providing a Different default_tenant
345
372
 
346
373
  By default, ActiveRecord will use `"$user", public` as the default `schema_search_path`. This can be modified if you wish to use a different default schema be setting:
347
374
 
348
375
  ```ruby
349
- config.default_schema = "some_other_schema"
376
+ config.default_tenant = "some_other_schema"
350
377
  ```
351
378
 
352
379
  With that set, all excluded models will use this schema as the table name prefix instead of `public` and `reset` on `Apartment::Tenant` will return to this schema as well.
353
380
 
354
- ## Persistent Schemas
381
+ ### Persistent Schemas
355
382
 
356
383
  Apartment will normally just switch the `schema_search_path` whole hog to the one passed in. This can lead to problems if you want other schemas to always be searched as well. Enter `persistent_schemas`. You can configure a list of other schemas that will always remain in the search path, while the default gets swapped out:
357
384
 
@@ -419,7 +446,7 @@ schema_search_path: "public,shared_extensions"
419
446
  ...
420
447
  ```
421
448
 
422
- This would be for a config with `default_schema` set to `public` and `persistent_schemas` set to `['shared_extensions']`. **Note**: This only works on Heroku with [Rails 4.1+](https://devcenter.heroku.com/changelog-items/426). For apps that use older Rails versions hosted on Heroku, the only way to properly setup is to start with a fresh PostgreSQL instance:
449
+ This would be for a config with `default_tenant` set to `public` and `persistent_schemas` set to `['shared_extensions']`. **Note**: This only works on Heroku with [Rails 4.1+](https://devcenter.heroku.com/changelog-items/426). For apps that use older Rails versions hosted on Heroku, the only way to properly setup is to start with a fresh PostgreSQL instance:
423
450
 
424
451
  1. Append `?schema_search_path=public,hstore` to your `DATABASE_URL` environment variable, by this you don't have to revise the `database.yml` file (which is impossible since Heroku regenerates a completely different and immutable `database.yml` of its own on each deploy)
425
452
  2. Run `heroku pg:psql` from your command line
@@ -457,18 +484,6 @@ schema in the `search_path` at all times. We won't be able to do this though unt
457
484
  also contain the tenanted tables, which is an open issue with no real milestone to be completed.
458
485
  Happy to accept PR's on the matter.
459
486
 
460
- #### Alternative: Creating new schemas by using raw SQL dumps
461
-
462
- Apartment can be forced to use raw SQL dumps insted of `schema.rb` for creating new schemas. Use this when you are using some extra features in postgres that can't be represented in `schema.rb`, like materialized views etc.
463
-
464
- This only applies while using postgres adapter and `config.use_schemas` is set to `true`.
465
- (Note: this option doesn't use `db/structure.sql`, it creates SQL dump by executing `pg_dump`)
466
-
467
- Enable this option with:
468
- ```ruby
469
- config.use_sql = true
470
- ```
471
-
472
487
  ### Managing Migrations
473
488
 
474
489
  In order to migrate all of your tenants (or postgresql schemas) you need to provide a list
data/Rakefile CHANGED
@@ -1,19 +1,25 @@
1
- require 'bundler' rescue 'You must `gem install bundler` and `bundle install` to run rake tasks'
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require 'bundler'
5
+ rescue StandardError
6
+ 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
2
8
  Bundler.setup
3
9
  Bundler::GemHelper.install_tasks
4
10
 
5
11
  require 'appraisal'
6
12
 
7
- require "rspec"
8
- require "rspec/core/rake_task"
13
+ require 'rspec'
14
+ require 'rspec/core/rake_task'
9
15
 
10
- RSpec::Core::RakeTask.new(:spec => %w{ db:copy_credentials db:test:prepare }) do |spec|
11
- spec.pattern = "spec/**/*_spec.rb"
16
+ RSpec::Core::RakeTask.new(spec: %w[db:copy_credentials db:test:prepare]) do |spec|
17
+ spec.pattern = 'spec/**/*_spec.rb'
12
18
  # spec.rspec_opts = '--order rand:47078'
13
19
  end
14
20
 
15
21
  namespace :spec do
16
- [:tasks, :unit, :adapters, :integration].each do |type|
22
+ %i[tasks unit adapters integration].each do |type|
17
23
  RSpec::Core::RakeTask.new(type => :spec) do |spec|
18
24
  spec.pattern = "spec/#{type}/**/*_spec.rb"
19
25
  end
@@ -27,11 +33,11 @@ task :console do
27
33
  Pry.start
28
34
  end
29
35
 
30
- task :default => :spec
36
+ task default: :spec
31
37
 
32
38
  namespace :db do
33
39
  namespace :test do
34
- task :prepare => %w{postgres:drop_db postgres:build_db mysql:drop_db mysql:build_db}
40
+ task prepare: %w[postgres:drop_db postgres:build_db mysql:drop_db mysql:build_db]
35
41
  end
36
42
 
37
43
  desc "copy sample database credential files over if real files don't exist"
@@ -40,29 +46,33 @@ namespace :db do
40
46
  apartment_db_file = 'spec/config/database.yml'
41
47
  rails_db_file = 'spec/dummy/config/database.yml'
42
48
 
43
- FileUtils.copy(apartment_db_file + '.sample', apartment_db_file, :verbose => true) unless File.exists?(apartment_db_file)
44
- FileUtils.copy(rails_db_file + '.sample', rails_db_file, :verbose => true) unless File.exists?(rails_db_file)
49
+ FileUtils.copy(apartment_db_file + '.sample', apartment_db_file, verbose: true) unless File.exist?(apartment_db_file)
50
+ FileUtils.copy(rails_db_file + '.sample', rails_db_file, verbose: true) unless File.exist?(rails_db_file)
45
51
  end
46
52
  end
47
53
 
48
54
  namespace :postgres do
49
55
  require 'active_record'
50
- require "#{File.join(File.dirname(__FILE__), 'spec', 'support', 'config')}"
56
+ require File.join(File.dirname(__FILE__), 'spec', 'support', 'config').to_s
51
57
 
52
58
  desc 'Build the PostgreSQL test databases'
53
59
  task :build_db do
54
60
  params = []
55
- params << "-E UTF8"
61
+ params << '-E UTF8'
56
62
  params << pg_config['database']
57
63
  params << "-U#{pg_config['username']}"
58
64
  params << "-h#{pg_config['host']}" if pg_config['host']
59
65
  params << "-p#{pg_config['port']}" if pg_config['port']
60
- %x{ createdb #{params.join(' ')} } rescue "test db already exists"
66
+ begin
67
+ `createdb #{params.join(' ')}`
68
+ rescue StandardError
69
+ 'test db already exists'
70
+ end
61
71
  ActiveRecord::Base.establish_connection pg_config
62
72
  migrate
63
73
  end
64
74
 
65
- desc "drop the PostgreSQL test database"
75
+ desc 'drop the PostgreSQL test database'
66
76
  task :drop_db do
67
77
  puts "dropping database #{pg_config['database']}"
68
78
  params = []
@@ -70,14 +80,13 @@ namespace :postgres do
70
80
  params << "-U#{pg_config['username']}"
71
81
  params << "-h#{pg_config['host']}" if pg_config['host']
72
82
  params << "-p#{pg_config['port']}" if pg_config['port']
73
- %x{ dropdb #{params.join(' ')} }
83
+ `dropdb #{params.join(' ')}`
74
84
  end
75
-
76
85
  end
77
86
 
78
87
  namespace :mysql do
79
88
  require 'active_record'
80
- require "#{File.join(File.dirname(__FILE__), 'spec', 'support', 'config')}"
89
+ require File.join(File.dirname(__FILE__), 'spec', 'support', 'config').to_s
81
90
 
82
91
  desc 'Build the MySQL test databases'
83
92
  task :build_db do
@@ -86,12 +95,16 @@ namespace :mysql do
86
95
  params << "-u #{my_config['username']}" if my_config['username']
87
96
  params << "-p#{my_config['password']}" if my_config['password']
88
97
  params << "--port #{my_config['port']}" if my_config['port']
89
- %x{ mysqladmin #{params.join(' ')} create #{my_config['database']} } rescue "test db already exists"
98
+ begin
99
+ `mysqladmin #{params.join(' ')} create #{my_config['database']}`
100
+ rescue StandardError
101
+ 'test db already exists'
102
+ end
90
103
  ActiveRecord::Base.establish_connection my_config
91
104
  migrate
92
105
  end
93
106
 
94
- desc "drop the MySQL test database"
107
+ desc 'drop the MySQL test database'
95
108
  task :drop_db do
96
109
  puts "dropping database #{my_config['database']}"
97
110
  params = []
@@ -99,12 +112,11 @@ namespace :mysql do
99
112
  params << "-u #{my_config['username']}" if my_config['username']
100
113
  params << "-p#{my_config['password']}" if my_config['password']
101
114
  params << "--port #{my_config['port']}" if my_config['port']
102
- %x{ mysqladmin #{params.join(' ')} drop #{my_config['database']} --force}
115
+ `mysqladmin #{params.join(' ')} drop #{my_config['database']} --force`
103
116
  end
104
-
105
117
  end
106
118
 
107
- # TODO clean this up
119
+ # TODO: clean this up
108
120
  def config
109
121
  Apartment::Test.config['connections']
110
122
  end