ros-apartment 2.3.0.alpha2 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/.rubocop-linter.yml +22 -0
  3. data/.pryrc +5 -3
  4. data/.rubocop.yml +21 -0
  5. data/.rubocop_todo.yml +29 -0
  6. data/.story_branch.yml +4 -0
  7. data/.travis.yml +15 -36
  8. data/Appraisals +16 -29
  9. data/Gemfile +4 -1
  10. data/Guardfile +3 -1
  11. data/HISTORY.md +7 -0
  12. data/README.md +80 -39
  13. data/Rakefile +45 -23
  14. data/apartment.gemspec +33 -25
  15. data/gemfiles/rails_4_2.gemfile +12 -10
  16. data/gemfiles/rails_5_0.gemfile +2 -1
  17. data/gemfiles/rails_5_1.gemfile +2 -1
  18. data/gemfiles/rails_5_2.gemfile +2 -1
  19. data/gemfiles/rails_6_0.gemfile +6 -5
  20. data/gemfiles/rails_master.gemfile +2 -1
  21. data/lib/apartment.rb +36 -11
  22. data/lib/apartment/active_record/connection_handling.rb +17 -0
  23. data/lib/apartment/active_record/internal_metadata.rb +11 -0
  24. data/lib/apartment/active_record/schema_migration.rb +13 -0
  25. data/lib/apartment/adapters/abstract_adapter.rb +50 -45
  26. data/lib/apartment/adapters/abstract_jdbc_adapter.rb +4 -3
  27. data/lib/apartment/adapters/jdbc_mysql_adapter.rb +3 -3
  28. data/lib/apartment/adapters/jdbc_postgresql_adapter.rb +20 -13
  29. data/lib/apartment/adapters/mysql2_adapter.rb +10 -9
  30. data/lib/apartment/adapters/postgis_adapter.rb +3 -2
  31. data/lib/apartment/adapters/postgresql_adapter.rb +55 -27
  32. data/lib/apartment/adapters/sqlite3_adapter.rb +18 -8
  33. data/lib/apartment/console.rb +35 -3
  34. data/lib/apartment/custom_console.rb +42 -0
  35. data/lib/apartment/deprecation.rb +2 -1
  36. data/lib/apartment/elevators/domain.rb +4 -3
  37. data/lib/apartment/elevators/first_subdomain.rb +3 -2
  38. data/lib/apartment/elevators/generic.rb +4 -3
  39. data/lib/apartment/elevators/host.rb +6 -1
  40. data/lib/apartment/elevators/host_hash.rb +6 -2
  41. data/lib/apartment/elevators/subdomain.rb +9 -5
  42. data/lib/apartment/migrator.rb +4 -3
  43. data/lib/apartment/model.rb +27 -0
  44. data/lib/apartment/railtie.rb +26 -15
  45. data/lib/apartment/reloader.rb +2 -1
  46. data/lib/apartment/tasks/enhancements.rb +4 -6
  47. data/lib/apartment/tenant.rb +19 -9
  48. data/lib/apartment/version.rb +3 -1
  49. data/lib/generators/apartment/install/install_generator.rb +4 -3
  50. data/lib/generators/apartment/install/templates/apartment.rb +3 -2
  51. data/lib/tasks/apartment.rake +24 -19
  52. metadata +79 -256
  53. data/spec/adapters/jdbc_mysql_adapter_spec.rb +0 -19
  54. data/spec/adapters/jdbc_postgresql_adapter_spec.rb +0 -41
  55. data/spec/adapters/mysql2_adapter_spec.rb +0 -59
  56. data/spec/adapters/postgresql_adapter_spec.rb +0 -61
  57. data/spec/adapters/sqlite3_adapter_spec.rb +0 -83
  58. data/spec/apartment_spec.rb +0 -11
  59. data/spec/config/database.yml.sample +0 -49
  60. data/spec/dummy/Rakefile +0 -7
  61. data/spec/dummy/app/controllers/application_controller.rb +0 -6
  62. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  63. data/spec/dummy/app/models/company.rb +0 -3
  64. data/spec/dummy/app/models/user.rb +0 -3
  65. data/spec/dummy/app/views/application/index.html.erb +0 -1
  66. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  67. data/spec/dummy/config.ru +0 -4
  68. data/spec/dummy/config/application.rb +0 -49
  69. data/spec/dummy/config/boot.rb +0 -11
  70. data/spec/dummy/config/database.yml.sample +0 -44
  71. data/spec/dummy/config/environment.rb +0 -5
  72. data/spec/dummy/config/environments/development.rb +0 -28
  73. data/spec/dummy/config/environments/production.rb +0 -51
  74. data/spec/dummy/config/environments/test.rb +0 -34
  75. data/spec/dummy/config/initializers/apartment.rb +0 -4
  76. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  77. data/spec/dummy/config/initializers/inflections.rb +0 -10
  78. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  79. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  80. data/spec/dummy/config/initializers/session_store.rb +0 -8
  81. data/spec/dummy/config/locales/en.yml +0 -5
  82. data/spec/dummy/config/routes.rb +0 -3
  83. data/spec/dummy/db/migrate/20110613152810_create_dummy_models.rb +0 -39
  84. data/spec/dummy/db/migrate/20111202022214_create_table_books.rb +0 -14
  85. data/spec/dummy/db/migrate/20180415260934_create_public_tokens.rb +0 -13
  86. data/spec/dummy/db/schema.rb +0 -55
  87. data/spec/dummy/db/seeds.rb +0 -5
  88. data/spec/dummy/db/seeds/import.rb +0 -5
  89. data/spec/dummy/public/404.html +0 -26
  90. data/spec/dummy/public/422.html +0 -26
  91. data/spec/dummy/public/500.html +0 -26
  92. data/spec/dummy/public/favicon.ico +0 -0
  93. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  94. data/spec/dummy/script/rails +0 -6
  95. data/spec/dummy_engine/.gitignore +0 -8
  96. data/spec/dummy_engine/Gemfile +0 -15
  97. data/spec/dummy_engine/Rakefile +0 -34
  98. data/spec/dummy_engine/bin/rails +0 -12
  99. data/spec/dummy_engine/config/initializers/apartment.rb +0 -51
  100. data/spec/dummy_engine/dummy_engine.gemspec +0 -24
  101. data/spec/dummy_engine/lib/dummy_engine.rb +0 -4
  102. data/spec/dummy_engine/lib/dummy_engine/engine.rb +0 -4
  103. data/spec/dummy_engine/lib/dummy_engine/version.rb +0 -3
  104. data/spec/dummy_engine/test/dummy/Rakefile +0 -6
  105. data/spec/dummy_engine/test/dummy/config.ru +0 -4
  106. data/spec/dummy_engine/test/dummy/config/application.rb +0 -22
  107. data/spec/dummy_engine/test/dummy/config/boot.rb +0 -5
  108. data/spec/dummy_engine/test/dummy/config/database.yml +0 -25
  109. data/spec/dummy_engine/test/dummy/config/environment.rb +0 -5
  110. data/spec/dummy_engine/test/dummy/config/environments/development.rb +0 -37
  111. data/spec/dummy_engine/test/dummy/config/environments/production.rb +0 -78
  112. data/spec/dummy_engine/test/dummy/config/environments/test.rb +0 -39
  113. data/spec/dummy_engine/test/dummy/config/initializers/assets.rb +0 -8
  114. data/spec/dummy_engine/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  115. data/spec/dummy_engine/test/dummy/config/initializers/cookies_serializer.rb +0 -3
  116. data/spec/dummy_engine/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  117. data/spec/dummy_engine/test/dummy/config/initializers/inflections.rb +0 -16
  118. data/spec/dummy_engine/test/dummy/config/initializers/mime_types.rb +0 -4
  119. data/spec/dummy_engine/test/dummy/config/initializers/session_store.rb +0 -3
  120. data/spec/dummy_engine/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  121. data/spec/dummy_engine/test/dummy/config/locales/en.yml +0 -23
  122. data/spec/dummy_engine/test/dummy/config/routes.rb +0 -56
  123. data/spec/dummy_engine/test/dummy/config/secrets.yml +0 -22
  124. data/spec/examples/connection_adapter_examples.rb +0 -42
  125. data/spec/examples/generic_adapter_custom_configuration_example.rb +0 -95
  126. data/spec/examples/generic_adapter_examples.rb +0 -163
  127. data/spec/examples/schema_adapter_examples.rb +0 -234
  128. data/spec/integration/apartment_rake_integration_spec.rb +0 -107
  129. data/spec/integration/query_caching_spec.rb +0 -81
  130. data/spec/integration/use_within_an_engine_spec.rb +0 -28
  131. data/spec/schemas/v1.rb +0 -16
  132. data/spec/schemas/v2.rb +0 -43
  133. data/spec/schemas/v3.rb +0 -49
  134. data/spec/spec_helper.rb +0 -61
  135. data/spec/support/apartment_helpers.rb +0 -43
  136. data/spec/support/capybara_sessions.rb +0 -15
  137. data/spec/support/config.rb +0 -10
  138. data/spec/support/contexts.rb +0 -52
  139. data/spec/support/requirements.rb +0 -35
  140. data/spec/support/setup.rb +0 -46
  141. data/spec/tasks/apartment_rake_spec.rb +0 -129
  142. data/spec/tenant_spec.rb +0 -190
  143. data/spec/unit/config_spec.rb +0 -112
  144. data/spec/unit/elevators/domain_spec.rb +0 -32
  145. data/spec/unit/elevators/first_subdomain_spec.rb +0 -24
  146. data/spec/unit/elevators/generic_spec.rb +0 -54
  147. data/spec/unit/elevators/host_hash_spec.rb +0 -32
  148. data/spec/unit/elevators/host_spec.rb +0 -89
  149. data/spec/unit/elevators/subdomain_spec.rb +0 -76
  150. data/spec/unit/migrator_spec.rb +0 -77
  151. data/spec/unit/reloader_spec.rb +0 -24
