online_migrations 0.8.1 → 0.8.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9bfe87b009fa9199b4deb0a1bf7e63dac043fa8f29c25f4f93c55fd136155f2d
4
- data.tar.gz: 0a95c4b4de358769bce7d3855f7df67c08d027279b523d0ea550a383b60cd6a8
3
+ metadata.gz: b4f89ce12461dd3b786e98ecbc1afc315a5013a0967e90b9307d47b080924723
4
+ data.tar.gz: 797f19c861514e843a7d6e6f3222d19f36b77fc30ff3cc1ac2808591fa339f75
5
5
  SHA512:
6
- metadata.gz: 95b0d869484b407b295426bf1b836f00ce71c297fc1ef35fe817e449f126ccbc7e7df512efc30c16cda9dfb9755c86e1b409f9787f40708341aba422128b0d60
7
- data.tar.gz: 42b829796b7fd0503416460775ac1c7596fce43621667a9144cd06b9000e35f8054398cadbf82f370b3e8ca988bcd7ce53b505982e8e5b3ed7e6991c71f373aa
6
+ metadata.gz: c4458f5096fc180bb27411fc800db6dce588473373c0945abf2121b67591dc031badb498582681e55128055a85105600be1de8851818e93bf1108f42d43dd24c
7
+ data.tar.gz: ec49dd203d5ded9638d623af2b35b6ca1980a182a54ecf57bcbaf9d910cfe8f3e2cbd0f90c7e4d94f76236be91ef373b50e29a65e59be6e12ef6b55ad21de91b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  ## master (unreleased)
2
2
 
3
+ ## 0.8.2 (2023-09-26)
4
+
5
+ - Promote check constraint to `NOT NULL` on PostgreSQL >= 12 when changing column type
6
+ - Fix `safety_assured` with `revert`
7
+
3
8
  ## 0.8.1 (2023-08-04)
4
9
 
5
10
  - Fix `update_columns_in_batches` when multiple columns are passed
@@ -8,7 +13,7 @@
8
13
  ## 0.8.0 (2023-07-24)
9
14
 
10
15
  - Add check for `change_column_default`
11
- - Add check for `add_unique_key` (Active Record >= 7.1)
16
+ - Add check for `add_unique_constraint` (Active Record >= 7.1)
12
17
  - Add check for `add_column` with stored generated columns
13
18
 
14
19
  ## 0.7.3 (2023-05-30)
