safe-pg-migrations 1.2.3 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b01cc2376f8bcfa1908bdc642a51bd444420540eef7aa01dc403f13ea0b19c8
4
- data.tar.gz: 0c09d3bc52ce84542fd50b119cef667714a6058d5fcf59f1be83af72318b3862
3
+ metadata.gz: fdee6e752da3fbdec93e5fd5c72fb370497ddd66f1cc27f33609c2a31e364c53
4
+ data.tar.gz: 143a5dcbf614abed765fac78b16969d900ded5ec574f11d939d802b94d7e2586
5
5
  SHA512:
6
- metadata.gz: f7a822bbb6cc2e924c8da76ca1501cec16588b4972e850fd07e7fbc120e159dfef715a8293c3399454aa9072e2cc6c2da8927e6dc84f15c72670bb16182fe53c
7
- data.tar.gz: 4821e1fb76ce6e868a2032eb0e53aceea8f745f31fce521333949c20143150bd03950187d7286d63d1d9c7269b6015f8b9be8e38833d3e6df659f2f8e5940902
6
+ metadata.gz: 41c264aa05c7b8ad5fe90f7ecdc88fa700504562e69695d5fd9f4dc9ac63315fb666818554e1387251b367aed241fccff31154589f70309905e1ed1cfae90c68
7
+ data.tar.gz: 9386e6a8b0366387543998ec5cec42e719d2a4138d5eb52f13f6580d2a3d31e48bd438760b358beb1ab5eb32bd8598927d69bafd03756108a514e88eeb431022
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'ruby2_keywords'
3
4
  require 'safe-pg-migrations/configuration'
4
5
  require 'safe-pg-migrations/plugins/verbose_sql_logger'
5
6
  require 'safe-pg-migrations/plugins/blocking_activity_logger'
@@ -50,13 +51,13 @@ module SafePgMigrations
50
51
  @alternate_connection = nil
51
52
  end
52
53
 
53
- def say(*args)
54
+ ruby2_keywords def say(*args)
54
55
  return unless current_migration
55
56
 
56
57
  current_migration.say(*args)
57
58
  end
58
59
 
59
- def say_method_call(method, *args)
60
+ ruby2_keywords def say_method_call(method, *args)
60
61
  say "#{method}(#{args.map(&:inspect) * ', '})", true
61
62
  end
62
63
 
@@ -91,6 +92,7 @@ module SafePgMigrations
91
92
 
92
93
  safety_assured { super(*args) }
93
94
  end
95
+ ruby2_keywords method
94
96
  end
95
97
  end
96
98
  end
@@ -21,6 +21,7 @@ module SafePgMigrations
21
21
  define_method method do |*args, &block|
22
22
  log_blocking_queries { super(*args, &block) }
23
23
  end
24
+ ruby2_keywords method
24
25
  end
25
26
 
26
27
  private
@@ -2,7 +2,8 @@
2
2
 
3
3
  module SafePgMigrations
4
4
  module IdemPotentStatements
5
- def add_index(table_name, column_name, **options)
5
+ ruby2_keywords def add_index(table_name, column_name, *args)
6
+ options = args.last.is_a?(Hash) ? args.last : {}
6
7
  index_name = options.key?(:name) ? options[:name].to_s : index_name(table_name, index_column_names(column_name))
7
8
  return super unless index_name_exists?(table_name, index_name)
8
9
 
@@ -12,19 +13,20 @@ module SafePgMigrations
12
13
  super
13
14
  end
14
15
 
15
- def add_column(table_name, column_name, type, options = {})
16
+ ruby2_keywords def add_column(table_name, column_name, type, *)
16
17
  return super unless column_exists?(table_name, column_name)
17
18
 
18
19
  SafePgMigrations.say("/!\\ Column '#{column_name}' already exists in '#{table_name}'. Skipping statement.", true)
19
20
  end
20
21
 
21
- def remove_column(table_name, column_name, type = nil, options = {})
22
+ ruby2_keywords def remove_column(table_name, column_name, type = nil, *)
22
23
  return super if column_exists?(table_name, column_name)
23
24
 
24
25
  SafePgMigrations.say("/!\\ Column '#{column_name}' not found on table '#{table_name}'. Skipping statement.", true)
25
26
  end
26
27
 
27
- def remove_index(table_name, options = {})
28
+ ruby2_keywords def remove_index(table_name, *args)
29
+ options = args.last.is_a?(Hash) ? args.last : {}
28
30
  index_name = options.key?(:name) ? options[:name].to_s : index_name(table_name, options)
29
31
 
