Skip to content

Commit bdf0387

Browse files
Merge pull request #132 from doctolib/stop_ruby_2_support
stop ruby 2 support
2 parents 3da0ae3 + f0fd295 commit bdf0387

20 files changed

+100
-123
lines changed

.github/workflows/continuous-integration-workflow.yml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
strategy:
3333
matrix:
3434
postgres: [ 11.7, 12.14, 15.2 ]
35-
ruby: [ 2.7, 3.0, 3.1, 3.2 ]
35+
ruby: [ 3.0, 3.1, 3.2 ]
3636
services:
3737
postgres:
3838
image: postgres:${{ matrix.postgres }}
@@ -67,9 +67,7 @@ jobs:
6767
- ruby: "3.0"
6868
gemfile: gemfiles/activerecord61.gemfile
6969
- ruby: "3.0"
70-
gemfile: gemfiles/activerecord60.gemfile
71-
- ruby: 2.7
72-
gemfile: gemfiles/activerecord60.gemfile
70+
gemfile: gemfiles/activerecord70.gemfile
7371
env:
7472
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
7573
services:

.rubocop.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
AllCops:
2-
TargetRubyVersion: 2.7
2+
TargetRubyVersion: 3.0
33
NewCops: enable
44

55
Layout/MultilineMethodCallIndentation:

Gemfile.lock

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,38 @@ PATH
22
remote: .
33
specs:
44
safe-pg-migrations (2.3.1)
5-
activerecord (>= 6.0, < 7.1.x)
6-
activesupport (>= 6.0, < 7.1.x)
5+
activerecord (>= 6.1)
6+
activesupport (>= 6.1)
77

88
GEM
99
remote: https://rubygems.org/
1010
specs:
11-
activemodel (7.0.7.2)
12-
activesupport (= 7.0.7.2)
13-
activerecord (7.0.7.2)
14-
activemodel (= 7.0.7.2)
15-
activesupport (= 7.0.7.2)
16-
activesupport (7.0.7.2)
11+
activemodel (7.1.2)
12+
activesupport (= 7.1.2)
13+
activerecord (7.1.2)
14+
activemodel (= 7.1.2)
15+
activesupport (= 7.1.2)
16+
timeout (>= 0.4.0)
17+
activesupport (7.1.2)
18+
base64
19+
bigdecimal
1720
concurrent-ruby (~> 1.0, >= 1.0.2)
21+
connection_pool (>= 2.2.5)
22+
drb
1823
i18n (>= 1.6, < 2)
1924
minitest (>= 5.1)
25+
mutex_m
2026
tzinfo (~> 2.0)
2127
ast (2.4.2)
28+
base64 (0.2.0)
29+
bigdecimal (3.1.4)
2230
coderay (1.1.3)
2331
concurrent-ruby (1.2.2)
32+
connection_pool (2.4.1)
2433
coolline (0.5.0)
2534
unicode_utils (~> 1.4)
35+
drb (2.2.0)
36+
ruby2_keywords
2637
i18n (1.14.1)
2738
concurrent-ruby (~> 1.0)
2839
json (2.6.3)
@@ -31,6 +42,7 @@ GEM
3142
minitest (5.18.1)
3243
mocha (2.0.4)
3344
ruby2_keywords (>= 0.0.5)
45+
mutex_m (0.2.0)
3446
parallel (1.23.0)
3547
parser (3.2.2.3)
3648
ast (~> 2.4.1)
@@ -64,6 +76,7 @@ GEM
6476
ruby2_keywords (0.0.5)
6577
strong_migrations (1.4.3)
6678
activerecord (>= 5.2)
79+
timeout (0.4.1)
6780
tzinfo (2.0.6)
6881
concurrent-ruby (~> 1.0)
6982
unicode-display_width (2.4.2)

gemfiles/activerecord60.gemfile renamed to gemfiles/activerecord70.gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ source 'https://rubygems.org'
44

55
gemspec path: '..'
66

7-
gem 'activerecord', '~> 6.0.0'
7+
gem 'activerecord', '~> 7.0.0'
88
gem 'bundler'
99
gem 'minitest', '>= 5'
1010
gem 'mocha'

lib/safe-pg-migrations/plugins/blocking_activity_logger.rb

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,19 @@ module BlockingActivityLogger
1010
include Helpers::StatementsHelper
1111

1212
RETRIABLE_SCHEMA_STATEMENTS.each do |method|
13-
define_method method do |*args, &block|
13+
define_method method do |*args, **options, &block|
1414
log_context = lambda do
1515
break unless SafePgMigrations.config.sensitive_logger
1616

17-
options = args.last.is_a?(Hash) ? args.last : {}
18-
1917
Helpers::Logger.say "Executing #{SafePgMigrations.current_migration.name}",
2018
sensitive: true, warn_sensitive_logs: false
2119
Helpers::Logger.say_method_call method, *args, **options, sensitive: true, warn_sensitive_logs: false
2220
end
2321

2422
log_blocking_queries_after_lock(log_context) do
25-
super(*args, &block)
23+
super(*args, **options, &block)
2624
end
2725
end
28-
ruby2_keywords method
2926
end
3027

