Class: Sql::Migrations::Rails::Railtie
- Inherits:
-
Rails::Railtie
- Object
- Rails::Railtie
- Sql::Migrations::Rails::Railtie
- Defined in:
- lib/sql/migrations/rails/railtie.rb
Instance Method Summary collapse
- #delete_extra_migrations! ⇒ Object
- #generate_tmp_migrations! ⇒ Object
-
#last_update ⇒ Object
Data about the previous files state This is needed for rebuild only modified temporary migrations.
- #modified_sql_migrations ⇒ Object
- #sql_migrations ⇒ Object
- #tmp_migrations_path ⇒ Object
- #update_data_file! ⇒ Object
- #update_rails_migration_paths! ⇒ Object
Instance Method Details
#delete_extra_migrations! ⇒ Object
43 44 45 |
# File 'lib/sql/migrations/rails/railtie.rb', line 43 def delete_extra_migrations! tmp_migrations_path.children.select { |x| sql_migrations.keys.exclude?(x.basename('.rb')) }.each(&:delete) end |
#generate_tmp_migrations! ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/sql/migrations/rails/railtie.rb', line 47 def generate_tmp_migrations! template = File.read(File.join(File.dirname(__FILE__), 'templates/migration.rb.tt')) modified_sql_migrations.each do |name, paths| erb_hash = { migration_class_name: name.to_s.split('_', 2).second.camelize, up_migration: paths.find { |x| x.to_s.end_with?('.up.sql') }, down_migration: paths.find { |x| x.to_s.end_with?('.down.sql') } } erb_result = ERB.new(template, nil, '-').result_with_hash(erb_hash) Pathname(tmp_migrations_path.join("#{name}.rb")).write(erb_result) end end |
#last_update ⇒ Object
Data about the previous files state This is needed for rebuild only modified temporary migrations
19 20 21 22 23 24 |
# File 'lib/sql/migrations/rails/railtie.rb', line 19 def last_update @last_update ||= begin file = ::Rails.root.join(Sql::Migrations::Rails::LAST_UPDATE_FILE).tap { |x| x.dirname.mkpath } file.file? ? JSON.parse(file.read).transform_keys(&:to_sym) : { timestamp: '0', files: {} } end end |
#modified_sql_migrations ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/sql/migrations/rails/railtie.rb', line 35 def modified_sql_migrations @modified_sql_migrations ||= sql_migrations.select do |name, paths| last_update[:files][name.to_s] != paths.map { |x| x.to_s.split('.')[-2] } || paths.map { |x| [x.mtime, x.ctime] }.flatten.map(&:utc) .max.strftime('%Y%m%d%H%M%S') > last_update[:timestamp] end end |
#sql_migrations ⇒ Object
30 31 32 33 |
# File 'lib/sql/migrations/rails/railtie.rb', line 30 def sql_migrations @sql_migrations ||= ::Rails.root.join('db/migrate').glob('*.{up,down}.sql') .group_by { |x| x.basename('.up.sql').basename('.down.sql') } end |
#tmp_migrations_path ⇒ Object
26 27 28 |
# File 'lib/sql/migrations/rails/railtie.rb', line 26 def tmp_migrations_path @tmp_migrations_path ||= ::Rails.root.join(Sql::Migrations::Rails::TMP_MIGRATIONS_FOLDER).tap(&:mkpath) end |
#update_data_file! ⇒ Object
61 62 63 64 65 66 67 68 |
# File 'lib/sql/migrations/rails/railtie.rb', line 61 def update_data_file! data = { timestamp: Time.now.utc.strftime('%Y%m%d%H%M%S'), files: sql_migrations.transform_values { |x1| x1.map { |x2| x2.to_s.split('.')[-2] } } }.to_json ::Rails.root.join(Sql::Migrations::Rails::LAST_UPDATE_FILE).write(data) end |
#update_rails_migration_paths! ⇒ Object
70 71 72 |
# File 'lib/sql/migrations/rails/railtie.rb', line 70 def update_rails_migration_paths! ::Rails.application.config.paths['db/migrate'] << Sql::Migrations::Rails::TMP_MIGRATIONS_FOLDER end |