activerecord-pg-extensions 0.6.0 → 0.7.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: 4afe6f86c7d6e70fbe8bf563f3a1a936f037e95843d0a28f40c4cf0116063d09
4
- data.tar.gz: f698a408ffd364bed38e9b481106f3d585c0b211732d0f200962ffa25abcb13d
3
+ metadata.gz: d50633abe33747fede3503dad765972ffd7abd47f6aa3da2e955981820aff2ee
4
+ data.tar.gz: ea51e816b3bb0c969e5ee2a6626206e9bd8b429ad4589caac620eaa3ca7d31b6
5
5
  SHA512:
6
- metadata.gz: 4c1edbd6eaeb219958aad2e9c10313c74597f91d47c088f151d2b5aa716fbfa02d13a37196b93fc1f01a20861ba6bc4dc461b9437cbee950aa98d4647c4273c9
7
- data.tar.gz: 3362f3d6025a904b697793182e83135eca5c667af94dceeefad5039ebb582f8fe1524791f26ce01f8324fd25f7da63d8cad4a019e324e98b9a00c5ad5706136c
6
+ metadata.gz: fa97981e3721d0cc3d90697254cf89cd21666976ddeacc2e774112d3d02d0f74eaaf30fef33532965b2d8243e6f2ca2806f548d404987677cd02ba7192dbcb9f
7
+ data.tar.gz: 93243bece3aceba1d70646dc7a34b5b8902d6673029b31788aee0beb836b00573cc50c142501ccd4842097276ddfb217eea3ce0d9209ea4eedc48cbecba73654
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module PGExtensions
5
+ # adds support for reverting migration methods added by this gem
6
+ module CommandRecorder
7
+ def rename_constraint(table_name, old_name, new_name, **options)
8
+ record(:rename_constraint, [table_name, old_name, new_name, options])
9
+ end
10
+
11
+ def invert_rename_constraint(args)
12
+ table_name, old_name, new_name, options = args
13
+ options ||= {}
14
+ # flag the trailing hash as keyword arguments so it's replayed as
15
+ # `rename_constraint(..., if_exists:)` rather than a positional hash
16
+ [:rename_constraint, [table_name, new_name, old_name, Hash.ruby2_keywords_hash(options)]]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -27,6 +27,17 @@ module ActiveRecord
27
27
  set_constraints(:immediate, *constraints)
28
28
  end
29
29
 
30
+ # renames a constraint on a table
31
+ # see https://www.postgresql.org/docs/current/sql-altertable.html
32
+ def rename_constraint(table_name, old_name, new_name, if_exists: false)
33
+ return if if_exists && !constraint_exists?(table_name, name: old_name)
34
+
35
+ execute(<<~SQL.squish)
36
+ ALTER TABLE #{quote_table_name(table_name)}
37
+ RENAME CONSTRAINT #{quote_column_name(old_name)} TO #{quote_column_name(new_name)}
38
+ SQL
39
+ end
40
+
30
41
  # see https://www.postgresql.org/docs/current/sql-altertable.html#SQL-CREATETABLE-REPLICA-IDENTITY
31
42
  def set_replica_identity(table, identity = :default)
32
43
  identity_clause = case identity
@@ -57,7 +68,7 @@ module ActiveRecord
57
68
  raise ArgumentError, "Cannot change schema and upgrade to a particular version in a single statement"
58
69
  end
59
70
 
60
- sql = +"ALTER EXTENSION #{extension}"
71
+ sql = "ALTER EXTENSION #{extension}"
61
72
  sql << " UPDATE" if version
62
73
  sql << " TO #{quote(version)}" if version && version != true
63
74
  sql << " SET SCHEMA #{schema}" if schema
@@ -285,6 +296,19 @@ module ActiveRecord
285
296
  super
286
297
  end
287
298
 
299
+ def constraint_exists?(table_name, name:)
300
+ scope = quoted_scope(name)
301
+ table = quoted_scope(table_name)
302
+ select_value(<<~SQL, "SCHEMA") == 1
303
+ SELECT 1 FROM pg_constraint
304
+ INNER JOIN pg_class ON pg_class.oid = pg_constraint.conrelid
305
+ INNER JOIN pg_namespace ON pg_namespace.oid = pg_constraint.connamespace
306
+ WHERE pg_constraint.conname = #{scope[:name]}
307
+ AND pg_class.relname = #{table[:name]}
308
+ AND pg_namespace.nspname = #{scope[:schema]}
309
+ SQL
310
+ end
311
+
288
312
  def pre_pg10_wal_function_name(func)
289
313
  return func if postgresql_version >= 100_000
290
314
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rails/railtie"
3
+ require "rails"
4
4
 
5
5
  module ActiveRecord
6
6
  module PGExtensions
@@ -10,9 +10,11 @@ module ActiveRecord
10
10
  ActiveSupport.on_load(:active_record) do
11
11
  require "active_record/pg_extensions/errors"
