Module: StrongMigrations::SafeMethods
- Included in:
- Checker
- Defined in:
- lib/strong_migrations/safe_methods.rb
Instance Method Summary collapse
-
#disable_transaction ⇒ Object
hard to commit at right time when reverting so just commit at start.
- #in_transaction? ⇒ Boolean
- #safe_add_check_constraint(table, expression, add_options, validate_options) ⇒ Object
- #safe_add_foreign_key(from_table, to_table, options) ⇒ Object
- #safe_add_foreign_key_code(from_table, to_table, add_code, validate_code) ⇒ Object
-
#safe_add_index(table, columns, options) ⇒ Object
TODO check if invalid index with expected name exists and remove if needed.
- #safe_add_reference(table, reference, options) ⇒ Object
- #safe_by_default_method?(method) ⇒ Boolean
- #safe_change_column_null(add_code, validate_code, change_args, remove_code) ⇒ Object
- #safe_remove_index(table, options) ⇒ Object
Instance Method Details
#disable_transaction ⇒ Object
hard to commit at right time when reverting so just commit at start
114 115 116 117 118 119 |
# File 'lib/strong_migrations/safe_methods.rb', line 114 def disable_transaction if in_transaction? && !transaction_disabled @migration.connection.commit_db_transaction self.transaction_disabled = true end end |
#in_transaction? ⇒ Boolean
121 122 123 |
# File 'lib/strong_migrations/safe_methods.rb', line 121 def in_transaction? @migration.connection.open_transactions > 0 end |
#safe_add_check_constraint(table, expression, add_options, validate_options) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/strong_migrations/safe_methods.rb', line 70 def safe_add_check_constraint(table, expression, , ) @migration.reversible do |dir| dir.up do @migration.add_check_constraint(table, expression, **) disable_transaction @migration.validate_check_constraint(table, **) end dir.down do @migration.remove_check_constraint(table, expression, **) end end end |
#safe_add_foreign_key(from_table, to_table, options) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/strong_migrations/safe_methods.rb', line 42 def safe_add_foreign_key(from_table, to_table, ) @migration.reversible do |dir| dir.up do @migration.add_foreign_key(from_table, to_table, **.merge(validate: false)) disable_transaction @migration.validate_foreign_key(from_table, to_table) end dir.down do @migration.remove_foreign_key(from_table, to_table) end end end |
#safe_add_foreign_key_code(from_table, to_table, add_code, validate_code) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/strong_migrations/safe_methods.rb', line 55 def safe_add_foreign_key_code(from_table, to_table, add_code, validate_code) @migration.reversible do |dir| dir.up do @migration.safety_assured do @migration.execute(add_code) disable_transaction @migration.execute(validate_code) end end dir.down do @migration.remove_foreign_key(from_table, to_table) end end end |
#safe_add_index(table, columns, options) ⇒ Object
TODO check if invalid index with expected name exists and remove if needed
8 9 10 11 |
# File 'lib/strong_migrations/safe_methods.rb', line 8 def safe_add_index(table, columns, ) disable_transaction @migration.add_index(table, columns, **.merge(algorithm: :concurrently)) end |
#safe_add_reference(table, reference, options) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/strong_migrations/safe_methods.rb', line 18 def safe_add_reference(table, reference, ) @migration.reversible do |dir| dir.up do disable_transaction foreign_key = .delete(:foreign_key) @migration.add_reference(table, reference, **) if foreign_key # same as Active Record name = if foreign_key.is_a?(Hash) && foreign_key[:to_table] foreign_key[:to_table] else (ActiveRecord::Base.pluralize_table_names ? reference.to_s.pluralize : reference).to_sym end @migration.add_foreign_key(table, name) end end dir.down do @migration.remove_reference(table, reference) end end end |
#safe_by_default_method?(method) ⇒ Boolean
3 4 5 |
# File 'lib/strong_migrations/safe_methods.rb', line 3 def safe_by_default_method?(method) StrongMigrations.safe_by_default && [:add_index, :add_belongs_to, :add_reference, :remove_index, :add_foreign_key, :add_check_constraint, :change_column_null].include?(method) end |
#safe_change_column_null(add_code, validate_code, change_args, remove_code) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/strong_migrations/safe_methods.rb', line 83 def safe_change_column_null(add_code, validate_code, change_args, remove_code) @migration.reversible do |dir| dir.up do @migration.safety_assured do @migration.execute(add_code) disable_transaction @migration.execute(validate_code) end if change_args @migration.change_column_null(*change_args) @migration.safety_assured do @migration.execute(remove_code) end end end dir.down do if change_args down_args = change_args.dup down_args[2] = true @migration.change_column_null(*down_args) else @migration.safety_assured do @migration.execute(remove_code) end end end end end |
#safe_remove_index(table, options) ⇒ Object
13 14 15 16 |
# File 'lib/strong_migrations/safe_methods.rb', line 13 def safe_remove_index(table, ) disable_transaction @migration.remove_index(table, **.merge(algorithm: :concurrently)) end |