ridgepole 3.1.0 → 3.1.1

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: d387024f72e2f0cadf0c913d9d6d1863753401ed8cdd35759effd47e5405d3fd
4
- data.tar.gz: ed16c2c4ce6e91797eba24c94384dc2e03db5e39ca18e9119daa4e19a67bd97e
3
+ metadata.gz: 90db85660b9c1b91946bec50b7af82e03d3b686a3270ba4c12f7253dd31ecd40
4
+ data.tar.gz: '09660a78f0e35155b58423d737391b531405aa895edab86bcc8f6f4213461fef'
5
5
  SHA512:
6
- metadata.gz: ea58375d9d0f3aa45084f08dabdea2719bbdd973229214dd60388fdd375d05dc3814b9131afb48a0c3b445b505a23f7c25b99a27f255549db81abf948a88a04e
7
- data.tar.gz: 692d7e680804f86feab03fdebf1aa8f0f88af8f752e04cafec57a5406be64240114d6327a1651a74dae483d31336d0ab09b0f566524f8bd7f133a3e0e9862bb7
6
+ metadata.gz: 4e86c295eaafec04bcd2235932312e74d327abb7db2f5be519da092c87a585ade3c9ce7887720426b76ad532ec7e467e4cebd1f570e9a8cb6b0ff3dbcba7f13e
7
+ data.tar.gz: 55dc8d759ec3d788fc07f24ca15c48ca323166bf838f6ebe8ae13383192c5c15577da07d2f431f30c5c8571dfed24fa90dd62aa72cd20afff7abc40af0bca4ba
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## 3.0
4
4
 
