pg_saurus 5.3.0 → 6.0.0

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: e4dfa9fa5e2ea0cf5c38fc323434ff9a8e2fd0fc051adf45e378d31d09bfd3bb
4
- data.tar.gz: db821a3566aea980399af5d4178771d42b7aac460549905e8f2765690e930562
3
+ metadata.gz: 5a8ddb3d62425c2f23a5fdf1b329d7a84be0129ab1be67bb87ca0a5150994720
4
+ data.tar.gz: 13cf5197c303baa0c95bf53d44d582e0c783ade8694329be03de7397cd53e46f
5
5
  SHA512:
6
- metadata.gz: 8b5c252cba03504a37fb499a6c38fb7a97807025ff3aa0e9574a12036fa1583b7d4307d5398a3aaa0dda2979a764a5d7af3c8a96da80e6ae7d399c268b234e75
7
- data.tar.gz: c5b8a0629e1a25d53e52f57451e9efa54f8e31a5b8abab97f0b1de624eca446893785a53e2b54d372bb0a0f1e83fd128cd0bb27badc816d5fd093a57e35cc762
6
+ metadata.gz: fb9565fa59ab7b6cbd3087e0d1a63b57f14832a2987e17ab010db47ff8ee46fa6b272d3e8b001c62b3ad699327b1a4151a1d5d64cc7552486129cb8e4cef2aca
7
+ data.tar.gz: 51ad1458b2cfebec850f8ef9144a4613a11598824b29e77a53dd06cacddd0c1e0bb3cb1dba7fcdbeb66c7ecbccbb6c16ca220bf8712aa8ba1944edfda9b50c0e
@@ -263,13 +263,20 @@ module ActiveRecord
263
263
  private :expression_index_name
264
264
 
265
265
 
266
+ # Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L923
267
+ #
266
268
  # == Patch 1:
267
269
  # Remove schema name part from table name when sequence name doesn't include it.
268
- def new_column_from_field(table_name, field)
269
- column_name, type, default, notnull, oid, fmod, collation, comment = field
270
+ def new_column_from_field(table_name, field, ...)
271
+ column_name, type, default, notnull, oid, fmod, collation, comment, identity, attgenerated = field
270
272
  type_metadata = fetch_type_metadata(column_name, type, oid.to_i, fmod.to_i)
271
273
  default_value = extract_value_from_default(default)
272
- default_function = extract_default_function(default_value, default)
274
+
275
+ if attgenerated.present?
276
+ default_function = default
277
+ else
278
+ default_function = extract_default_function(default_value, default)
279
+ end
273
280
 
274
281
  if match = default_function&.match(/\Anextval\('"?(?<sequence_name>.+_(?<suffix>seq\d*))"?'::regclass\)\z/)
275
282
  sequence_name = match[:sequence_name]
@@ -287,7 +294,9 @@ module ActiveRecord
287
294
  default_function,
288
295
  collation: collation,
289
296
  comment: comment.presence,
290
- serial: serial
297
+ serial: serial,
298
+ identity: identity.presence,
299
+ generated: attgenerated
291
300
  )
292
301
  end
293
302
  private :new_column_from_field
@@ -342,6 +351,19 @@ module ActiveRecord
342
351
  column_with_type.sub(/\((\w+)\)::\w+/, '\1')
343
352
  end
344
353
  private :remove_type