3128
%i[add_index remove_index].each do |method|

lib/safe-pg-migrations/plugins/idempotent_statements.rb

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ module SafePgMigrations
44
module IdempotentStatements
55
include Helpers::IndexHelper
66

7-
ruby2_keywords def add_index(table_name, column_name, *args)
8-
options = args.last.is_a?(Hash) ? args.last : {}
7+
def add_index(table_name, column_name, **options)
98
index_definition = index_definition(table_name, column_name, **options)
109

1110
return super unless index_name_exists?(index_definition.table, index_definition.name)
@@ -15,42 +14,44 @@ module IdempotentStatements
1514
return
1615
end
1716

18-
remove_index(table_name, name: index_definition.name)
17+
remove_index(table_name, column_name, **options)
1918
super
2019
end
2120

22-
ruby2_keywords def add_column(table_name, column_name, type, *)
21+
def add_column(table_name, column_name, type, **options)
2322
if column_exists?(table_name, column_name) && !column_exists?(table_name, column_name, type)
2423
error_message = "/!\\ Column '#{column_name}' already exists in '#{table_name}' with a different type"
2524
raise error_message
2625
end
2726

28-
return super unless column_exists?(table_name, column_name, type)
27+
options_without_default_value_backfill = options.except(:default_value_backfill)
2928