5
+ ### 3.1.1 (2025/10/31)
6
+
7
+ - Add `--disable-sort-columns` option [pull#601](https://github.com/ridgepole/ridgepole/pull/601)
8
+
5
9
  ### 3.1.0 (2025/10/30)
6
10
 
7
11
  - Support Rails 8.1 [pull#589](https://github.com/ridgepole/ridgepole/pull/589)
data/README.md CHANGED
@@ -9,7 +9,14 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
9
9
  [![test](https://github.com/ridgepole/ridgepole/actions/workflows/test.yml/badge.svg)](https://github.com/ridgepole/ridgepole/actions/workflows/test.yml)
10
10
  [![Coverage Status](https://coveralls.io/repos/github/ridgepole/ridgepole/badge.svg?branch=3.0)](https://coveralls.io/github/ridgepole/ridgepole?branch=3.0)
11
11
 
12
+ > [!warning]
13
+ > The order of columns when exporting has changed in Rails 8.1. https://github.com/rails/rails/pull/53281
14
+ >
15
+ > If you do not want to sort the columns, use `--disable-sort-columns` option.
16
+
12
17
  > [!note]
18
+ > * ridgepole v3.1.0
19
+ > * Support Rails 8.1 (cf. https://github.com/ridgepole/ridgepole/pull/589)
13
20
  > * ridgepole v3.0.0
14
21
  > * Support Rails 8.0 (cf. https://github.com/ridgepole/ridgepole/pull/504)
15
22
  > * ridgepole v2.0.0
@@ -92,6 +99,7 @@ Usage: ridgepole [options]
92
99
  --skip-column-comment-change
93
100
  --allow-pk-change
94
101
  --create-table-with-index
102
+ --disable-sort-columns
95
103
  --mysql-dump-auto-increment
96
104
  -r, --require LIBS
97
105
  --log-file LOG_FILE
data/bin/ridgepole CHANGED
@@ -145,6 +145,7 @@ ARGV.options do |opt|
145
145
  opt.on('', '--skip-column-comment-change') { options[:skip_column_comment_change] = true }
146
146
  opt.on('', '--allow-pk-change') { options[:allow_pk_change] = true }
147
147
  opt.on('', '--create-table-with-index') { options[:create_table_with_index] = true }
148
+ opt.on('', '--disable-sort-columns') { options[:disable_sort_columns] = true }
148
149
 
149
150
  opt.on('', '--mysql-dump-auto-increment') do
150
151
  options[:mysql_dump_auto_increment] = true
@@ -16,6 +16,7 @@ module Ridgepole
16
16
  @diff = Ridgepole::Diff.new(@options)
17
17
 
18
18
  require 'ridgepole/ext/abstract_mysql_adapter/dump_auto_increment' if @options[:mysql_dump_auto_increment]
19
+ require 'ridgepole/ext/schema_dumper/disable_sort_columns' if @options[:disable_sort_columns]
19
20
  end
20
21
 
21
22
  def dump(&block)
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_record/schema_dumper'
4
+
5
+ module Ridgepole
6
+ module Ext
7
+ module SchemaDumper
8
+ module DisableSortColumns
9
+ def table(table, stream)
10
+ def @connection.columns(*_args)
11
+ cols = super
12
+ def cols.sort_by(*_args, &_block)
13
+ self
14
+ end
15
+ cols
16
+ end
17
+ super
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ module ActiveRecord
25
+ class SchemaDumper
26
+ prepend Ridgepole::Ext::SchemaDumper::DisableSortColumns
27
+ end
28
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_record/schema_dumper'
4
+
5
+ module Ridgepole
6
+ module Ext
7
+ module SchemaDumper
8
+ module ForeignKeys
9
+ def self.prepended(klass)
10
+ klass.extend ClassMethods
11
+ end
12
+
13
+ module ClassMethods
14
+ attr_reader :__with_default_fk_name
15
+
16
+ def with_default_fk_name(value)
17
+ @__with_default_fk_name = value
18
+ yield
19
+ ensure
20
+ remove_instance_variable(:@__with_default_fk_name)
21
+ end
22
+ end
23
+
24
+ def foreign_keys(table, stream)
25
+ return super unless ActiveRecord::SchemaDumper.__with_default_fk_name
26
+
27
+ if (foreign_keys = @connection.foreign_keys(table)).any?
28
+ add_foreign_key_statements = foreign_keys.map do |foreign_key|
29
+ parts = [
30
+ "add_foreign_key #{remove_prefix_and_suffix(foreign_key.from_table).inspect}",
31
+ remove_prefix_and_suffix(foreign_key.to_table).inspect
32
+ ]
33
+
34
+ parts << "column: #{foreign_key.column.inspect}" if foreign_key.column != foreign_key_column_for(foreign_key)
35
+
36
+ parts << "primary_key: #{foreign_key.primary_key.inspect}" if foreign_key.custom_primary_key?
37
+
38
+ parts << "name: #{foreign_key.name.inspect}"
39
+
40
+ parts << "on_update: #{foreign_key.on_update.inspect}" if foreign_key.on_update
41
+ parts << "on_delete: #{foreign_key.on_delete.inspect}" if foreign_key.on_delete
42
+
43
+ " #{parts.join(', ')}"
44
+ end
45
+
46
+ stream.puts add_foreign_key_statements.sort.join("\n")
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def foreign_key_column_for(foreign_key)
53
+ if ActiveRecord.gem_version < Gem::Version.new('7.1.0')
54
+ @connection.foreign_key_column_for(foreign_key.to_table)
55
+ else
56
+ @connection.foreign_key_column_for(foreign_key.to_table, 'id')
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ module ActiveRecord
65
+ class SchemaDumper
66
+ prepend Ridgepole::Ext::SchemaDumper::ForeignKeys
67
+ end
68
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ridgepole
4
- VERSION = '3.1.0'
4
+ VERSION = '3.1.1'
5
5
  end
data/lib/ridgepole.rb CHANGED
@@ -17,7 +17,7 @@ module Ridgepole; end
17
17
 
18
18
  require 'ridgepole/ext/abstract_adapter/disable_table_options'
19
19
  require 'ridgepole/ext/pp_sort_hash'
20
- require 'ridgepole/ext/schema_dumper'
20
+ require 'ridgepole/ext/schema_dumper/foreign_keys'
21
21
  require 'ridgepole/client'
22
22
  require 'ridgepole/connection_adapters'
23
23
  require 'ridgepole/default_limit'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridgepole
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
@@ -337,7 +337,8 @@ files:
337
337
  - lib/ridgepole/ext/abstract_adapter/disable_table_options.rb
338
338
  - lib/ridgepole/ext/abstract_mysql_adapter/dump_auto_increment.rb
339
339
  - lib/ridgepole/ext/pp_sort_hash.rb
340
- - lib/ridgepole/ext/schema_dumper.rb
340
+ - lib/ridgepole/ext/schema_dumper/disable_sort_columns.rb
341
+ - lib/ridgepole/ext/schema_dumper/foreign_keys.rb
341
342
  - lib/ridgepole/external_sql_executer.rb
342
343
  - lib/ridgepole/logger.rb
343
344
  - lib/ridgepole/migration_ext.rb
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_record/schema_dumper'
4
-
5
- module Ridgepole
6
- module Ext
7
- module SchemaDumper
8
- def self.prepended(klass)
9
- klass.extend ClassMethods
10
- end
11
-
12
- module ClassMethods
13
- attr_reader :__with_default_fk_name
14
-
15
- def with_default_fk_name(value)
16
- @__with_default_fk_name = value
17
- yield
18
- ensure
19
- remove_instance_variable(:@__with_default_fk_name)
20
- end
21
- end
22
-
23
- def foreign_keys(table, stream)
24
- return super unless ActiveRecord::SchemaDumper.__with_default_fk_name
25
-
26
- if (foreign_keys = @connection.foreign_keys(table)).any?
27
- add_foreign_key_statements = foreign_keys.map do |foreign_key|
28
- parts = [
29
- "add_foreign_key #{remove_prefix_and_suffix(foreign_key.from_table).inspect}",
30
- remove_prefix_and_suffix(foreign_key.to_table).inspect
31
- ]
32
-
33
- parts << "column: #{foreign_key.column.inspect}" if foreign_key.column != foreign_key_column_for(foreign_key)
34
-
35
- parts << "primary_key: #{foreign_key.primary_key.inspect}" if foreign_key.custom_primary_key?
36
-
37
- parts << "name: #{foreign_key.name.inspect}"
38
-
39
- parts << "on_update: #{foreign_key.on_update.inspect}" if foreign_key.on_update
40
- parts << "on_delete: #{foreign_key.on_delete.inspect}" if foreign_key.on_delete
41
-
42
- " #{parts.join(', ')}"
43
- end
44
-
45
- stream.puts add_foreign_key_statements.sort.join("\n")
46
- end
47
- end
48
-
49
- private
50
-
51
- def foreign_key_column_for(foreign_key)
52
- if ActiveRecord.gem_version < Gem::Version.new('7.1.0')
53
- @connection.foreign_key_column_for(foreign_key.to_table)
54
- else
55
- @connection.foreign_key_column_for(foreign_key.to_table, 'id')
56
- end
57
- end
58
- end
59
- end
60
- end
61
-
62
- module ActiveRecord
63
- class SchemaDumper
64
- prepend Ridgepole::Ext::SchemaDumper
65
- end
66
- end