12
12
  require "active_record/pg_extensions/postgresql_adapter"
13
+ require "active_record/pg_extensions/command_recorder"
13
14
  require "active_record/pg_extensions/transaction"
14
15
 
15
16
  ::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(PostgreSQLAdapter)
17
+ ::ActiveRecord::Migration::CommandRecorder.include(CommandRecorder)
16
18
  ::ActiveRecord::ConnectionAdapters::NullTransaction.prepend(NullTransaction)
17
19
  ::ActiveRecord::ConnectionAdapters::Transaction.prepend(Transaction)
18
20
  # if they've already require 'all', then inject now
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  module PGExtensions
5
- VERSION = "0.6.0"
5
+ VERSION = "0.7.1"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-pg-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-04 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activerecord
@@ -16,138 +15,40 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '7.0'
18
+ version: '7.2'
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: '8.1'
21
+ version: '8.2'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- version: '7.0'
28
+ version: '7.2'
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: '8.1'
31
+ version: '8.2'
33
32
  - !ruby/object:Gem::Dependency
34
33
  name: railties
35
34
  requirement: !ruby/object:Gem::Requirement
36
35
  requirements:
37
36
  - - ">="
38
37
  - !ruby/object:Gem::Version
39
- version: '7.0'
38
+ version: '7.2'
40
39
  - - "<"
41
40
  - !ruby/object:Gem::Version
42
- version: '8.1'
41
+ version: '8.2'
43
42
  type: :runtime
44
43
  prerelease: false
45
44
  version_requirements: !ruby/object:Gem::Requirement
46
45
  requirements:
47
46
  - - ">="
48
47
  - !ruby/object:Gem::Version
49
- version: '7.0'
48
+ version: '7.2'
50
49
  - - "<"
51
50
  - !ruby/object:Gem::Version
52
- version: '8.1'
53
- - !ruby/object:Gem::Dependency
54
- name: debug
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '1.8'
60
- type: :development
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '1.8'
67
- - !ruby/object:Gem::Dependency
68
- name: pg
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '1.2'
74
- type: :development
75
- prerelease: false
76
- version_requirements: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '1.2'
81
- - !ruby/object:Gem::Dependency
82
- name: rake
83
- requirement: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - "~>"
86
- - !ruby/object:Gem::Version
87
- version: '13.0'
88
- type: :development
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - "~>"
93
- - !ruby/object:Gem::Version
94
- version: '13.0'
95
- - !ruby/object:Gem::Dependency
96
- name: rspec
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '3.0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - "~>"
107
- - !ruby/object:Gem::Version
108
- version: '3.0'
109
- - !ruby/object:Gem::Dependency
110
- name: rubocop-inst
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '1'
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: '1'
123
- - !ruby/object:Gem::Dependency
124
- name: rubocop-rake
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: '0.5'
130
- type: :development
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - "~>"
135
- - !ruby/object:Gem::Version
136
- version: '0.5'
137
- - !ruby/object:Gem::Dependency
138
- name: rubocop-rspec
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - "~>"
142
- - !ruby/object:Gem::Version
143
- version: '2.3'
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - "~>"
149
- - !ruby/object:Gem::Version
150
- version: '2.3'
51
+ version: '8.2'
151
52
  description: Several extensions to ActiveRecord's PostgreSQLAdapter.
152
53
  email:
153
54
  - cody@instructure.com
@@ -160,6 +61,7 @@ files:
160
61
  - README.md
161
62
  - lib/active_record/pg_extensions.rb
162
63
  - lib/active_record/pg_extensions/all.rb
64
+ - lib/active_record/pg_extensions/command_recorder.rb
163
65
  - lib/active_record/pg_extensions/errors.rb
164
66
  - lib/active_record/pg_extensions/extension.rb
165
67
  - lib/active_record/pg_extensions/pessimistic_migrations.rb
@@ -174,7 +76,6 @@ licenses:
174
76
  metadata:
175
77
  changelog_uri: https://github.com/instructure/activerecord-pg-extensions/blob/main/CHANGELOG.md
176
78
  rubygems_mfa_required: 'true'
177
- post_install_message:
178
79
  rdoc_options: []
179
80
  require_paths:
180
81
  - lib
@@ -182,15 +83,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
182
83
  requirements:
183
84
  - - ">="
184
85
  - !ruby/object:Gem::Version
185
- version: '2.7'
86
+ version: '3.3'
186
87
  required_rubygems_version: !ruby/object:Gem::Requirement
187
88
  requirements:
188
89
  - - ">="
189
90
  - !ruby/object:Gem::Version
190
91
  version: '0'
191
92
  requirements: []
192
- rubygems_version: 3.4.10
193
- signing_key:
93
+ rubygems_version: 4.0.16
194
94
  specification_version: 4
195
95
  summary: Several extensions to ActiveRecord's PostgreSQLAdapter.
196
96
  test_files: []