30
32
  return super if index_name_exists?(table_name, index_name)
@@ -32,9 +34,10 @@ module SafePgMigrations
32
34
  SafePgMigrations.say("/!\\ Index '#{index_name}' not found on table '#{table_name}'. Skipping statement.", true)
33
35
  end
34
36
 
35
- def add_foreign_key(from_table, to_table, **options)
36
- options_or_to_table = options.slice(:name, :column).presence || to_table
37
- return super unless foreign_key_exists?(from_table, options_or_to_table)
37
+ ruby2_keywords def add_foreign_key(from_table, to_table, *args)
38
+ options = args.last.is_a?(Hash) ? args.last : {}
39
+ suboptions = options.slice(:name, :column)
40
+ return super unless foreign_key_exists?(from_table, suboptions.present? ? nil : to_table, **suboptions)
38
41
 
39
42
  SafePgMigrations.say(
40
43
  "/!\\ Foreign key '#{from_table}' -> '#{to_table}' already exists. Skipping statement.",
@@ -42,19 +45,20 @@ module SafePgMigrations
42
45
  )
43
46
  end
44
47
 
45
- def create_table(table_name, comment: nil, **options)
48
+ ruby2_keywords def create_table(table_name, *args)
49
+ options = args.last.is_a?(Hash) ? args.last : {}
46
50
  return super if options[:force] || !table_exists?(table_name)
47
51
 
48
52
  SafePgMigrations.say "/!\\ Table '#{table_name}' already exists.", true
49
53
 
50
- td = create_table_definition(table_name, **options)
54
+ td = create_table_definition(table_name, *args)
51
55
 
52
56
  yield td if block_given?
53
57
 
54
58
  SafePgMigrations.say(td.indexes.empty? ? '-- Skipping statement' : '-- Creating indexes', true)
55
59
 
56
60
  td.indexes.each do |column_name, index_options|
57
- add_index(table_name, column_name, index_options)
61
+ add_index(table_name, column_name, **index_options)
58
62
  end
59
63
  end
60
64
 
@@ -1,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SafePgMigrations
4
- module StatementInsurer
4
+ module StatementInsurer # rubocop:disable Metrics/ModuleLength
5
5
  PG_11_VERSION_NUM = 110_000
6
6
 
7
7
  %i[change_column_null change_column].each do |method|
8
8
  define_method method do |*args, &block|
9
9
  with_setting(:statement_timeout, SafePgMigrations.config.pg_safe_timeout) { super(*args, &block) }
10
10
  end
11
+ ruby2_keywords method
11
12
  end
12
13
 
13
- def add_column(table_name, column_name, type, **options)
14
+ ruby2_keywords def add_column(table_name, column_name, type, *args) # rubocop:disable Metrics/CyclomaticComplexity
15
+ options = args.last.is_a?(Hash) ? args.last : {}
14
16
  return super if SafePgMigrations.pg_version_num >= PG_11_VERSION_NUM
15
17
 
16
18
  default = options.delete(:default)
@@ -36,17 +38,21 @@ module SafePgMigrations
36
38
  end
37
39
  end
38
40
 
39
- def add_foreign_key(from_table, to_table, **options)
41
+ ruby2_keywords def add_foreign_key(from_table, to_table, *args)
42
+ options = args.last.is_a?(Hash) ? args.last : {}
40
43
  validate_present = options.key? :validate
41
44
  options[:validate] = false unless validate_present
45
+ with_setting(:statement_timeout, SafePgMigrations.config.pg_safe_timeout) do
46
+ super(from_table, to_table, **options)
47
+ end
42
48
 
43
- with_setting(:statement_timeout, SafePgMigrations.config.pg_safe_timeout) { super }
49
+ return if validate_present
44
50
 
45
- options_or_to_table = options.slice(:name, :column).presence || to_table
46
- without_statement_timeout { validate_foreign_key from_table, options_or_to_table } unless validate_present
51
+ suboptions = options.slice(:name, :column)
52
+ without_statement_timeout { validate_foreign_key from_table, suboptions.present? ? nil : to_table, **suboptions }
47
53
  end
48
54
 
49
- def create_table(*)
55
+ ruby2_keywords def create_table(*)
50
56
  with_setting(:statement_timeout, SafePgMigrations.config.pg_safe_timeout) do
51
57
  super do |td|
52
58
  yield td if block_given?
@@ -65,17 +71,17 @@ module SafePgMigrations
65
71
  options[:algorithm] = :concurrently
66
72
  end
67
73
 
