From a18a31ea068000acbd459a3053878cc53fc0bf39 Mon Sep 17 00:00:00 2001 From: Semyon Pupkov Date: Sat, 16 Nov 2019 16:43:23 +0500 Subject: [PATCH] Add allow_missing_migration_files option This PR allow use allow_missing_migration_files in config ref to sequel commit https://github.com/jeremyevans/sequel/commit/b64b812a45d8aa657edc0e605c8c733a3f0b3cab --- README.md | 3 +++ lib/sequel_rails/migrations.rb | 17 ++++++++++++---- spec/lib/sequel_rails/migrations_spec.rb | 25 ++++++++++++++++++++---- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 2e7530d..b945115 100644 --- a/README.md +++ b/README.md @@ -166,6 +166,9 @@ You can configure some options with the usual rails mechanism, in # Allowed options: :sql, :ruby. config.sequel.schema_format = :sql + # Allowed options: true, false, default false + config.sequel.allow_missing_migration_files = true + # Whether to dump the schema after successful migrations. # Defaults to false in production and test, true otherwise. config.sequel.schema_dump = true diff --git a/lib/sequel_rails/migrations.rb b/lib/sequel_rails/migrations.rb index d3a6dcd..807c7d2 100644 --- a/lib/sequel_rails/migrations.rb +++ b/lib/sequel_rails/migrations.rb @@ -6,6 +6,7 @@ class << self def migrate(version = nil) opts = {} opts[:target] = version.to_i if version + opts[:allow_missing_migration_files] = !!SequelRails.configuration.allow_missing_migration_files if migrations_dir.directory? ::Sequel::Migrator.run(::Sequel::Model.db, migrations_dir, opts) @@ -43,8 +44,6 @@ def migrations_dir def current_migration return unless available_migrations? - migrator_class = ::Sequel::Migrator.send(:migrator_class, migrations_dir) - migrator = migrator_class.new ::Sequel::Model.db, migrations_dir if migrator.respond_to?(:applied_migrations) migrator.applied_migrations.last elsif migrator.respond_to?(:current_version) @@ -55,8 +54,6 @@ def current_migration def previous_migration return unless available_migrations? - migrator_class = ::Sequel::Migrator.send(:migrator_class, migrations_dir) - migrator = migrator_class.new ::Sequel::Model.db, migrations_dir if migrator.respond_to?(:applied_migrations) migrator.applied_migrations[-2] || '0' elsif migrator.respond_to?(:current_version) @@ -67,6 +64,18 @@ def previous_migration def available_migrations? File.exist?(migrations_dir) && Dir[File.join(migrations_dir, '*')].any? end + + def migrator + return @migrator if defined?(@migrator) + + migrator_class = ::Sequel::Migrator.send(:migrator_class, migrations_dir) + + @migrator = migrator_class.new( + ::Sequel::Model.db, + migrations_dir, + allow_missing_migration_files: !!SequelRails.configuration.allow_missing_migration_files + ) + end end end end diff --git a/spec/lib/sequel_rails/migrations_spec.rb b/spec/lib/sequel_rails/migrations_spec.rb index 95297fb..743822c 100644 --- a/spec/lib/sequel_rails/migrations_spec.rb +++ b/spec/lib/sequel_rails/migrations_spec.rb @@ -8,23 +8,40 @@ describe ".#{migration_method}" do let(:result) { double(:result) } context 'with no version specified' do - let(:opts) { {} } it 'runs migrations using Sequel::Migrator' do expect(::Sequel::Migrator).to receive(:run).with( - db, Rails.root.join('db/migrate'), opts + db, Rails.root.join('db/migrate'), allow_missing_migration_files: false ).and_return result expect(described_class.send(migration_method)).to be(result) end end context 'with version specified' do - let(:opts) { { :target => 1 } } it 'runs migrations using Sequel::Migrator' do expect(::Sequel::Migrator).to receive(:run).with( - db, Rails.root.join('db/migrate'), opts + db, Rails.root.join('db/migrate'), allow_missing_migration_files: false, target: 1 ).and_return result expect(described_class.send(migration_method, 1)).to be(result) end end + + context 'with allow_missing_migration_files' do + around do |ex| + option = SequelRails.configuration.allow_missing_migration_files + SequelRails.configuration.allow_missing_migration_files = true + + ex.run + + SequelRails.configuration.allow_missing_migration_files = option + end + + it 'runs migrations using Sequel::Migrator' do + expect(::Sequel::Migrator).to receive(:run).with( + db, Rails.root.join('db/migrate'), allow_missing_migration_files: true + ).and_return result + + described_class.send(migration_method) + end + end end end