departure-next 6.7.1.pre.pre

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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +7 -0
  3. data/.github/workflows/test.yml +54 -0
  4. data/.gitignore +14 -0
  5. data/.pryrc +11 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +66 -0
  8. data/.rubocop_todo.yml +238 -0
  9. data/20250312235906_add_deleted_reason_to_newsfeed_activities.rb +5 -0
  10. data/Appraisals +15 -0
  11. data/CHANGELOG.md +224 -0
  12. data/CODE_OF_CONDUCT.md +50 -0
  13. data/Dockerfile +32 -0
  14. data/Gemfile +11 -0
  15. data/Gemfile.lock +206 -0
  16. data/LICENSE.txt +22 -0
  17. data/README.md +246 -0
  18. data/RELEASING.md +17 -0
  19. data/Rakefile +25 -0
  20. data/bin/console +14 -0
  21. data/bin/rails +24 -0
  22. data/bin/rspec +16 -0
  23. data/bin/setup +7 -0
  24. data/config.yml.erb +5 -0
  25. data/configuration.rb +16 -0
  26. data/departure-next.gemspec +34 -0
  27. data/docker-compose.yml +23 -0
  28. data/gemfiles/rails_6_1.gemfile +10 -0
  29. data/gemfiles/rails_6_1.gemfile.lock +243 -0
  30. data/gemfiles/rails_7_0.gemfile +10 -0
  31. data/gemfiles/rails_7_0.gemfile.lock +242 -0
  32. data/gemfiles/rails_7_1.gemfile +10 -0
  33. data/gemfiles/rails_7_1.gemfile.lock +274 -0
  34. data/gemfiles/rails_7_2.gemfile +10 -0
  35. data/gemfiles/rails_7_2.gemfile.lock +274 -0
  36. data/lib/active_record/connection_adapters/for_alter.rb +103 -0
  37. data/lib/active_record/connection_adapters/patch_connection_handling.rb +18 -0
  38. data/lib/active_record/connection_adapters/percona_adapter.rb +187 -0
  39. data/lib/active_record/connection_adapters/rails_7_2_departure_adapter.rb +218 -0
  40. data/lib/departure/alter_argument.rb +49 -0
  41. data/lib/departure/cli_generator.rb +84 -0
  42. data/lib/departure/command.rb +105 -0
  43. data/lib/departure/configuration.rb +21 -0
  44. data/lib/departure/connection_base.rb +11 -0
  45. data/lib/departure/connection_details.rb +121 -0
  46. data/lib/departure/dsn.rb +25 -0
  47. data/lib/departure/errors.rb +39 -0
  48. data/lib/departure/log_sanitizers/password_sanitizer.rb +22 -0
  49. data/lib/departure/logger.rb +42 -0
  50. data/lib/departure/logger_factory.rb +16 -0
  51. data/lib/departure/migration.rb +104 -0
  52. data/lib/departure/null_logger.rb +15 -0
  53. data/lib/departure/option.rb +75 -0
  54. data/lib/departure/rails_adapter.rb +97 -0
  55. data/lib/departure/railtie.rb +21 -0
  56. data/lib/departure/runner.rb +75 -0
  57. data/lib/departure/user_options.rb +44 -0
  58. data/lib/departure/version.rb +3 -0
  59. data/lib/departure.rb +40 -0
  60. data/lib/lhm/adapter.rb +107 -0
  61. data/lib/lhm/column_with_sql.rb +89 -0
  62. data/lib/lhm/column_with_type.rb +29 -0
  63. data/lib/lhm.rb +23 -0
  64. data/test_database.rb +76 -0
  65. metadata +282 -0