30-
log_message(<<~MESSAGE.squish
31-
/!\\ Column '#{column_name}' already exists in '#{table_name}' with the same type (#{type}).
32-
Skipping statement.
33-
MESSAGE
34-
)
29+
if column_exists?(table_name, column_name, type)
30+
log_message(<<~MESSAGE.squish
31+
/!\\ Column '#{column_name}' already exists in '#{table_name}' with the same type (#{type}).
32+
Skipping statement.
33+
MESSAGE
34+
)
35+
else
36+
super(table_name, column_name, type, **options_without_default_value_backfill)
37+
end
3538
end
3639

37-
ruby2_keywords def remove_column(table_name, column_name, type = nil, *)
40+
def remove_column(table_name, column_name, type = nil, **options)
3841
return super if column_exists?(table_name, column_name)
3942

4043
log_message("/!\\ Column '#{column_name}' not found on table '#{table_name}'. Skipping statement.")
4144
end
4245

43-
ruby2_keywords def remove_index(table_name, *args)
44-
options = args.last.is_a?(Hash) ? args.last : {}
45-
index_name = options.key?(:name) ? options[:name].to_s : index_name(table_name, options)
46+
def remove_index(table_name, column_name = nil, **options)
47+
index_name = options.key?(:name) ? options[:name].to_s : index_name(table_name, column: column_name)
4648

4749
return super if index_name_exists?(table_name, index_name)
4850

4951
log_message("/!\\ Index '#{index_name}' not found on table '#{table_name}'. Skipping statement.")
5052
end
5153

52-
ruby2_keywords def add_foreign_key(from_table, to_table, *args)
53-
options = args.last.is_a?(Hash) ? args.last : {}
54+
def add_foreign_key(from_table, to_table, **options)
5455
sub_options = options.slice(:name, :column)
5556
return super unless foreign_key_exists?(from_table, sub_options.present? ? nil : to_table, **sub_options)
5657

@@ -64,13 +65,12 @@ def remove_foreign_key(from_table, to_table = nil, **options)
6465
log_message("/!\\ Foreign key '#{from_table}' -> '#{reference_name}' does not exist. Skipping statement.")
6566
end
6667

67-
ruby2_keywords def create_table(table_name, *args)
68-
options = args.last.is_a?(Hash) ? args.last : {}
68+
def create_table(table_name, **options)
6969
return super if options[:force] || !table_exists?(table_name)
7070

7171
Helpers::Logger.say "/!\\ Table '#{table_name}' already exists.", sub_item: true
7272

73-
td = create_table_definition(table_name, *args)
73+
td = create_table_definition(table_name, **options)
7474

7575
yield td if block_given?
7676

@@ -82,8 +82,10 @@ def remove_foreign_key(from_table, to_table = nil, **options)
8282
end
8383

8484
def add_check_constraint(table_name, expression, **options)
85+
options_without_validate = options.except(:validate)
8586
constraint_definition = check_constraint_for table_name,
86-
**check_constraint_options(table_name, expression, options)
87+
**check_constraint_options(table_name, expression,
88+
options_without_validate)
8789

8890
return super if constraint_definition.nil?
8991

@@ -123,7 +125,7 @@ def change_column_default(table_name, column_name, default_or_changes)
123125
)
124126
end
125127

126-
ruby2_keywords def drop_table(table_name, *)
128+
def drop_table(table_name, **options)
127129
return super if table_exists?(table_name)
128130

129131
log_message("/!\\ Table '#{table_name} does not exist. Skipping statement.")

lib/safe-pg-migrations/plugins/statement_insurer.rb

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ def validate_foreign_key(*, **)
3030
without_statement_timeout { super }
3131
end
3232

33-
ruby2_keywords def add_foreign_key(from_table, to_table, *args)
34-
options = args.last.is_a?(Hash) ? args.last : {}
33+
def add_foreign_key(from_table, to_table, **options)
3534
validate_present = options.key?(:validate)
3635
options[:validate] = false unless validate_present
3736

@@ -43,7 +42,7 @@ def validate_foreign_key(*, **)
4342
validate_foreign_key from_table, sub_options.present? ? nil : to_table, **sub_options
4443
end
4544

46-
ruby2_keywords def create_table(*)
45+
def create_table(*)
4746
super do |td|
4847
yield td if block_given?
4948
td.indexes.map! do |key, index_options|
@@ -53,9 +52,7 @@ def validate_foreign_key(*, **)
5352
end
5453
end
5554

56-
ruby2_keywords def add_index(table_name, column_name, *args_options)
57-
options = args_options.last.is_a?(Hash) ? args_options.last : {}
58-
55+
def add_index(table_name, column_name, **options)
5956
if options[:algorithm] == :default
6057
options.delete :algorithm
6158
else
@@ -66,29 +63,28 @@ def validate_foreign_key(*, **)
6663
without_timeout { super(table_name, column_name, **options) }
6764
end
6865

69-
ruby2_keywords def remove_index(table_name, *args)
70-
options = args.last.is_a?(Hash) ? args.last : { column: args.last }
66+
def remove_index(table_name, column_name = nil, **options)
7167
options[:algorithm] = :concurrently unless options.key?(:algorithm)
7268

73-
Helpers::Logger.say_method_call(:remove_index, table_name, **options)
74-
without_timeout { super(table_name, **options) }
69+
Helpers::Logger.say_method_call(:remove_index, table_name, column_name, **options)
70+
without_timeout { super(table_name, column_name, **options) }
7571
end
7672

77-
def remove_column(table_name, column_name, *)
73+
def remove_column(table_name, column_name, type = nil, **options)
7874
foreign_key = foreign_key_for(table_name, column: column_name)
7975

8076
remove_foreign_key(table_name, name: foreign_key.name) if foreign_key
8177
super
8278
end
8379

84-
ruby2_keywords def drop_table(table_name, *args)
80+
def drop_table(table_name, **options)
8581
foreign_keys(table_name).each do |foreign_key|
8682
remove_foreign_key(table_name, name: foreign_key.name)
8783
end
8884

89-
Helpers::Logger.say_method_call :drop_table, table_name, *args
85+
Helpers::Logger.say_method_call :drop_table, table_name, **options
9086

91-
super(table_name, *args)
87+
super
9288
end
9389
end
9490
end

lib/safe-pg-migrations/plugins/statement_insurer/add_column.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
module SafePgMigrations
44
module StatementInsurer
55
module AddColumn
6-
ruby2_keywords def add_column(table_name, column_name, type, *args)
7-
options = args.last.is_a?(Hash) && args.last
8-
options ||= {}
9-
6+
def add_column(table_name, column_name, type, **options)
107
return super if should_keep_default_implementation?(**options)
118

9+
options.delete(:default_value_backfill)
10+
1211
raise <<~ERROR unless backfill_column_default_safe?(table_name)
1312
Table #{table_name} has more than #{SafePgMigrations.config.default_value_backfill_threshold} rows.
1413
Backfilling the default value for column #{column_name} on table #{table_name} would take too long.

lib/safe-pg-migrations/plugins/statement_retrier.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ module StatementRetrier
55
include Helpers::StatementsHelper
66

77
RETRIABLE_SCHEMA_STATEMENTS.each do |method|
8-
define_method method do |*args, &block|
9-
retry_if_lock_timeout { super(*args, &block) }
8+
define_method method do |*args, **options, &block|
9+
retry_if_lock_timeout { super(*args, **options, &block) }
1010
end
11-
ruby2_keywords method
1211
end
1312

1413
private

lib/safe-pg-migrations/plugins/strong_migrations_integration.rb

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,19 @@ def strong_migration_available?
5454
].freeze
5555

5656
SAFE_METHODS.each do |method|
57-
define_method method do |*args|
58-
return super(*args) unless respond_to?(:safety_assured)
57+
define_method method do |*args, **options|
58+
return super(*args, **options) unless respond_to?(:safety_assured)
5959

60-
safety_assured { super(*args) }
60+
safety_assured { super(*args, **options) }
6161
end
62-
ruby2_keywords method
6362
end
6463

65-
ruby2_keywords def add_column(table_name, *args)
66-
return super(table_name, *args) unless respond_to?(:safety_assured)
64+
def add_column(table_name, *args, **options)
65+
return super unless respond_to?(:safety_assured)
6766

68-
options = args.last.is_a?(Hash) ? args.last : {}
67+
return safety_assured { super } if options.fetch(:default_value_backfill, :auto) == :auto
6968

70-
return safety_assured { super(table_name, *args) } if options.fetch(:default_value_backfill, :auto) == :auto
71-
72-
super(table_name, *args)
69+
super
7370
end
7471
end
7572
end

0 commit comments

Comments
 (0)