Class: ConflictFreeSchema::Database::SchemaVersionFiles
- Inherits:
-
Object
- Object
- ConflictFreeSchema::Database::SchemaVersionFiles
- Defined in:
- lib/conflict_free_schema/database/schema_version_files.rb
Constant Summary collapse
- SCHEMA_DIRECTORY =
'db/schema_migrations'
- MIGRATION_DIRECTORIES =
%w[db/migrate db/post_migrate].freeze
- MIGRATION_VERSION_GLOB =
'20[0-9][0-9]*'
Class Method Summary collapse
- .connection ⇒ Object
- .find_version_filenames ⇒ Object
- .find_versions_from_migration_files ⇒ Object
- .init_schema_directory ⇒ Object
- .load_all ⇒ Object
- .migration_directories ⇒ Object
- .schema_directory ⇒ Object
- .touch_all(versions_from_database) ⇒ Object
Class Method Details
.connection ⇒ Object
73 74 75 |
# File 'lib/conflict_free_schema/database/schema_version_files.rb', line 73 def self.connection ActiveRecord::Base.connection end |
.find_version_filenames ⇒ Object
50 51 52 |
# File 'lib/conflict_free_schema/database/schema_version_files.rb', line 50 def self.find_version_filenames Dir.glob(MIGRATION_VERSION_GLOB, base: schema_directory) end |
.find_versions_from_migration_files ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/conflict_free_schema/database/schema_version_files.rb', line 58 def self.find_versions_from_migration_files migration_directories.each_with_object([]) do |directory, migration_versions| directory_migrations = Dir.glob(directory) directory_versions = directory_migrations.map do |migration| item = Pathname.new(migration) next if item.directory? next unless item.basename.fnmatch?(MIGRATION_VERSION_GLOB) item.basename.to_s.split('_').first end.compact migration_versions.concat(directory_versions) end end |
.init_schema_directory ⇒ Object
54 55 56 |
# File 'lib/conflict_free_schema/database/schema_version_files.rb', line 54 def self.init_schema_directory FileUtils.mkdir_p(schema_directory) end |
.load_all ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/conflict_free_schema/database/schema_version_files.rb', line 29 def self.load_all init_schema_directory version_filenames = find_version_filenames return if version_filenames.empty? values = version_filenames.map { |vf| "('#{connection.quote_string(vf)}')" } connection.execute(<<~SQL) INSERT INTO schema_migrations (version) VALUES #{values.join(',')} ON CONFLICT DO NOTHING SQL end |
.migration_directories ⇒ Object
46 47 48 |
# File 'lib/conflict_free_schema/database/schema_version_files.rb', line 46 def self.migration_directories @migration_directories ||= MIGRATION_DIRECTORIES.map { |dir| Rails.root.join(dir, '**', '*') } end |
.schema_directory ⇒ Object
42 43 44 |
# File 'lib/conflict_free_schema/database/schema_version_files.rb', line 42 def self.schema_directory @schema_directory ||= Rails.root.join(SCHEMA_DIRECTORY) end |
.touch_all(versions_from_database) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/conflict_free_schema/database/schema_version_files.rb', line 12 def self.touch_all(versions_from_database) init_schema_directory versions_from_migration_files = find_versions_from_migration_files version_filepaths = find_version_filenames.map { |f| schema_directory.join(f) } FileUtils.rm(version_filepaths) versions_to_create = versions_from_database & versions_from_migration_files versions_to_create.each do |version| version_filepath = schema_directory.join(version) File.open(version_filepath, 'w') do |file| file << Digest::SHA256.hexdigest(version) end end end |