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.
- checksums.yaml +7 -0
- data/.codeclimate.yml +7 -0
- data/.github/workflows/test.yml +54 -0
- data/.gitignore +14 -0
- data/.pryrc +11 -0
- data/.rspec +2 -0
- data/.rubocop.yml +66 -0
- data/.rubocop_todo.yml +238 -0
- data/20250312235906_add_deleted_reason_to_newsfeed_activities.rb +5 -0
- data/Appraisals +15 -0
- data/CHANGELOG.md +224 -0
- data/CODE_OF_CONDUCT.md +50 -0
- data/Dockerfile +32 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +206 -0
- data/LICENSE.txt +22 -0
- data/README.md +246 -0
- data/RELEASING.md +17 -0
- data/Rakefile +25 -0
- data/bin/console +14 -0
- data/bin/rails +24 -0
- data/bin/rspec +16 -0
- data/bin/setup +7 -0
- data/config.yml.erb +5 -0
- data/configuration.rb +16 -0
- data/departure-next.gemspec +34 -0
- data/docker-compose.yml +23 -0
- data/gemfiles/rails_6_1.gemfile +10 -0
- data/gemfiles/rails_6_1.gemfile.lock +243 -0
- data/gemfiles/rails_7_0.gemfile +10 -0
- data/gemfiles/rails_7_0.gemfile.lock +242 -0
- data/gemfiles/rails_7_1.gemfile +10 -0
- data/gemfiles/rails_7_1.gemfile.lock +274 -0
- data/gemfiles/rails_7_2.gemfile +10 -0
- data/gemfiles/rails_7_2.gemfile.lock +274 -0
- data/lib/active_record/connection_adapters/for_alter.rb +103 -0
- data/lib/active_record/connection_adapters/patch_connection_handling.rb +18 -0
- data/lib/active_record/connection_adapters/percona_adapter.rb +187 -0
- data/lib/active_record/connection_adapters/rails_7_2_departure_adapter.rb +218 -0
- data/lib/departure/alter_argument.rb +49 -0
- data/lib/departure/cli_generator.rb +84 -0
- data/lib/departure/command.rb +105 -0
- data/lib/departure/configuration.rb +21 -0
- data/lib/departure/connection_base.rb +11 -0
- data/lib/departure/connection_details.rb +121 -0
- data/lib/departure/dsn.rb +25 -0
- data/lib/departure/errors.rb +39 -0
- data/lib/departure/log_sanitizers/password_sanitizer.rb +22 -0
- data/lib/departure/logger.rb +42 -0
- data/lib/departure/logger_factory.rb +16 -0
- data/lib/departure/migration.rb +104 -0
- data/lib/departure/null_logger.rb +15 -0
- data/lib/departure/option.rb +75 -0
- data/lib/departure/rails_adapter.rb +97 -0
- data/lib/departure/railtie.rb +21 -0
- data/lib/departure/runner.rb +75 -0
- data/lib/departure/user_options.rb +44 -0
- data/lib/departure/version.rb +3 -0
- data/lib/departure.rb +40 -0
- data/lib/lhm/adapter.rb +107 -0
- data/lib/lhm/column_with_sql.rb +89 -0
- data/lib/lhm/column_with_type.rb +29 -0
- data/lib/lhm.rb +23 -0
- data/test_database.rb +76 -0
- metadata +282 -0
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
|
data/lib/lhm/adapter.rb
ADDED
@@ -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: []
|