68
- SafePgMigrations.say_method_call(:add_index, table_name, column_name, options)
74
+ SafePgMigrations.say_method_call(:add_index, table_name, column_name, **options)
69
75
 
70
- without_timeout { super }
76
+ without_timeout { super(table_name, column_name, **options) }
71
77
  end
72
78
 
73
- def remove_index(table_name, options = {})
74
- options = { column: options } unless options.is_a?(Hash)
75
- options[:algorithm] = :concurrently
76
- SafePgMigrations.say_method_call(:remove_index, table_name, options)
79
+ ruby2_keywords def remove_index(table_name, *args)
80
+ options = args.last.is_a?(Hash) ? args.last : { column: args.last }
81
+ options[:algorithm] = :concurrently unless options.key?(:algorithm)
82
+ SafePgMigrations.say_method_call(:remove_index, table_name, **options)
77
83
 
78
- without_timeout { super }
84
+ without_timeout { super(table_name, **options) }
79
85
  end
80
86
 
81
87
  def backfill_column_default(table_name, column_name)
@@ -10,6 +10,7 @@ module SafePgMigrations
10
10
  define_method method do |*args, &block|
11
11
  retry_if_lock_timeout { super(*args, &block) }
12
12
  end
13
+ ruby2_keywords method
13
14
  end
14
15
 
15
16
  private
@@ -2,22 +2,27 @@
2
2
 
3
3
  module SafePgMigrations
4
4
  module UselessStatementsLogger
5
- def self.warn_useless(action, link = nil, *args)
6
- SafePgMigrations.say "/!\\ No need to explicitly use #{action}, safe-pg-migrations does it for you", *args
7
- SafePgMigrations.say "\t see #{link} for more details", *args if link
5
+ class << self
6
+ ruby2_keywords def warn_useless(action, link = nil, *args)
7
+ SafePgMigrations.say "/!\\ No need to explicitly use #{action}, safe-pg-migrations does it for you", *args
8
+ SafePgMigrations.say "\t see #{link} for more details", *args if link
9
+ end
8
10
  end
9
11
 
10
- def add_index(*, **options)
12
+ ruby2_keywords def add_index(*args)
13
+ options = args.last.is_a?(Hash) ? args.last : {}
11
14
  warn_for_index(**options)
12
15
  super
13
16
  end
14
17
 
15
- def remove_index(table_name, options = {})
16
- warn_for_index(options) if options.is_a? Hash
18
+ ruby2_keywords def remove_index(table_name, *args)
19
+ options = args.last.is_a?(Hash) ? args.last : {}
20
+ warn_for_index(**options) unless options.empty?
17
21
  super
18
22
  end
19
23
 
20
- def add_foreign_key(*, **options)
24
+ ruby2_keywords def add_foreign_key(*args)
25
+ options = args.last.is_a?(Hash) ? args.last : {}
21
26
  if options[:validate] == false
22
27
  UselessStatementsLogger.warn_useless '`validate: :false`', 'https://github.com/doctolib/safe-pg-migrations#safe_add_foreign_key'
23
28
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SafePgMigrations
4
- VERSION = '1.2.3'
4
+ VERSION = '1.3.0'
5
5
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safe-pg-migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu Prat
8
8
  - Romain Choquet
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-04-30 00:00:00.000000000 Z
12
+ date: 2021-06-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -39,6 +39,20 @@ dependencies:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '5.2'
42
+ - !ruby/object:Gem::Dependency
43
+ name: ruby2_keywords
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 0.0.4
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 0.0.4
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: bundler
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -174,7 +188,7 @@ homepage: https://github.com/doctolib/safe-pg-migrations
174
188
  licenses:
175
189
  - MIT
176
190
  metadata: {}
177
- post_install_message:
191
+ post_install_message:
178
192
  rdoc_options: []
179
193
  require_paths:
180
194
  - lib
@@ -183,15 +197,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
197
  - - ">="
184
198
  - !ruby/object:Gem::Version
185
199
  version: '2.5'
200
+ - - "<"
201
+ - !ruby/object:Gem::Version
202
+ version: '4'
186
203
  required_rubygems_version: !ruby/object:Gem::Requirement
187
204
  requirements:
188
205
  - - ">="
189
206
  - !ruby/object:Gem::Version
190
207
  version: '0'
191
208
  requirements: []
192
- rubyforge_project:
209
+ rubyforge_project:
193
210
  rubygems_version: 2.7.3
194
- signing_key:
211
+ signing_key:
195
212
  specification_version: 4
196
213
  summary: Make your PG migrations safe.
197
214
  test_files: []