354
+
355
+ # Override to only check table name, not schema and table name.
356
+ #
357
+ # https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb#L1787
358
+ def validate_table_length!(table_name)
359
+ max_table_name_length = 64
360
+ if table_name.to_s.split(".").last.length > max_table_name_length
361
+ raise ArgumentError, <<~MSG.squish
362
+ Table name '#{table_name}' is too long (#{table_name.length} characters); the limit is
363
+ #{max_table_name_length} characters
364
+ MSG
365
+ end
366
+ end
345
367
  end
346
368
  end
347
369
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ class Migration
5
+ module Compatibility
6
+ # PgSaurus has been properly creating functional index names since Rails 4, so we don't want the old logic
7
+ class V7_0
8
+ module TableDefinition
9
+ # Override https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/migration/compatibility.rb#L80
10
+ def index(...)
11
+ super
12
+ end
13
+ end
14
+ # Override https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/migration/compatibility.rb#L102
15
+ def add_index(...)
16
+ super
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -24,7 +24,7 @@ module PgSaurus # :nodoc:
24
24
  #
25
25
  # Creates index on the FK column by default. Pass in the option exclude_index: true
26
26
  # to disable this.
27
- def add_foreign_key(from_table, to_table, options = {})
27
+ def add_foreign_key(from_table, to_table, **options)
28
28
  exclude_index = (options.has_key?(:exclude_index) ? options.delete(:exclude_index) : false)
29
29
  column = options[:column] || foreign_key_column_for(to_table)
30
30
 
@@ -57,10 +57,14 @@ module PgSaurus # :nodoc:
57
57
  # See: activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
58
58
  #
59
59
  # Removes schema name from table name.
60
- def foreign_key_column_for(table_name)
60
+ def foreign_key_column_for(table_name, column_name = "id")
61
61
  table = table_name.to_s.split('.').last
62
62
 
63
- super table
63
+ if Rails.gem_version >= "7.2"
64
+ super table, column_name
65
+ else
66
+ super table
67
+ end
64
68
  end
65
69
 
66
70
  # See activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
@@ -19,11 +19,12 @@ module PgSaurus
19
19
  schema_dumper
20
20
  errors
21
21
  connection_adapters/postgresql/schema_statements
22
+ migration/compatibility
22
23
  ].each do |path|
23
24
  require ::PgSaurus::Engine.root + "lib/core_ext/active_record/" + path
24
25
  end
25
26
 
26
- ActiveRecord::SchemaDumper.class_eval do
27
+ ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaDumper.class_eval do
27
28
  prepend ::PgSaurus::SchemaDumper::SchemaMethods
28
29
  prepend ::PgSaurus::SchemaDumper::ExtensionMethods
29
30
  prepend ::PgSaurus::SchemaDumper::ViewMethods
@@ -1,17 +1,11 @@
1
1
  # Extends ActiveRecord::SchemaDumper class to dump comments on tables and columns.
2
2
  module PgSaurus::SchemaDumper::ExtensionMethods
3
- # Hook ActiveRecord::SchemaDumper#header method to dump extensions in all
4
- # schemas except for pg_catalog.
5
- def header(stream)
6
- super(stream)
7
- dump_extensions(stream)
8
- stream
9
- end
10
-
11
- # Dump current database extensions recreation commands to the given stream.
12
- #
13
- # @param [#puts] stream Stream to write to
14
- def dump_extensions(stream)
3
+ # Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb#L8
4
+ #
5
+ # Dump current database extensions recreation commands to the given stream.
6
+ #
7
+ # @param [#puts] stream Stream to write to
8
+ def extensions(stream)
15
9
  extensions = @connection.pg_extensions
16
10
  commands = extensions.map do |extension_name, options|
17
11
  result = [%Q|create_extension "#{extension_name}"|]
@@ -25,5 +19,7 @@ module PgSaurus::SchemaDumper::ExtensionMethods
25
19
  end
26
20
 
27
21
  stream.puts
22
+
23
+ super
28
24
  end
29
25
  end
@@ -1,27 +1,33 @@
1
1
  # Extends ActiveRecord::SchemaDumper class to dump schemas other than "public"
2
2
  # and tables from those schemas.
3
3
  module PgSaurus::SchemaDumper::SchemaMethods
4
- # Dump create schema statements
4
+
5
+ # Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/schema_dumper.rb#L95
5
6
  def header(stream)
6
- super(stream)
7
- schemas(stream)
8
- stream
7
+ super
8
+ dump_schemas(stream)
9
+ end
10
+
11
+ # Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb#L31
12
+ #
13
+ # We are already dumping the schemas through #header
14
+ def schemas(...)
9
15
  end
10
16
 
11
17
  # Generates code to create schemas.
12
- def schemas(stream)
18
+ def dump_schemas(stream)
13
19
  # Don't create "public" schema since it exists by default.
14
20
  schema_names = PgSaurus::Tools.schemas - ["public", "information_schema"]
15
21
  schema_names.each do |schema_name|
16
- schema(schema_name, stream)
22
+ dump_schema(schema_name, stream)
17
23
  end
18
- stream << "\n"
24
+ stream.puts
19
25
  end
20
- private :schemas
26
+ private :dump_schemas
21
27
 
22
28
  # Generates code to create schema.
23
- def schema(schema_name, stream)
24
- stream << " create_schema_if_not_exists \"#{schema_name}\"\n"
29
+ def dump_schema(schema_name, stream)
30
+ stream.puts %( create_schema_if_not_exists "#{schema_name}")
25
31
  end
