ros-apartment 2.3.0.alpha2 → 2.6.1

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 (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
- # encoding: UTF-8
2
- # This file is auto-generated from the current state of the database. Instead
3
- # of editing this file, please use the migrations feature of Active Record to
4
- # incrementally modify your database, and then regenerate this schema definition.
5
- #
6
- # Note that this schema.rb definition is the authoritative source for your
7
- # database schema. If you need to create the application database on another
8
- # system, you should be using db:schema:load, not running all the migrations
9
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
- # you'll amass, the slower it'll run and the greater likelihood for issues).
11
- #
12
- # It's strongly recommended to check this file into your version control system.
13
-
14
- ActiveRecord::Schema.define(:version => 0) do
15
-
16
- end
@@ -1,43 +0,0 @@
1
- # encoding: UTF-8
2
- # This file is auto-generated from the current state of the database. Instead
3
- # of editing this file, please use the migrations feature of Active Record to
4
- # incrementally modify your database, and then regenerate this schema definition.
5
- #
6
- # Note that this schema.rb definition is the authoritative source for your
7
- # database schema. If you need to create the application database on another
8
- # system, you should be using db:schema:load, not running all the migrations
9
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
- # you'll amass, the slower it'll run and the greater likelihood for issues).
11
- #
12
- # It's strongly recommended to check this file into your version control system.
13
-
14
- ActiveRecord::Schema.define(:version => 20110613152810) do
15
-
16
- create_table "companies", :force => true do |t|
17
- t.boolean "dummy"
18
- t.string "database"
19
- end
20
-
21
- create_table "delayed_jobs", :force => true do |t|
22
- t.integer "priority", :default => 0
23
- t.integer "attempts", :default => 0
24
- t.text "handler"
25
- t.text "last_error"
26
- t.datetime "run_at"
27
- t.datetime "locked_at"
28
- t.datetime "failed_at"
29
- t.string "locked_by"
30
- t.datetime "created_at"
31
- t.datetime "updated_at"
32
- t.string "queue"
33
- end
34
-
35
- add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
36
-
37
- create_table "users", :force => true do |t|
38
- t.string "name"
39
- t.datetime "birthdate"
40
- t.string "sex"
41
- end
42
-
43
- end
@@ -1,49 +0,0 @@
1
- # encoding: UTF-8
2
- # This file is auto-generated from the current state of the database. Instead
3
- # of editing this file, please use the migrations feature of Active Record to
4
- # incrementally modify your database, and then regenerate this schema definition.
5
- #
6
- # Note that this schema.rb definition is the authoritative source for your
7
- # database schema. If you need to create the application database on another
8
- # system, you should be using db:schema:load, not running all the migrations
9
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
- # you'll amass, the slower it'll run and the greater likelihood for issues).
11
- #
12
- # It's strongly recommended to check this file into your version control system.
13
-
14
- ActiveRecord::Schema.define(:version => 20111202022214) do
15
-
16
- create_table "books", :force => true do |t|
17
- t.string "name"
18
- t.integer "pages"
19
- t.datetime "published"
20
- end
21
-
22
- create_table "companies", :force => true do |t|
23
- t.boolean "dummy"
24
- t.string "database"
25
- end
26
-
27
- create_table "delayed_jobs", :force => true do |t|
28
- t.integer "priority", :default => 0
29
- t.integer "attempts", :default => 0
30
- t.text "handler"
31
- t.text "last_error"
32
- t.datetime "run_at"
33
- t.datetime "locked_at"
34
- t.datetime "failed_at"
35
- t.string "locked_by"
36
- t.datetime "created_at"
37
- t.datetime "updated_at"
38
- t.string "queue"
39
- end
40
-
41
- add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
42
-
43
- create_table "users", :force => true do |t|
44
- t.string "name"
45
- t.datetime "birthdate"
46
- t.string "sex"
47
- end
48
-
49
- end
@@ -1,61 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
-
3
- # Configure Rails Environment
4
- ENV["RAILS_ENV"] = "test"
5
-
6
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
7
-
8
- # Loading dummy applications affects table_name of each excluded models
9
- # defined in `spec/dummy/config/initializers/apartment.rb`.
10
- # To make them pristine, we need to execute below lines.
11
- Apartment.excluded_models.each do |model|
12
- klass = model.constantize
13
-
14
- Apartment.connection_class.remove_connection(klass)
15
- klass.clear_all_connections!
16
- klass.reset_table_name
17
- end
18
-
19
- require "rspec/rails"
20
- require 'capybara/rspec'
21
- require 'capybara/rails'
22
-
23
- begin
24
- require 'pry'
25
- silence_warnings{ IRB = Pry }
26
- rescue LoadError
27
- end
28
-
29
- ActionMailer::Base.delivery_method = :test
30
- ActionMailer::Base.perform_deliveries = true
31
- ActionMailer::Base.default_url_options[:host] = "test.com"
32
-
33
- Rails.backtrace_cleaner.remove_silencers!
34
-
35
- # Load support files
36
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
37
-
38
- RSpec.configure do |config|
39
-
40
- config.include RSpec::Integration::CapybaraSessions, type: :request
41
- config.include Apartment::Spec::Setup
42
-
43
- # Somewhat brutal hack so that rails 4 postgres extensions don't modify this file
44
- config.after(:all) do
45
- `git checkout -- spec/dummy/db/schema.rb`
46
- end
47
-
48
- # rspec-rails 3 will no longer automatically infer an example group's spec type
49
- # from the file location. You can explicitly opt-in to the feature using this
50
- # config option.
51
- # To explicitly tag specs without using automatic inference, set the `:type`
52
- # metadata manually:
53
- #
54
- # describe ThingsController, :type => :controller do
55
- # # Equivalent to being in spec/controllers
56
- # end
57
- config.infer_spec_type_from_file_location!
58
- end
59
-
60
- # Load shared examples, must happen after configure for RSpec 3
61
- Dir["#{File.dirname(__FILE__)}/examples/**/*.rb"].each { |f| require f }
@@ -1,43 +0,0 @@
1
- module Apartment
2
- module Test
3
-
4
- extend self
5
-
6
- def reset
7
- Apartment.excluded_models = nil
8
- Apartment.use_schemas = nil
9
- Apartment.seed_after_create = nil
10
- Apartment.default_schema = nil
11
- end
12
-
13
- def next_db
14
- @x ||= 0
15
- "db%d" % @x += 1
16
- end
17
-
18
- def drop_schema(schema)
19
- ActiveRecord::Base.connection.execute("DROP SCHEMA IF EXISTS #{schema} CASCADE") rescue true
20
- end
21
-
22
- # Use this if you don't want to import schema.rb etc... but need the postgres schema to exist
23
- # basically for speed purposes
24
- def create_schema(schema)
25
- ActiveRecord::Base.connection.execute("CREATE SCHEMA #{schema}")
26
- end
27
-
28
- def load_schema(version = 3)
29
- file = File.expand_path("../../schemas/v#{version}.rb", __FILE__)
30
-
31
- silence_warnings{ load(file) }
32
- end
33
-
34
- def migrate
35
- ActiveRecord::Migrator.migrate(Rails.root + ActiveRecord::Migrator.migrations_path)
36
- end
37
-
38
- def rollback
39
- ActiveRecord::Migrator.rollback(Rails.root + ActiveRecord::Migrator.migrations_path)
40
- end
41
-
42
- end
43
- end
@@ -1,15 +0,0 @@
1
- module RSpec
2
- module Integration
3
- module CapybaraSessions
4
-
5
- def in_new_session(&block)
6
- yield new_session
7
- end
8
-
9
- def new_session
10
- Capybara::Session.new(Capybara.current_driver, Capybara.app)
11
- end
12
-
13
- end
14
- end
15
- end
@@ -1,10 +0,0 @@
1
- require 'yaml'
2
-
3
- module Apartment
4
- module Test
5
-
6
- def self.config
7
- @config ||= YAML.load(ERB.new(IO.read('spec/config/database.yml')).result)
8
- end
9
- end
10
- end
@@ -1,52 +0,0 @@
1
- # Some shared contexts for specs
2
-
3
- shared_context "with default schema", :default_schema => true do
4
- let(:default_schema){ Apartment::Test.next_db }
5
-
6
- before do
7
- Apartment::Test.create_schema(default_schema)
8
- Apartment.default_schema = default_schema
9
- end
10
-
11
- after do
12
- # resetting default_schema so we can drop and any further resets won't try to access droppped schema
13
- Apartment.default_schema = nil
14
- Apartment::Test.drop_schema(default_schema)
15
- end
16
- end
17
-
18
- # Some default setup for elevator specs
19
- shared_context "elevators", elevator: true do
20
- let(:company1) { mock_model(Company, database: db1).as_null_object }
21
- let(:company2) { mock_model(Company, database: db2).as_null_object }
22
-
23
- let(:api) { Apartment::Tenant }
24
-
25
- before do
26
- Apartment.reset # reset all config
27
- Apartment.seed_after_create = false
28
- Apartment.use_schemas = true
29
- api.reload!(config)
30
- api.create(db1)
31
- api.create(db2)
32
- end
33
-
34
- after do
35
- api.drop(db1)
36
- api.drop(db2)
37
- end
38
- end
39
-
40
- shared_context "persistent_schemas", :persistent_schemas => true do
41
- let(:persistent_schemas){ ['hstore', 'postgis'] }
42
-
43
- before do
44
- persistent_schemas.map{|schema| subject.create(schema) }
45
- Apartment.persistent_schemas = persistent_schemas
46
- end
47
-
48
- after do
49
- Apartment.persistent_schemas = []
50
- persistent_schemas.map{|schema| subject.drop(schema) }
51
- end
52
- end
@@ -1,35 +0,0 @@
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
- extend ActiveSupport::Concern
11
-
12
- included do
13
- before do
14
- subject.create(db1)
15
- subject.create(db2)
16
- end
17
-
18
- after do
19
- # Reset before dropping (can't drop a db you're connected to)
20
- subject.reset
21
-
22
- # sometimes we manually drop these schemas in testing, don't care if we can't drop, hence rescue
23
- subject.drop(db1) rescue true
24
- subject.drop(db2) rescue true
25
- end
26
- end
27
-
28
- %w{subject tenant_names default_tenant}.each do |method|
29
- define_method method do
30
- raise "You must define a `#{method}` method in your host group"
31
- end unless defined?(method)
32
- end
33
- end
34
- end
35
- end
@@ -1,46 +0,0 @@
1
- module Apartment
2
- module Spec
3
- module Setup
4
-
5
- def self.included(base)
6
- base.instance_eval do
7
- let(:db1){ Apartment::Test.next_db }
8
- let(:db2){ Apartment::Test.next_db }
9
- let(:connection){ ActiveRecord::Base.connection }
10
-
11
- # This around ensures that we run these hooks before and after
12
- # any before/after hooks defined in individual tests
13
- # Otherwise these actually get run after test defined hooks
14
- around(:each) do |example|
15
-
16
- def config
17
- db = RSpec.current_example.metadata.fetch(:database, :postgresql)
18
-
19
- Apartment::Test.config['connections'][db.to_s].symbolize_keys
20
- end
21
-
22
- # before
23
- Apartment::Tenant.reload!(config)
24
- ActiveRecord::Base.establish_connection config
25
-
26
- example.run
27
-
28
- # after
29
- Rails.configuration.database_configuration = {}
30
- ActiveRecord::Base.clear_all_connections!
31
-
32
- Apartment.excluded_models.each do |model|
33
- klass = model.constantize
34
-
35
- Apartment.connection_class.remove_connection(klass)
36
- klass.clear_all_connections!
37
- klass.reset_table_name
38
- end
39
- Apartment.reset
40
- Apartment::Tenant.reload!
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,129 +0,0 @@
1
- require 'spec_helper'
2
- require 'rake'
3
- require 'apartment/migrator'
4
- require 'apartment/tenant'
5
-
6
- describe "apartment rake tasks" do
7
-
8
- before do
9
- @rake = Rake::Application.new
10
- Rake.application = @rake
11
- load 'tasks/apartment.rake'
12
- # stub out rails tasks
13
- Rake::Task.define_task('db:migrate')
14
- Rake::Task.define_task('db:seed')
15
- Rake::Task.define_task('db:rollback')
16
- Rake::Task.define_task('db:migrate:up')
17
- Rake::Task.define_task('db:migrate:down')
18
- Rake::Task.define_task('db:migrate:redo')
19
- end
20
-
21
- after do
22
- Rake.application = nil
23
- ENV['VERSION'] = nil # linux users reported env variable carrying on between tests
24
- end
25
-
26
- after(:all) do
27
- Apartment::Test.load_schema
28
- end
29
-
30
- let(:version){ '1234' }
31
-
32
- context 'database migration' do
33
-
34
- let(:tenant_names){ 3.times.map{ Apartment::Test.next_db } }
35
- let(:tenant_count){ tenant_names.length }
36
-
37
- before do
38
- allow(Apartment).to receive(:tenant_names).and_return tenant_names
39
- end
40
-
41
- describe "apartment:migrate" do
42
- before do
43
- allow(ActiveRecord::Migrator).to receive(:migrate) # don't care about this
44
- end
45
-
46
- it "should migrate public and all multi-tenant dbs" do
47
- expect(Apartment::Migrator).to receive(:migrate).exactly(tenant_count).times
48
- @rake['apartment:migrate'].invoke
49
- end
50
- end
51
-
52
- describe "apartment:migrate:up" do
53
-
54
- context "without a version" do
55
- before do
56
- ENV['VERSION'] = nil
57
- end
58
-
59
- it "requires a version to migrate to" do
60
- expect{
61
- @rake['apartment:migrate:up'].invoke
62
- }.to raise_error("VERSION is required")
63
- end
64
- end
65
-
66
- context "with version" do
67
-
68
- before do
69
- ENV['VERSION'] = version
70
- end
71
-
72
- it "migrates up to a specific version" do
73
- expect(Apartment::Migrator).to receive(:run).with(:up, anything, version.to_i).exactly(tenant_count).times
74
- @rake['apartment:migrate:up'].invoke
75
- end
76
- end
77
- end
78
-
79
- describe "apartment:migrate:down" do
80
-
81
- context "without a version" do
82
- before do
83
- ENV['VERSION'] = nil
84
- end
85
-
86
- it "requires a version to migrate to" do
87
- expect{
88
- @rake['apartment:migrate:down'].invoke
89
- }.to raise_error("VERSION is required")
90
- end
91
- end
92
-
93
- context "with version" do
94
-
95
- before do
96
- ENV['VERSION'] = version
97
- end
98
-
99
- it "migrates up to a specific version" do
100
- expect(Apartment::Migrator).to receive(:run).with(:down, anything, version.to_i).exactly(tenant_count).times
101
- @rake['apartment:migrate:down'].invoke
102
- end
103
- end
104
- end
105
-
106
- describe "apartment:rollback" do
107
- let(:step){ '3' }
108
-
109
- it "should rollback dbs" do
110
- expect(Apartment::Migrator).to receive(:rollback).exactly(tenant_count).times
111
- @rake['apartment:rollback'].invoke
112
- end
113
-
114
- it "should rollback dbs STEP amt" do
115
- expect(Apartment::Migrator).to receive(:rollback).with(anything, step.to_i).exactly(tenant_count).times
116
- ENV['STEP'] = step
117
- @rake['apartment:rollback'].invoke
118
- end
119
- end
120
-
121
- describe "apartment:drop" do
122
- it "should migrate public and all multi-tenant dbs" do
123
- expect(Apartment::Tenant).to receive(:drop).exactly(tenant_count).times
124
- @rake['apartment:drop'].invoke
125
- end
126
- end
127
-
128
- end
129
- end