@@ -0,0 +1,3 @@
1
+ module Departure
2
+ VERSION = '6.7.1-pre'.freeze
3
+ end
data/lib/departure.rb ADDED
@@ -0,0 +1,40 @@
1
+ require 'active_record'
2
+ require 'active_support/all'
3
+
4
+ require 'active_record/connection_adapters/for_alter'
5
+
6
+ require 'departure/version'
7
+ require 'departure/log_sanitizers/password_sanitizer'
8
+ require 'departure/runner'
9
+ require 'departure/cli_generator'
10
+ require 'departure/logger'
11
+ require 'departure/null_logger'
12
+ require 'departure/logger_factory'
13
+ require 'departure/configuration'
14
+ require 'departure/errors'
15
+ require 'departure/command'
16
+ require 'departure/connection_base'
17
+ require 'departure/migration'
18
+ require 'departure/rails_adapter'
19
+
20
+ require 'departure/railtie' if defined?(Rails)
21
+
22
+ # We need the OS not to buffer the IO to see pt-osc's output while migrating
23
+ $stdout.sync = true
24
+
25
+ Departure::RailsAdapter.for_current.register_integrations
26
+
27
+ module Departure
28
+ class << self
29
+ attr_accessor :configuration
30
+ end
31
+
32
+ def self.configure
33
+ self.configuration ||= Configuration.new
34
+ yield(configuration)
35
+ end
36
+
37
+ def self.load
38
+ # No-op left for compatibility
39
+ end
40
+ end
@@ -0,0 +1,107 @@
1
+ require 'lhm/column_with_sql'
2
+ require 'lhm/column_with_type'
3
+
4
+ module Lhm
5
+ # Translates Lhm DSL to ActiveRecord's one, so Lhm migrations will now go
6
+ # through Percona as well, without any modification on the migration's
7
+ # code
8
+ class Adapter
9
+ # Constructor
10
+ #
11
+ # @param migration [ActiveRecord::Migtration]
12
+ # @param table_name [String, Symbol]
13
+ def initialize(migration, table_name)
14
+ @migration = migration
15
+ @table_name = table_name
16
+ end
17
+
18
+ # Adds the specified column through ActiveRecord
19
+ #
20
+ # @param column_name [String, Symbol]
21
+ # @param definition [String, Symbol]
22
+ def add_column(column_name, definition)
23
+ attributes = column_attributes(column_name, definition)
24
+ migration.add_column(*attributes)
25
+ end
26
+
27
+ # Removes the specified column through ActiveRecord
28
+ #
29
+ # @param column_name [String, Symbol]
30
+ def remove_column(column_name)
31
+ migration.remove_column(table_name, column_name)
32
+ end
33
+
34
+ # Adds an index in the specified columns through ActiveRecord. Note you
35
+ # can provide a name as well
36
+ #
37
+ # @param columns [Array<String>, Array<Symbol>, String, Symbol]
38
+ # @param index_name [String]
39
+ def add_index(columns, index_name = nil)
40
+ options = { name: index_name } if index_name
41
+ migration.add_index(table_name, columns, options || {})
42
+ end
43
+
44
+ # Removes the index in the given columns or by its name
45
+ #
46
+ # @param columns [Array<String>, Array<Symbol>, String, Symbol]
47
+ # @param index_name [String]
48
+ def remove_index(columns, index_name = nil)
49
+ options = if index_name
50
+ { name: index_name }
51
+ else
52
+ { column: columns }
53
+ end
54
+ migration.remove_index(table_name, options)
55
+ end
56
+
57
+ # Change the column to use the provided definition, through ActiveRecord
58
+ #
59
+ # @param column_name [String, Symbol]
60
+ # @param definition [String, Symbol]
61
+ def change_column(column_name, definition)
62
+ attributes = column_attributes(column_name, definition)
63
+ migration.change_column(*attributes)
64
+ end
65
+
66
+ # Renames the old_name column to new_name by using ActiveRecord
67
+ #
68
+ # @param old_name [String, Symbol]
69
+ # @param new_name [String, Symbol]
70
+ def rename_column(old_name, new_name)
71
+ migration.rename_column(table_name, old_name, new_name)
72
+ end
73
+
74
+ # Adds a unique index on the given columns, with the provided name if passed
75
+ #
76
+ # @param columns [Array<String>, Array<Symbol>, String, Symbol]
77
+ # @param index_name [String]
78
+ def add_unique_index(columns, index_name = nil)
79
+ options = { unique: true }
80
+ options.merge!(name: index_name) if index_name # rubocop:disable Performance/RedundantMerge
81
+
82
+ migration.add_index(table_name, columns, options)
83
+ end
84
+
85
+ private
86
+
87
+ attr_reader :migration, :table_name
88
+
89
+ # Returns the instance of ActiveRecord column with the given name and
90
+ # definition
91
+ #
92
+ # @param name [String, Symbol]
93
+ # @param definition [String]
94
+ def column(name, definition)
95
+ @column ||= if definition.is_a?(Symbol)
96
+ ColumnWithType.new(name, definition)
97
+ else
98
+ ColumnWithSql.new(name, definition)
99
+ end
100
+ end
101
+
102
+ def column_attributes(name, definition)
103
+ attributes = column(name, definition).attributes
104
+ [table_name, name].concat(attributes)
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,89 @@
1
+ require 'forwardable'
2
+
3
+ module Lhm
4
+ # Abstracts the details of a table column definition when specified with a MySQL
5
+ # column definition string
6
+ class ColumnWithSql
7
+ extend Forwardable
8
+
9
+ # Constructor
10
+ #
11
+ # @param name [String, Symbol]
12
+ # @param definition [String]
13
+ def initialize(name, definition)
14
+ @name = name
15
+ @definition = definition
16
+ end
17
+
18
+ # Returns the column data as an Array to be used with the splat operator.
19
+ # See Lhm::Adaper#add_column
20
+ #
21
+ # @return [Array]
22
+ def attributes
23
+ [type, column_options]
24
+ end
25
+
26
+ private
27
+
28
+ def_delegators :column, :limit, :type, :default, :null
29
+
30
+ attr_reader :name, :definition
31
+
32
+ # TODO: investigate
33
+ #
34
+ # Rails doesn't take into account lenght argument of INT in the
35
+ # definition, as an integer it will default it to 4 not an integer
36
+ #
37
+ # Returns the columns data as a Hash
38
+ #
39
+ # @return [Hash]
40
+ def column_options
41
+ { limit: column.limit, default: column.default, null: column.null }
42
+ end
43
+
44
+ # Returns the column instance with the provided data
45
+ #
46
+ # @return [column_factory]
47
+ def column
48
+ cast_type = ActiveRecord::Base.connection.send(:lookup_cast_type, definition)
49
+ metadata = ActiveRecord::ConnectionAdapters::SqlTypeMetadata.new(
50
+ type: cast_type.type,
51
+ sql_type: definition,
52
+ limit: cast_type.limit
53
+ )
54
+ mysql_metadata = ActiveRecord::ConnectionAdapters::MySQL::TypeMetadata.new(metadata)
55
+ @column ||= Departure::RailsAdapter.for_current.sql_column.new(
56
+ name,
57
+ default_value,
58
+ mysql_metadata,
59
+ null_value
60
+ )
61
+ end
62
+
63
+ # Gets the DEFAULT value the column takes as specified in the
64
+ # definition, if any
65
+ #
66
+ # @return [String, NilClass]
67
+ def default_value
68
+ match = if definition.match?(/timestamp|datetime/i)
69
+ /default '?(.+[^'])'?/i.match(definition)
70
+ else
71
+ /default '?(\w+)'?/i.match(definition)
72
+ end
73
+
74
+ return unless match
75
+
76
+ match[1].downcase != 'null' ? match[1] : nil
77
+ end
78
+
79
+ # Checks whether the column accepts NULL as specified in the definition
80
+ #
81
+ # @return [Boolean]
82
+ def null_value
83
+ match = /((NOT)? NULL)/i.match(definition)
84
+ return true unless match
85
+
86
+ match[2]&.downcase == 'not' ? false : true
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,29 @@
1
+ module Lhm
2
+ # Abstracts the details of a table column definition when specified with a type
3
+ # as a symbol. This is the regular ActiveRecord's #add_column syntax:
4
+ #
5
+ # add_column :tablenames, :field, :string
6
+ #
7
+ class ColumnWithType
8
+ # Constructor
9
+ #
10
+ # @param name [String, Symbol]
11
+ # @param definition [Symbol]
12
+ def initialize(name, definition)
13
+ @name = name
14
+ @definition = definition
15
+ end
16
+
17
+ # Returns the column data as an Array to be used with the splat operator.
18
+ # See Lhm::Adaper#add_column
19
+ #
20
+ # @return [Array]
21
+ def attributes
22
+ [definition]
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :definition
28
+ end
29
+ end
data/lib/lhm.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'lhm/adapter'
2
+
3
+ # Defines the same global namespace as LHM's gem does to mimic its API
4
+ # while providing a different behaviour. We delegate all LHM's methods to
5
+ # ActiveRecord so that you don't need to modify your old LHM migrations
6
+ module Lhm
7
+ # Yields an adapter instance so that Lhm migration Dsl methods get
8
+ # delegated to ActiveRecord::Migration ones instead
9
+ #
10
+ # @param table_name [String]
11
+ # @param _options [Hash]
12
+ # @param block [Block]
13
+ def self.change_table(table_name, _options = {}, &block) # rubocop:disable Lint/UnusedMethodArgument
14
+ yield Adapter.new(@migration, table_name)
15
+ end
16
+
17
+ # Sets the migration to apply the adapter to
18
+ #
19
+ # @param migration [ActiveRecord::Migration]
20
+ def self.migration=(migration)
21
+ @migration = migration
22
+ end
23
+ end
data/test_database.rb ADDED
@@ -0,0 +1,76 @@
1
+ require 'active_record'
2
+ require 'active_record/connection_adapters/mysql2_adapter'
3
+ require 'departure'
4
+
5
+ # Setups the test database with the schema_migrations table that ActiveRecord
6
+ # requires for the migrations, plus a table for the Comment model used throught
7
+ # the tests.
8
+ #
9
+ class TestDatabase
10
+ # Constructor
11
+ #
12
+ # @param config [Hash]
13
+ def initialize(config)
14
+ @config = config
15
+ @database = config['database']
16
+ end
17
+
18
+ # Creates the test database, the schema_migrations and the comments tables.
19
+ # It drops any of them if they already exist
20
+ def setup
21
+ setup_test_database
22
+ drop_and_create_schema_migrations_table
23
+ end
24
+
25
+ # Creates the #{@database} database and the comments table in it.
26
+ # Before, it drops both if they already exist
27
+ def setup_test_database
28
+ drop_and_create_test_database
29
+ drop_and_create_comments_table
30
+ end
31
+
32
+ # Creates the ActiveRecord's schema_migrations table required for
33
+ # migrations to work. Before, it drops the table if it already exists
34
+ def drop_and_create_schema_migrations_table
35
+ sql = [
36
+ "USE #{@database}",
37
+ 'DROP TABLE IF EXISTS schema_migrations',
38
+ 'CREATE TABLE schema_migrations ( version varchar(255) COLLATE utf8_unicode_ci NOT NULL, UNIQUE KEY unique_schema_migrations (version)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'
39
+ ]
40
+
41
+ run_commands(sql)
42
+ end
43
+
44
+ private
45
+
46
+ attr_reader :config, :database
47
+
48
+ def drop_and_create_test_database
49
+ sql = [
50
+ "DROP DATABASE IF EXISTS #{@database}",
51
+ "CREATE DATABASE #{@database} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci"
52
+ ]
53
+
54
+ run_commands(sql)
55
+ end
56
+
57
+ def drop_and_create_comments_table
58
+ sql = [
59
+ "USE #{@database}",
60
+ 'DROP TABLE IF EXISTS comments',
61
+ 'CREATE TABLE comments ( id bigint(20) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'
62
+ ]
63
+
64
+ run_commands(sql)
65
+ end
66
+
67
+ def run_commands(sql)
68
+ conn.execute('START TRANSACTION')
69
+ sql.each { |str| conn.execute(str) }
70
+ conn.execute('COMMIT')
71
+ end
72
+
73
+ def conn
74
+ ActiveRecord::Base.connection
75
+ end
76
+ end
metadata ADDED
@@ -0,0 +1,282 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: departure-next
3
+ version: !ruby/object:Gem::Version
4
+ version: 6.7.1.pre.pre
5
+ platform: ruby
6
+ authors:
7
+ - Ilya Zayats
8
+ - Pau Pérez
9
+ - Fran Casas
10
+ - Jorge Morante
11
+ - Enrico Stano
12
+ - Adrian Serafin
13
+ - Kirk Haines
14
+ - Guillermo Iguaran
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+ date: 2025-03-14 00:00:00.000000000 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: railties
22
+ requirement: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 6.0.0
27
+ - - "!="
28
+ - !ruby/object:Gem::Version
29
+ version: 7.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 7.3.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 6.0.0
40
+ - - "!="
41
+ - !ruby/object:Gem::Version
42
+ version: 7.0.0
43
+ - - "<"
44
+ - !ruby/object:Gem::Version
45
+ version: 7.3.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: activerecord
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 6.0.0
53
+ - - "!="
54
+ - !ruby/object:Gem::Version
55
+ version: 7.0.0
56
+ - - "<"
57
+ - !ruby/object:Gem::Version
58
+ version: 7.3.0
59
+ type: :runtime
60
+ prerelease: false
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 6.0.0
66
+ - - "!="
67
+ - !ruby/object:Gem::Version
68
+ version: 7.0.0
69
+ - - "<"
70
+ - !ruby/object:Gem::Version
71
+ version: 7.3.0
72
+ - !ruby/object:Gem::Dependency
73
+ name: mysql2
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 0.4.0
79
+ - - "<"
80
+ - !ruby/object:Gem::Version
81
+ version: 0.6.0
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 0.4.0
89
+ - - "<"
90
+ - !ruby/object:Gem::Version
91
+ version: 0.6.0
92
+ - !ruby/object:Gem::Dependency
93
+ name: appraisal
94
+ requirement: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: 2.4.1
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: 2.4.1
106
+ - !ruby/object:Gem::Dependency
107
+ name: rake
108
+ requirement: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '10.0'
113
+ type: :development
114
+ prerelease: false
115
+ version_requirements: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '10.0'
120
+ - !ruby/object:Gem::Dependency
121
+ name: rspec
122
+ requirement: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: '3.4'
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 3.4.0
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '3.4'
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: 3.4.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: rspec-its
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '1.2'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '1.2'
154
+ - !ruby/object:Gem::Dependency
155
+ name: pry-byebug
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: climate_control
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: 0.0.3
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: 0.0.3
182
+ description: Execute your ActiveRecord migrations with Percona's pt-online-schema-change.
183
+ Formerly known as Percona Migrator.
184
+ email:
185
+ - ilya.zayats@redbooth.com
186
+ - pau.perez@redbooth.com
187
+ - nflamel@gmail.com
188
+ - jorge.morante@redbooth.com
189
+ - adrian@softmad.pl
190
+ - wyhaines@gmail.com
191
+ - guilleiguaran@gmail.com
192
+ executables: []
193
+ extensions: []
194
+ extra_rdoc_files: []
195
+ files:
196
+ - ".codeclimate.yml"
197
+ - ".github/workflows/test.yml"
198
+ - ".gitignore"
199
+ - ".pryrc"
200
+ - ".rspec"
201
+ - ".rubocop.yml"
202
+ - ".rubocop_todo.yml"
203
+ - 20250312235906_add_deleted_reason_to_newsfeed_activities.rb
204
+ - Appraisals
205
+ - CHANGELOG.md
206
+ - CODE_OF_CONDUCT.md
207
+ - Dockerfile
208
+ - Gemfile
209
+ - Gemfile.lock
210
+ - LICENSE.txt
211
+ - README.md
212
+ - RELEASING.md
213
+ - Rakefile
214
+ - bin/console
215
+ - bin/rails
216
+ - bin/rspec
217
+ - bin/setup
218
+ - config.yml.erb
219
+ - configuration.rb
220
+ - departure-next.gemspec
221
+ - docker-compose.yml
222
+ - gemfiles/rails_6_1.gemfile
223
+ - gemfiles/rails_6_1.gemfile.lock
224
+ - gemfiles/rails_7_0.gemfile
225
+ - gemfiles/rails_7_0.gemfile.lock
226
+ - gemfiles/rails_7_1.gemfile
227
+ - gemfiles/rails_7_1.gemfile.lock
228
+ - gemfiles/rails_7_2.gemfile
229
+ - gemfiles/rails_7_2.gemfile.lock
230
+ - lib/active_record/connection_adapters/for_alter.rb
231
+ - lib/active_record/connection_adapters/patch_connection_handling.rb
232
+ - lib/active_record/connection_adapters/percona_adapter.rb
233
+ - lib/active_record/connection_adapters/rails_7_2_departure_adapter.rb
234
+ - lib/departure.rb
235
+ - lib/departure/alter_argument.rb
236
+ - lib/departure/cli_generator.rb
237
+ - lib/departure/command.rb
238
+ - lib/departure/configuration.rb
239
+ - lib/departure/connection_base.rb
240
+ - lib/departure/connection_details.rb
241
+ - lib/departure/dsn.rb
242
+ - lib/departure/errors.rb
243
+ - lib/departure/log_sanitizers/password_sanitizer.rb
244
+ - lib/departure/logger.rb
245
+ - lib/departure/logger_factory.rb
246
+ - lib/departure/migration.rb
247
+ - lib/departure/null_logger.rb
248
+ - lib/departure/option.rb
249
+ - lib/departure/rails_adapter.rb
250
+ - lib/departure/railtie.rb
251
+ - lib/departure/runner.rb
252
+ - lib/departure/user_options.rb
253
+ - lib/departure/version.rb
254
+ - lib/lhm.rb
255
+ - lib/lhm/adapter.rb
256
+ - lib/lhm/column_with_sql.rb
257
+ - lib/lhm/column_with_type.rb
258
+ - test_database.rb
259
+ homepage: https://github.com/departurerb/departure
260
+ licenses:
261
+ - MIT
262
+ metadata: {}
263
+ post_install_message:
264
+ rdoc_options: []
265
+ require_paths:
266
+ - lib
267
+ required_ruby_version: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: 2.7.0
272
+ required_rubygems_version: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - ">"
275
+ - !ruby/object:Gem::Version
276
+ version: 1.3.1
277
+ requirements: []
278
+ rubygems_version: 3.4.19
279
+ signing_key:
280
+ specification_version: 4
281
+ summary: pt-online-schema-change runner for ActiveRecord migrations
282
+ test_files: []