26
- private :schema
32
+ private :dump_schema
27
33
  end
@@ -1,4 +1,4 @@
1
1
  module PgSaurus
2
2
  # Version of pg_saurus gem.
3
- VERSION = "5.3.0"
3
+ VERSION = "6.0.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_saurus
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Potapov Sergey
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2022-07-09 00:00:00.000000000 Z
16
+ date: 2025-10-29 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: pg
@@ -33,72 +33,72 @@ dependencies:
33
33
  name: psych
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
- - - "~>"
36
+ - - ">="
37
37
  - !ruby/object:Gem::Version
38
- version: '3'
38
+ version: '0'
39
39
  type: :runtime
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
- - - "~>"
43
+ - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: '3'
45
+ version: '0'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: railties
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  requirements:
50
- - - "~>"
50
+ - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '6.0'
52
+ version: '8'
53
53
  type: :runtime
54
54
  prerelease: false
55
55
  version_requirements: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - "~>"
57
+ - - "<"
58
58
  - !ruby/object:Gem::Version
59
- version: '6.0'
59
+ version: '8'
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: activemodel
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - "~>"
64
+ - - "<"
65
65
  - !ruby/object:Gem::Version
66
- version: '6.0'
66
+ version: '8'
67
67
  type: :runtime
68
68
  prerelease: false
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - "~>"
71
+ - - "<"
72
72
  - !ruby/object:Gem::Version
73
- version: '6.0'
73
+ version: '8'
74
74
  - !ruby/object:Gem::Dependency
75
75
  name: activerecord
76
76
  requirement: !ruby/object:Gem::Requirement
77
77
  requirements:
78
- - - "~>"
78
+ - - "<"
79
79
  - !ruby/object:Gem::Version
80
- version: '6.0'
80
+ version: '8'
81
81
  type: :runtime
82
82
  prerelease: false
83
83
  version_requirements: !ruby/object:Gem::Requirement
84
84
  requirements:
85
- - - "~>"
85
+ - - "<"
86
86
  - !ruby/object:Gem::Version
87
- version: '6.0'
87
+ version: '8'
88
88
  - !ruby/object:Gem::Dependency
89
89
  name: activesupport
90
90
  requirement: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - "~>"
92
+ - - "<"
93
93
  - !ruby/object:Gem::Version
94
- version: '6.0'
94
+ version: '8'
95
95
  type: :runtime
96
96
  prerelease: false
97
97
  version_requirements: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - "~>"
99
+ - - "<"
100
100
  - !ruby/object:Gem::Version
101
- version: '6.0'
101
+ version: '8'
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rspec-rails
104
104
  requirement: !ruby/object:Gem::Requirement
@@ -155,20 +155,6 @@ dependencies:
155
155
  - - ">="
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
- - !ruby/object:Gem::Dependency
159
- name: byebug
160
- requirement: !ruby/object:Gem::Requirement
161
- requirements:
162
- - - ">="
163
- - !ruby/object:Gem::Version
164
- version: '0'
165
- type: :development
166
- prerelease: false
167
- version_requirements: !ruby/object:Gem::Requirement
168
- requirements:
169
- - - ">="
170
- - !ruby/object:Gem::Version
171
- version: '0'
172
158
  - !ruby/object:Gem::Dependency
173
159
  name: pry
174
160
  requirement: !ruby/object:Gem::Requirement
@@ -228,6 +214,7 @@ files:
228
214
  - lib/colorized_text.rb
229
215
  - lib/core_ext/active_record/connection_adapters/postgresql/schema_statements.rb
230
216
  - lib/core_ext/active_record/errors.rb
217
+ - lib/core_ext/active_record/migration/compatibility.rb
231
218
  - lib/core_ext/active_record/schema_dumper.rb
232
219
  - lib/generators/pg_saurus/install/install_generator.rb
233
220
  - lib/generators/pg_saurus/install/templates/config/initializers/pg_saurus.rb
@@ -298,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
298
285
  - !ruby/object:Gem::Version
299
286
  version: '0'
300
287
  requirements: []
301
- rubygems_version: 3.0.9
288
+ rubygems_version: 3.5.22
302
289
  signing_key:
303
290
  specification_version: 4
304
291
  summary: ActiveRecord extensions for PostgreSQL.