data/README.md CHANGED
@@ -143,7 +143,7 @@ Potentially dangerous operations:
143
143
  - [adding a reference](#adding-a-reference)
144
144
  - [adding a foreign key](#adding-a-foreign-key)
145
145
  - [adding an exclusion constraint](#adding-an-exclusion-constraint)
146
- - [adding a unique key](#adding-a-unique-key)
146
+ - [adding a unique constraint](#adding-a-unique-constraint)
147
147
  - [adding a json column](#adding-a-json-column)
148
148
  - [adding a stored generated column](#adding-a-stored-generated-column)
149
149
  - [using primary key with short integer type](#using-primary-key-with-short-integer-type)
@@ -880,16 +880,16 @@ end
880
880
 
881
881
  [Let us know](https://github.com/fatkodima/online_migrations/issues/new) if you have a safe way to do this (exclusion constraints cannot be marked `NOT VALID`).
882
882
 
883
- ### Adding a unique key
883
+ ### Adding a unique constraint
884
884
 
885
885
  :x: **Bad**
886
886
 
887
- Adding a unique key blocks reads and writes while the underlying index is being built.
887
+ Adding a unique constraint blocks reads and writes while the underlying index is being built.
888
888
 
889
889
  ```ruby
890
- class AddUniqueKey < ActiveRecord::Migration[7.1]
890
+ class AddUniqueConstraint < ActiveRecord::Migration[7.1]
891
891
  def change
892
- add_unique_key :sections, :position, deferrable: :deferred
892
+ add_unique_constraint :sections, :position, deferrable: :deferred
893
893
  end
894
894
  end
895
895
  ```
@@ -899,7 +899,7 @@ end
899
899
  A safer approach is to create a unique index first, and then create a unique key using that index.
900
900
 
901
901
  ```ruby
902
- class AddUniqueKeyAddIndex < ActiveRecord::Migration[7.1]
902
+ class AddUniqueConstraintAddIndex < ActiveRecord::Migration[7.1]
903
903
  disable_ddl_transaction!
904
904
 
905
905
  def change
@@ -909,13 +909,13 @@ end
909
909
  ```
910
910
 
911
911
  ```ruby
912
- class AddUniqueKey < ActiveRecord::Migration[7.1]
912
+ class AddUniqueConstraint < ActiveRecord::Migration[7.1]
913
913
  def up
914
- add_unique_key :sections, :position, deferrable: :deferred, using_index: "index_sections_on_position"
914
+ add_unique_constraint :sections, :position, deferrable: :deferred, using_index: "index_sections_on_position"
915
915
  end
916
916
 
917
917
  def down
918
- remove_unique_key :sections, :position
918
+ remove_unique_constraint :sections, :position
919
919
  end
920
920
  end
921
921
  ```
@@ -21,8 +21,8 @@ module OnlineMigrations
21
21
  migration = "#{namespace}::#{name}".safe_constantize ||
22
22
  "#{internal_namespace}::#{name}".safe_constantize
23
23
 
24
- raise NotFoundError.new("Background Migration #{name} not found", name) unless migration
25
- unless migration.is_a?(Class) && migration < self
24
+ raise NotFoundError.new("Background Migration #{name} not found", name) if migration.nil?
25
+ if !(migration.is_a?(Class) && migration < self)
26
26
  raise NotFoundError.new("#{name} is not a Background Migration", name)
27
27
  end
28
28
 
@@ -8,7 +8,7 @@ module OnlineMigrations
8
8
  relation = record.migration_relation
9
9
  migration_name = record.migration_name
10
10
 
11
- unless relation.is_a?(ActiveRecord::Relation)
11
+ if !relation.is_a?(ActiveRecord::Relation)
12
12
  record.errors.add(
13
13
  :migration_name,
14
14
  "#{migration_name}#relation must return an ActiveRecord::Relation object"
@@ -87,7 +87,7 @@ module OnlineMigrations
87
87
  end
88
88
 
89
89
  def throttler=(value)
90
- unless value.respond_to?(:call)
90
+ if !value.respond_to?(:call)
91
91
  raise ArgumentError, "background_migrations throttler must be a callable."
92
92
  end
93
93
 
@@ -13,7 +13,7 @@ module OnlineMigrations
13
13
  end
14
14
 
15
15
  def relation
16
- unless @record.respond_to?(association)
16
+ if !@record.respond_to?(association)
17
17
  raise ArgumentError, "'#{@record.class.name}' has no association called '#{association}'"
18
18
  end
19
19
 
@@ -16,7 +16,7 @@ module OnlineMigrations
16
16
  # https://github.com/rails/rails/pull/34727
17
17
  associations.inject(model.unscoped) do |relation, association|
18
18
  reflection = model.reflect_on_association(association)
19
- unless reflection
19
+ if reflection.nil?
20
20
  raise ArgumentError, "'#{model.name}' has no association called '#{association}'"
21
21
  end
22
22
 
@@ -11,12 +11,12 @@ module OnlineMigrations
11
11
  }
12
12
 
13
13
  def validate(record)
14
- return unless record.status_changed?
14
+ return if !record.status_changed?
15
15
 
16
16
  previous_status, new_status = record.status_change
17
17
  valid_new_statuses = VALID_STATUS_TRANSITIONS.fetch(previous_status, [])
18
18
 
19
- unless valid_new_statuses.include?(new_status)
19
+ if !valid_new_statuses.include?(new_status)
20
20
  record.errors.add(
21
21
  :status,
22
22
  "cannot transition background migration job from status #{previous_status} to #{new_status}"
@@ -29,12 +29,12 @@ module OnlineMigrations
29
29
  }
30
30
 
31
31
  def validate(record)
32
- return unless record.status_changed?
32
+ return if !record.status_changed?
33
33
 
34
34
  previous_status, new_status = record.status_change
35
35
  valid_new_statuses = VALID_STATUS_TRANSITIONS.fetch(previous_status, [])
36
36
 
37
- unless valid_new_statuses.include?(new_status)
37
+ if !valid_new_statuses.include?(new_status)
38
38
  record.errors.add(
39
39
  :status,
40
40
  "cannot transition background migration from status #{previous_status} to #{new_status}"
@@ -59,7 +59,7 @@ module OnlineMigrations
59
59
  def has_many_association(counter_association) # rubocop:disable Naming/PredicateName
60
60
  has_many_association = model.reflect_on_association(counter_association)
61
61
 
62
- unless has_many_association
62
+ if !has_many_association
63
63
  has_many = model.reflect_on_all_associations(:has_many)
64
64
 
65
65
  has_many_association = has_many.find do |association|
@@ -74,7 +74,7 @@ module OnlineMigrations
74
74
 
75
75
  counter_association = has_many_association.plural_name if has_many_association
76
76
  end
77
- raise ArgumentError, "'#{model.name}' has no association called '#{counter_association}'" unless has_many_association
77
+ raise ArgumentError, "'#{model.name}' has no association called '#{counter_association}'" if !has_many_association
78
78
 
79
79
  if has_many_association.is_a?(ActiveRecord::Reflection::ThroughReflection)
80
80
  has_many_association = has_many_association.through_reflection
@@ -14,7 +14,7 @@ module OnlineMigrations
14
14
  end
15
15
 
16
16
  def each_batch(of: 1000, column: relation.primary_key, start: nil, finish: nil, order: :asc)
17
- unless [:asc, :desc].include?(order)
17
+ if ![:asc, :desc].include?(order)
18
18
  raise ArgumentError, ":order must be :asc or :desc, got #{order.inspect}"
19
19
  end
20
20
 
@@ -26,7 +26,7 @@ module OnlineMigrations
26
26
 
27
27
  start_row = base_relation.uncached { base_relation.first }
28
28
 
29
- return unless start_row
29
+ return if !start_row
30
30
 
31
31
  start_id = start_row[column]
32
32
  arel_table = relation.arel_table
@@ -67,7 +67,7 @@ module OnlineMigrations
67
67
  # Retaining the results in the query cache would undermine the point of batching.
68
68
  batch_relation.uncached { yield batch_relation, index }
69
69
 
70
- break unless stop_row
70
+ break if !stop_row
71
71
  end
72
72
  end
73
73
 
@@ -113,21 +113,22 @@ module OnlineMigrations
113
113
 
114
114
  if raw_connection.server_version >= 11_00_00
115
115
  if primary_key(table_name) == column_name.to_s && old_col.type == :integer
116
- # If the column to be converted is a Primary Key, set it to
117
- # `NOT NULL DEFAULT 0` and we'll copy the correct values when backfilling.
118
- # That way, we skip the expensive validation step required to add
119
- # a `NOT NULL` constraint at the end of the process.
116
+ # For PG < 11 and Primary Key conversions, setting a column as the PK
117
+ # converts even check constraints to NOT NULL column constraints
118
+ # and forces an inline re-verification of the whole table.
119
+ # To avoid this, we instead set it to `NOT NULL DEFAULT 0` and we'll
120
+ # copy the correct values when backfilling.
120
121
  add_column(table_name, tmp_column_name, new_type,
121
122
  **old_col_options.merge(column_options).merge(default: old_col.default || 0, null: false))
122
123
  else
123
- unless old_col.default.nil?
124
+ if !old_col.default.nil?
124
125
  old_col_options = old_col_options.merge(default: old_col.default, null: old_col.null)
125
126
  end
126
127
  add_column(table_name, tmp_column_name, new_type, **old_col_options.merge(column_options))
127
128
  end
128
129
  else
129
130
  add_column(table_name, tmp_column_name, new_type, **old_col_options.merge(column_options))
130
- change_column_default(table_name, tmp_column_name, old_col.default) unless old_col.default.nil?
131
+ change_column_default(table_name, tmp_column_name, old_col.default) if !old_col.default.nil?
131
132
  end
132
133
  end
133
134
 
@@ -247,22 +248,7 @@ module OnlineMigrations
247
248
 
248
249
  # At this point we are sure there are no NULLs in this column
249
250
  transaction do
250
- # For PG < 11 and Primary Key conversions, setting a column as the PK
251
- # converts even check constraints to NOT NULL column constraints
252
- # and forces an inline re-verification of the whole table.
253
- #
254
- # For PG >= 12 we can "promote" CHECK constraint to NOT NULL constraint,
255
- # but for older versions we can set attribute as NOT NULL directly
256
- # through PG internal tables.
257
- # In-depth analysis of implications of this was made, so this approach
258
- # is considered safe - https://habr.com/ru/company/haulmont/blog/493954/ (in russian).
259
- execute(<<-SQL.strip_heredoc)
260
- UPDATE pg_catalog.pg_attribute
261
- SET attnotnull = true
262
- WHERE attrelid = #{quote(table_name)}::regclass
263
- AND attname = #{quote(tmp_column_name)}
264
- SQL
265
-
251
+ __set_not_null(table_name, tmp_column_name)
266
252
  remove_not_null_constraint(table_name, tmp_column_name)
267
253
  end
268
254
  end
@@ -389,7 +375,7 @@ module OnlineMigrations
389
375
  options.each do |option|
390
376
  if column.respond_to?(option)
391
377
  value = column.public_send(option)
392
- result[option] = value unless value.nil?
378
+ result[option] = value if !value.nil?
393
379
  end
394
380
  end
395
381
  result
@@ -417,7 +403,7 @@ module OnlineMigrations
417
403
  end
418
404
 
419
405
  # This is necessary as we can't properly rename indexes such as "taggings_idx".
420
- unless index.name.include?(from_column)
406
+ if !index.name.include?(from_column)
421
407
  raise "The index #{index.name} can not be copied as it does not " \
422
408
  "mention the old column. You have to rename this index manually first."
423
409
  end
@@ -482,6 +468,29 @@ module OnlineMigrations
482
468
  end
483
469
  end
484
470
 
471
+ def __set_not_null(table_name, column_name)
472
+ # For PG >= 12 we can "promote" CHECK constraint to NOT NULL constraint:
473
+ # https://github.com/postgres/postgres/commit/bbb96c3704c041d139181c6601e5bc770e045d26
474
+ if raw_connection.server_version >= 12_00_00
475
+ execute(<<-SQL.strip_heredoc)
476
+ ALTER TABLE #{quote_table_name(table_name)}
477
+ ALTER #{quote_column_name(column_name)}
478
+ SET NOT NULL
479
+ SQL
480
+ else
481
+ # For older versions we can set attribute as NOT NULL directly
482
+ # through PG internal tables.
483
+ # In-depth analysis of implications of this was made, so this approach
484
+ # is considered safe - https://habr.com/ru/company/haulmont/blog/493954/ (in russian).
485
+ execute(<<-SQL.strip_heredoc)
486
+ UPDATE pg_catalog.pg_attribute
487
+ SET attnotnull = true
488
+ WHERE attrelid = #{quote(table_name)}::regclass
489
+ AND attname = #{quote(column_name)}
490
+ SQL
491
+ end
492
+ end
493
+
485
494
  def __check_constraints_for(table_name, column_name)
486
495
  __check_constraints(table_name).select { |c| c["column_name"] == column_name }
487
496
  end
@@ -7,11 +7,22 @@ require "set"
7
7
  module OnlineMigrations
8
8
  # @private
9
9
  class CommandChecker
10
+ class << self
11
+ attr_accessor :safe
12
+
13
+ def safety_assured
14
+ prev_value = safe
15
+ self.safe = true
16
+ yield
17
+ ensure
18
+ self.safe = prev_value
19
+ end
20
+ end
21
+
10
22
  attr_accessor :direction
11
23
 
12
24
  def initialize(migration)
13
25
  @migration = migration
14
- @safe = false
15
26
  @new_tables = []
16
27
  @new_columns = []
17
28
  @lock_timeout_checked = false
@@ -19,19 +30,11 @@ module OnlineMigrations
19
30
  @removed_indexes = []
20
31
  end
21
32
 
22
- def safety_assured
23
- prev_value = @safe
24
- @safe = true
25
- yield
26
- ensure
27
- @safe = prev_value
28
- end
29
-
30
33
  def check(command, *args, &block)
31
34
  check_database_version
32
35
  check_lock_timeout
33
36
 
34
- unless safe?
37
+ if !safe?
35
38
  do_check(command, *args, &block)
36
39
 
37
40
  run_custom_checks(command, args)
@@ -101,7 +104,7 @@ module OnlineMigrations
101
104
  end
102
105
 
103
106
  def safe?
104
- @safe ||
107
+ self.class.safe ||
105
108
  ENV["SAFETY_ASSURED"] ||
106
109
  (direction == :down && !OnlineMigrations.config.check_down) ||
107
110
  version <= OnlineMigrations.config.start_after
@@ -477,7 +480,7 @@ module OnlineMigrations
477
480
  bad_foreign_key: bad_foreign_key
478
481
  end
479
482
 
480
- unless options[:polymorphic]
483
+ if !options[:polymorphic]
481
484
  type = (options[:type] || (Utils.ar_version >= 5.1 ? :bigint : :integer)).to_sym
482
485
  column_name = "#{ref_name}_id"
483
486
 
@@ -507,9 +510,9 @@ module OnlineMigrations
507
510
  existing_indexes = connection.indexes(table_name)
508
511
 
509
512
  @removed_indexes.each do |removed_index|
510
- next unless removed_index.intersect?(index)
513
+ next if !removed_index.intersect?(index)
511
514
 
512
- unless existing_indexes.any? { |existing_index| removed_index.covered_by?(existing_index) }
515
+ if existing_indexes.none? { |existing_index| removed_index.covered_by?(existing_index) }
513
516
  raise_error :replace_index
514
517
  end
515
518
  end
@@ -560,7 +563,7 @@ module OnlineMigrations
560
563
  end
561
564
 
562
565
  def add_exclusion_constraint(table_name, _expression, **_options)
563
- unless new_or_small_table?(table_name)
566
+ if !new_or_small_table?(table_name)
564
567
  raise_error :add_exclusion_constraint
565
568
  end
566
569
  end
@@ -575,15 +578,15 @@ module OnlineMigrations
575
578
  end
576
579
  end
577
580
 
578
- def add_unique_key(table_name, column_name = nil, **options)
581
+ def add_unique_constraint(table_name, column_name = nil, **options)
579
582
  return if new_or_small_table?(table_name) || options[:using_index] || !column_name
580
583
 
581
584
  index_name = index_name(table_name, column_name)
582
585
 
583
- raise_error :add_unique_key,
586
+ raise_error :add_unique_constraint,
584
587
  add_index_code: command_str(:add_index, table_name, column_name, unique: true, name: index_name, algorithm: :concurrently),
585
- add_code: command_str(:add_unique_key, table_name, **options.merge(using_index: index_name)),
586
- remove_code: command_str(:remove_unique_key, table_name, column_name)
588
+ add_code: command_str(:add_unique_constraint, table_name, **options.merge(using_index: index_name)),
589
+ remove_code: command_str(:remove_unique_constraint, table_name, column_name)
587
590
  end
588
591
 
589
592
  # Implementation is from Active Record
@@ -98,7 +98,7 @@ module OnlineMigrations
98
98
 
99
99
  def invert_revert_initialize_columns_rename(args)
100
100
  _table, old_new_column_hash = args
101
- unless old_new_column_hash
101
+ if !old_new_column_hash
102
102
  raise ActiveRecord::IrreversibleMigration,
103
103
  "revert_initialize_columns_rename is only reversible if given a hash of old and new columns."
104
104
  end
@@ -107,7 +107,7 @@ module OnlineMigrations
107
107
 
108
108
  def invert_finalize_table_rename(args)
109
109
  _table_name, new_name = args
110
- unless new_name
110
+ if !new_name
111
111
  raise ActiveRecord::IrreversibleMigration,
112
112
  "finalize_table_rename is only reversible if given a new_name."
113
113
  end
@@ -115,7 +115,7 @@ module OnlineMigrations
115
115
  end
116
116
 
117
117
  def invert_revert_initialize_column_type_change(args)
118
- unless args[2]
118
+ if !args[2]
119
119
  raise ActiveRecord::IrreversibleMigration,
120
120
  "revert_initialize_column_type_change is only reversible if given a new_type."
121
121
  end
@@ -141,7 +141,7 @@ module OnlineMigrations
141
141
  end
142
142
 
143
143
  def invert_remove_text_limit_constraint(args)
144
- unless args[2]
144
+ if !args[2]
145
145
  raise ActiveRecord::IrreversibleMigration, "remove_text_limit_constraint is only reversible if given a limit."
146
146
  end
147
147
 
@@ -261,7 +261,7 @@ module OnlineMigrations
261
261
 
262
262
  private
263
263
  def ensure_supports_multiple_dbs
264
- unless Utils.supports_multiple_dbs?
264
+ if !Utils.supports_multiple_dbs?
265
265
  raise "OnlineMigrations does not support multiple databases for Active Record < 6.1"
266
266
  end
267
267
  end
@@ -438,9 +438,9 @@ class <%= migration_name %> < <%= migration_parent %>
438
438
  end
439
439
  end",
440
440
 
441
- add_unique_key:
442
- "Adding a unique key blocks reads and writes while the underlying index is being built.
443
- A safer approach is to create a unique index first, and then create a unique key using that index.
441
+ add_unique_constraint:
442
+ "Adding a unique constraint blocks reads and writes while the underlying index is being built.
443
+ A safer approach is to create a unique index first, and then create a unique constraint using that index.
444
444
 
445
445
  class <%= migration_name %>AddIndex < <%= migration_parent %>
446
446
  disable_ddl_transaction!
@@ -36,7 +36,7 @@ module OnlineMigrations
36
36
  # safety_assured { remove_column(:users, :some_column) }
37
37
  #
38
38
  def safety_assured(&block)
39
- command_checker.safety_assured(&block)
39
+ command_checker.class.safety_assured(&block)
40
40
  end
41
41
 
42
42
  # Stop running migrations.
@@ -87,7 +87,7 @@ module OnlineMigrations
87
87
  value = Arel.sql(value.call.to_s) if value.is_a?(Proc)
88
88
 
89
89
  # Ignore subqueries in conditions
90
- unless value.is_a?(Arel::Nodes::SqlLiteral) && value.to_s =~ /select\s+/i
90
+ if !value.is_a?(Arel::Nodes::SqlLiteral) || value.to_s !~ /select\s+/i
91
91
  arel_column = model.arel_table[column_name]
92
92
  if value.nil?
93
93
  arel_column.not_eq(nil)
@@ -665,7 +665,7 @@ module OnlineMigrations
665
665
  __ensure_not_in_transaction!
666
666
 
667
667
  column_name = "#{ref_name}_id"
668
- unless column_exists?(table_name, column_name)
668
+ if !column_exists?(table_name, column_name)
669
669
  type = options[:type] || (Utils.ar_version >= 5.1 ? :bigint : :integer)
670
670
  allow_null = options.fetch(:null, true)
671
671
  add_column(table_name, column_name, type, null: allow_null)
@@ -139,7 +139,7 @@ module OnlineMigrations
139
139
  private_constant :FUNCTION_CALL_RE
140
140
 
141
141
  def volatile_default?(connection, type, value)
142
- return false unless value.is_a?(Proc) || (type.to_s == "uuid" && value.is_a?(String))
142
+ return false if !(value.is_a?(Proc) || (type.to_s == "uuid" && value.is_a?(String)))
143
143
 
144
144
  value = value.call if value.is_a?(Proc)
145
145
  return false if !value.is_a?(String)
@@ -13,7 +13,13 @@ module OnlineMigrations
13
13
  stdout_logger.level = @activerecord_logger_was.level
14
14
  stdout_logger = ActiveSupport::TaggedLogging.new(stdout_logger)
15
15
 
16
- combined_logger = stdout_logger.extend(ActiveSupport::Logger.broadcast(@activerecord_logger_was))
16
+ combined_logger =
17
+ # Broadcasting logs API was changed in https://github.com/rails/rails/pull/48615.
18
+ if Utils.ar_version >= 7.1
19
+ ActiveSupport::BroadcastLogger.new(stdout_logger, @activerecord_logger_was)
20
+ else
21
+ stdout_logger.extend(ActiveSupport::Logger.broadcast(@activerecord_logger_was))
22
+ end
17
23
 
18
24
  ActiveRecord::Base.logger = combined_logger
19
25
  set_verbose_query_logs(false)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OnlineMigrations
4
- VERSION = "0.8.1"
4
+ VERSION = "0.8.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: online_migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - fatkodima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-04 00:00:00.000000000 Z
11
+ date: 2023-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  requirements: []
105
- rubygems_version: 3.4.6
105
+ rubygems_version: 3.4.10
106
106
  signing_key:
107
107
  specification_version: 4
108
108
  summary: Catch unsafe PostgreSQL migrations in development and run them easier in