@@ -1,16 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Add new inflection rules using the following format. Inflections
4
- # are locale specific, and you may define rules for as many different
5
- # locales as you wish. All of these examples are active by default:
6
- # ActiveSupport::Inflector.inflections(:en) do |inflect|
7
- # inflect.plural /^(ox)$/i, '\1en'
8
- # inflect.singular /^(ox)en/i, '\1'
9
- # inflect.irregular 'person', 'people'
10
- # inflect.uncountable %w( fish sheep )
11
- # end
12
-
13
- # These inflection rules are supported but not enabled by default:
14
- # ActiveSupport::Inflector.inflections(:en) do |inflect|
15
- # inflect.acronym 'RESTful'
16
- # end
@@ -1,4 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Add new mime types for use in respond_to blocks:
4
- # Mime::Type.register "text/richtext", :rtf
@@ -1,3 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- Rails.application.config.session_store :cookie_store, key: '_dummy_session'
@@ -1,14 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # This file contains settings for ActionController::ParamsWrapper which
4
- # is enabled by default.
5
-
6
- # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
- ActiveSupport.on_load(:action_controller) do
8
- wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
9
- end
10
-
11
- # To enable root element in JSON for ActiveRecord objects.
12
- # ActiveSupport.on_load(:active_record) do
13
- # self.include_root_in_json = true
14
- # end
@@ -1,23 +0,0 @@
1
- # Files in the config/locales directory are used for internationalization
2
- # and are automatically loaded by Rails. If you want to use locales other
3
- # than English, add the necessary files in this directory.
4
- #
5
- # To use the locales, use `I18n.t`:
6
- #
7
- # I18n.t 'hello'
8
- #
9
- # In views, this is aliased to just `t`:
10
- #
11
- # <%= t('hello') %>
12
- #
13
- # To use a different locale, set it with `I18n.locale`:
14
- #
15
- # I18n.locale = :es
16
- #
17
- # This would use the information in config/locales/es.yml.
18
- #
19
- # To learn more, please read the Rails Internationalization guide
20
- # available at http://guides.rubyonrails.org/i18n.html.
21
-
22
- en:
23
- hello: "Hello world"
@@ -1,56 +0,0 @@
1
- Rails.application.routes.draw do
2
- # The priority is based upon order of creation: first created -> highest priority.
3
- # See how all your routes lay out with "rake routes".
4
-
5
- # You can have the root of your site routed with "root"
6
- # root 'welcome#index'
7
-
8
- # Example of regular route:
9
- # get 'products/:id' => 'catalog#view'
10
-
11
- # Example of named route that can be invoked with purchase_url(id: product.id)
12
- # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
13
-
14
- # Example resource route (maps HTTP verbs to controller actions automatically):
15
- # resources :products
16
-
17
- # Example resource route with options:
18
- # resources :products do
19
- # member do
20
- # get 'short'
21
- # post 'toggle'
22
- # end
23
- #
24
- # collection do
25
- # get 'sold'
26
- # end
27
- # end
28
-
29
- # Example resource route with sub-resources:
30
- # resources :products do
31
- # resources :comments, :sales
32
- # resource :seller
33
- # end
34
-
35
- # Example resource route with more complex sub-resources:
36
- # resources :products do
37
- # resources :comments
38
- # resources :sales do
39
- # get 'recent', on: :collection
40
- # end
41
- # end
42
-
43
- # Example resource route with concerns:
44
- # concern :toggleable do
45
- # post 'toggle'
46
- # end
47
- # resources :posts, concerns: :toggleable
48
- # resources :photos, concerns: :toggleable
49
-
50
- # Example resource route within a namespace:
51
- # namespace :admin do
52
- # # Directs /admin/products/* to Admin::ProductsController
53
- # # (app/controllers/admin/products_controller.rb)
54
- # resources :products
55
- # end
56
- end
@@ -1,22 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Your secret key is used for verifying the integrity of signed cookies.
4
- # If you change this key, all old signed cookies will become invalid!
5
-
6
- # Make sure the secret is at least 30 characters and all random,
7
- # no regular words or you'll be exposed to dictionary attacks.
8
- # You can use `rake secret` to generate a secure secret key.
9
-
10
- # Make sure the secrets in this file are kept private
11
- # if you're sharing your code publicly.
12
-
13
- development:
14
- secret_key_base: bb62b819b585a74e69c797f9d03d5a004d8fe82a8e7a7da6fa2f7923030713b7b087c12cc7a918e71073c38afb343f7223d22ba3f1b223b7e76dbf8d5b65fa2c
15
-
16
- test:
17
- secret_key_base: 67945d3b189c71dffef98de2bb7c14d6fb059679c115ca3cddf65c88babe130afe4d583560d0e308b017dd76ce305bef4159d876de9fd893952d9cbf269c8476
18
-
19
- # Do not keep production secrets in the repository,
20
- # instead read values from the environment.
21
- production:
22
- secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for "a connection based apartment adapter" do
4
- include Apartment::Spec::AdapterRequirements
5
-
6
- let(:default_tenant){ subject.switch{ ActiveRecord::Base.connection.current_database } }
7
-
8
- describe "#init" do
9
- after do
10
- # Apartment::Tenant.init creates per model connection.
11
- # Remove the connection after testing not to unintentionally keep the connection across tests.
12
- Apartment.excluded_models.each do |excluded_model|
13
- excluded_model.constantize.remove_connection
14
- end
15
- end
16
-
17
- it "should process model exclusions" do
18
- Apartment.configure do |config|
19
- config.excluded_models = ["Company"]
20
- end
21
- Apartment::Tenant.init
22
-
23
- expect(Company.connection.object_id).not_to eq(ActiveRecord::Base.connection.object_id)
24
- end
25
- end
26
-
27
- describe "#drop" do
28
- it "should raise an error for unknown database" do
29
- expect {
30
- subject.drop 'unknown_database'
31
- }.to raise_error(Apartment::TenantNotFound)
32
- end
33
- end
34
-
35
- describe "#switch!" do
36
- it "should raise an error if database is invalid" do
37
- expect {
38
- subject.switch! 'unknown_database'
39
- }.to raise_error(Apartment::TenantNotFound)
40
- end
41
- end
42
- end
@@ -1,95 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for "a generic apartment adapter able to handle custom configuration" do
4
-
5
- let(:custom_tenant_name) { 'test_tenantwwww' }
6
- let(:db) { |example| example.metadata[:database]}
7
- let(:custom_tenant_names) do
8
- {
9
- custom_tenant_name => get_custom_db_conf
10
- }
11
- end
12
-
13
- before do
14
- Apartment.tenant_names = custom_tenant_names
15
- Apartment.with_multi_server_setup = true
16
- end
17
-
18
- after do
19
- Apartment.with_multi_server_setup = false
20
- end
21
-
22
- context "database key taken from specific config" do
23
-
24
- let(:expected_args) { get_custom_db_conf }
25
-
26
- describe "#create" do
27
- it "should establish_connection with the separate connection with expected args" do
28
- expect(Apartment::Adapters::AbstractAdapter::SeparateDbConnectionHandler).to receive(:establish_connection).with(expected_args).and_call_original
29
-
30
- # because we dont have another server to connect to it errors
31
- # what matters is establish_connection receives proper args
32
- expect { subject.create(custom_tenant_name) }.to raise_error(Apartment::TenantExists)
33
- end
34
- end
35
-
36
- describe "#drop" do
37
- it "should establish_connection with the separate connection with expected args" do
38
- expect(Apartment::Adapters::AbstractAdapter::SeparateDbConnectionHandler).to receive(:establish_connection).with(expected_args).and_call_original
39
-
40
- # because we dont have another server to connect to it errors
41
- # what matters is establish_connection receives proper args
42
- expect { subject.drop(custom_tenant_name) }.to raise_error(Apartment::TenantNotFound)
43
- end
44
- end
45
- end
46
-
47
- context "database key from tenant name" do
48
-
49
- let(:expected_args) {
50
- get_custom_db_conf.tap {|args| args.delete(:database) }
51
- }
52
-
53
- describe "#switch!" do
54
-
55
- it "should connect to new db" do
56
- expect(Apartment).to receive(:establish_connection) do |args|
57
- db_name = args.delete(:database)
58
-
59
- expect(args).to eq expected_args
60
- expect(db_name).to match custom_tenant_name
61
-
62
- # we only need to check args, then we short circuit
63
- # in order to avoid the mess due to the `establish_connection` override
64
- raise ActiveRecord::ActiveRecordError
65
- end
66
-
67
- expect { subject.switch!(custom_tenant_name) }.to raise_error(Apartment::TenantNotFound)
68
- end
69
- end
70
- end
71
-
72
- def specific_connection
73
- {
74
- postgresql: {
75
- adapter: 'postgresql',
76
- database: 'override_database',
77
- password: 'override_password',
78
- username: 'overridepostgres'
79
- },
80
- mysql: {
81
- adapter: 'mysql2',
82
- database: 'override_database',
83
- username: 'root'
84
- },
85
- sqlite: {
86
- adapter: 'sqlite3',
87
- database: 'override_database'
88
- }
89
- }
90
- end
91
-
92
- def get_custom_db_conf
93
- specific_connection[db.to_sym].with_indifferent_access
94
- end
95
- end
@@ -1,163 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for "a generic apartment adapter" do
4
- include Apartment::Spec::AdapterRequirements
5
-
6
- before {
7
- Apartment.prepend_environment = false
8
- Apartment.append_environment = false
9
- }
10
-
11
- describe "#init" do
12
- it "should not retain a connection after railtie" do
13
- # this test should work on rails >= 4, the connection pool code is
14
- # completely different for 3.2 so we'd have to have a messy conditional..
15
- unless Rails::VERSION::MAJOR < 4
16
- ActiveRecord::Base.connection_pool.disconnect!
17
-
18
- Apartment::Railtie.config.to_prepare_blocks.map(&:call)
19
-
20
- num_available_connections = Apartment.connection_class.connection_pool
21
- .instance_variable_get(:@available)
22
- .instance_variable_get(:@queue)
23
- .size
24
-
25
- expect(num_available_connections).to eq(1)
26
- end
27
- end
28
- end
29
-
30
- #
31
- # Creates happen already in our before_filter
32
- #
33
- describe "#create" do
34
-
35
- it "should create the new databases" do
36
- expect(tenant_names).to include(db1)
37
- expect(tenant_names).to include(db2)
38
- end
39
-
40
- it "should load schema.rb to new schema" do
41
- subject.switch(db1) do
42
- expect(connection.tables).to include('companies')
43
- end
44
- end
45
-
46
- it "should yield to block if passed and reset" do
47
- subject.drop(db2) # so we don't get errors on creation
48
-
49
- @count = 0 # set our variable so its visible in and outside of blocks
50
-
51
- subject.create(db2) do
52
- @count = User.count
53
- expect(subject.current).to eq(db2)
54
- User.create
55
- end
56
-
57
- expect(subject.current).not_to eq(db2)
58
-
59
- subject.switch(db2){ expect(User.count).to eq(@count + 1) }
60
- end
61
-
62
- it "should raise error when the schema.rb is missing unless Apartment.use_sql is set to true" do
63
- next if Apartment.use_sql
64
-
65
- subject.drop(db1)
66
- begin
67
- Dir.mktmpdir do |tmpdir|
68
- Apartment.database_schema_file = "#{tmpdir}/schema.rb"
69
- expect {
70
- subject.create(db1)
71
- }.to raise_error(Apartment::FileNotFound)
72
- end
73
- ensure
74
- Apartment.remove_instance_variable(:@database_schema_file)
75
- end
76
- end
77
- end
78
-
79
- describe "#drop" do
80
- it "should remove the db" do
81
- subject.drop db1
82
- expect(tenant_names).not_to include(db1)
83
- end
84
- end
85
-
86
- describe "#switch!" do
87
- it "should connect to new db" do
88
- subject.switch!(db1)
89
- expect(subject.current).to eq(db1)
90
- end
91
-
92
- it "should reset connection if database is nil" do
93
- subject.switch!
94
- expect(subject.current).to eq(default_tenant)
95
- end
96
-
97
- it "should raise an error if database is invalid" do
98
- expect {
99
- subject.switch! 'unknown_database'
100
- }.to raise_error(Apartment::ApartmentError)
101
- end
102
- end
103
-
104
- describe "#switch" do
105
- it "connects and resets the tenant" do
106
- subject.switch(db1) do
107
- expect(subject.current).to eq(db1)
108
- end
109
- expect(subject.current).to eq(default_tenant)
110
- end
111
-
112
- # We're often finding when using Apartment in tests, the `current` (ie the previously connect to db)
113
- # gets dropped, but switch will try to return to that db in a test. We should just reset if it doesn't exist
114
- it "should not throw exception if current is no longer accessible" do
115
- subject.switch!(db2)
116
-
117
- expect {
118
- subject.switch(db1){ subject.drop(db2) }
119
- }.to_not raise_error
120
- end
121
- end
122
-
123
- describe "#reset" do
124
- it "should reset connection" do
125
- subject.switch!(db1)
126
- subject.reset
127
- expect(subject.current).to eq(default_tenant)
128
- end
129
- end
130
-
131
- describe "#current" do
132
- it "should return the current db name" do
133
- subject.switch!(db1)
134
- expect(subject.current).to eq(db1)
135
- end
136
- end
137
-
138
- describe "#each" do
139
- it "iterates over each tenant by default" do
140
- result = []
141
- Apartment.tenant_names = [db2, db1]
142
-
143
- subject.each do |tenant|
144
- result << tenant
145
- expect(subject.current).to eq(tenant)
146
- end
147
-
148
- expect(result).to eq([db2, db1])
149
- end
150
-
151
- it "iterates over the given tenants" do
152
- result = []
153
- Apartment.tenant_names = [db2]
154
-
155
- subject.each([db2]) do |tenant|
156
- result << tenant
157
- expect(subject.current).to eq(tenant)
158
- end
159
-
160
- expect(result).to eq([db2])
161
- end
162
- end
163
- end