pg_sql_triggers 1.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.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +120 -0
  4. data/CHANGELOG.md +52 -0
  5. data/Goal.md +294 -0
  6. data/LICENSE +21 -0
  7. data/README.md +294 -0
  8. data/RELEASE.md +270 -0
  9. data/Rakefile +16 -0
  10. data/app/assets/javascripts/pg_sql_triggers/application.js +5 -0
  11. data/app/assets/stylesheets/pg_sql_triggers/application.css +179 -0
  12. data/app/controllers/pg_sql_triggers/application_controller.rb +35 -0
  13. data/app/controllers/pg_sql_triggers/dashboard_controller.rb +42 -0
  14. data/app/controllers/pg_sql_triggers/generator_controller.rb +145 -0
  15. data/app/controllers/pg_sql_triggers/migrations_controller.rb +84 -0
  16. data/app/controllers/pg_sql_triggers/tables_controller.rb +44 -0
  17. data/app/models/pg_sql_triggers/application_record.rb +7 -0
  18. data/app/models/pg_sql_triggers/trigger_registry.rb +93 -0
  19. data/app/views/layouts/pg_sql_triggers/application.html.erb +72 -0
  20. data/app/views/pg_sql_triggers/dashboard/index.html.erb +225 -0
  21. data/app/views/pg_sql_triggers/generator/new.html.erb +370 -0
  22. data/app/views/pg_sql_triggers/generator/preview.html.erb +77 -0
  23. data/app/views/pg_sql_triggers/tables/index.html.erb +105 -0
  24. data/app/views/pg_sql_triggers/tables/show.html.erb +126 -0
  25. data/config/routes.rb +35 -0
  26. data/db/migrate/20251222000001_create_pg_sql_triggers_tables.rb +29 -0
  27. data/lib/generators/pg_sql_triggers/install_generator.rb +36 -0
  28. data/lib/generators/pg_sql_triggers/templates/README +36 -0
  29. data/lib/generators/pg_sql_triggers/templates/create_pg_sql_triggers_tables.rb +36 -0
  30. data/lib/generators/pg_sql_triggers/templates/initializer.rb +27 -0
  31. data/lib/generators/pg_sql_triggers/templates/trigger_migration.rb.erb +32 -0
  32. data/lib/generators/pg_sql_triggers/trigger_migration_generator.rb +60 -0
  33. data/lib/generators/trigger/migration_generator.rb +60 -0
  34. data/lib/pg_sql_triggers/database_introspection.rb +251 -0
  35. data/lib/pg_sql_triggers/drift.rb +24 -0
  36. data/lib/pg_sql_triggers/dsl/trigger_definition.rb +67 -0
  37. data/lib/pg_sql_triggers/dsl.rb +15 -0
  38. data/lib/pg_sql_triggers/engine.rb +29 -0
  39. data/lib/pg_sql_triggers/generator/form.rb +78 -0
  40. data/lib/pg_sql_triggers/generator/service.rb +251 -0
  41. data/lib/pg_sql_triggers/generator.rb +8 -0
  42. data/lib/pg_sql_triggers/migration.rb +15 -0
  43. data/lib/pg_sql_triggers/migrator.rb +237 -0
  44. data/lib/pg_sql_triggers/permissions/checker.rb +33 -0
  45. data/lib/pg_sql_triggers/permissions.rb +35 -0
  46. data/lib/pg_sql_triggers/registry/manager.rb +47 -0
  47. data/lib/pg_sql_triggers/registry/validator.rb +15 -0
  48. data/lib/pg_sql_triggers/registry.rb +36 -0
  49. data/lib/pg_sql_triggers/sql.rb +21 -0
  50. data/lib/pg_sql_triggers/testing/dry_run.rb +74 -0
  51. data/lib/pg_sql_triggers/testing/function_tester.rb +118 -0
  52. data/lib/pg_sql_triggers/testing/safe_executor.rb +66 -0
  53. data/lib/pg_sql_triggers/testing/syntax_validator.rb +124 -0
  54. data/lib/pg_sql_triggers/testing.rb +10 -0
  55. data/lib/pg_sql_triggers/version.rb +15 -0
  56. data/lib/pg_sql_triggers.rb +41 -0
  57. data/lib/tasks/trigger_migrations.rake +254 -0
  58. data/sig/pg_sql_triggers.rbs +4 -0
  59. metadata +260 -0
@@ -0,0 +1,254 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :trigger do
4
+ desc "Migrate trigger migrations (options: VERSION=x, VERBOSE=false)"
5
+ task migrate: :environment do
6
+ PgSqlTriggers::Migrator.ensure_migrations_table!
7
+
8
+ target_version = ENV["VERSION"]&.to_i
9
+ verbose = ENV["VERBOSE"] != "false"
10
+
11
+ if verbose
12
+ puts "Running trigger migrations..."
13
+ puts "Current version: #{PgSqlTriggers::Migrator.current_version}"
14
+ end
15
+
16
+ PgSqlTriggers::Migrator.run_up(target_version)
17
+
18
+ puts "Trigger migrations complete. Current version: #{PgSqlTriggers::Migrator.current_version}" if verbose
19
+ end
20
+
21
+ desc "Rollback trigger migrations (specify steps w/ STEP=n)"
22
+ task rollback: :environment do
23
+ PgSqlTriggers::Migrator.ensure_migrations_table!
24
+
25
+ steps = ENV["STEP"] ? ENV["STEP"].to_i : 1
26
+ current_version = PgSqlTriggers::Migrator.current_version
27
+ target_version = [0, current_version - steps].max
28
+
29
+ puts "Rolling back trigger migrations..."
30
+ puts "Current version: #{current_version}"
31
+ puts "Target version: #{target_version}"
32
+
33
+ PgSqlTriggers::Migrator.run_down(target_version)
34
+
35
+ puts "Rollback complete. Current version: #{PgSqlTriggers::Migrator.current_version}"
36
+ end
37
+
38
+ desc "Display status of trigger migrations"
39
+ task "migrate:status" => :environment do
40
+ PgSqlTriggers::Migrator.ensure_migrations_table!
41
+
42
+ statuses = PgSqlTriggers::Migrator.status
43
+
44
+ if statuses.empty?
45
+ puts "No trigger migrations found"
46
+ return
47
+ end
48
+
49
+ puts "\nTrigger Migration Status"
50
+ puts "=" * 80
51
+ printf "%<version>-20s %<name>-40s %<status>-10s\n", version: "Version", name: "Name", status: "Status"
52
+ puts "-" * 80
53
+
54
+ statuses.each do |status|
55
+ printf "%<version>-20s %<name>-40s %<status>-10s\n",
56
+ version: status[:version],
57
+ name: status[:name],
58
+ status: status[:status]
59
+ end
60
+
61
+ puts "=" * 80
62
+ puts "Current version: #{PgSqlTriggers::Migrator.current_version}"
63
+ end
64
+
65
+ desc "Runs the 'up' for a given migration VERSION"
66
+ task "migrate:up" => :environment do
67
+ version = ENV.fetch("VERSION", nil)
68
+ raise "VERSION is required" unless version
69
+
70
+ PgSqlTriggers::Migrator.ensure_migrations_table!
71
+ PgSqlTriggers::Migrator.run_up(version.to_i)
72
+ puts "Trigger migration #{version} up complete"
73
+ end
74
+
75
+ desc "Runs the 'down' for a given migration VERSION"
76
+ task "migrate:down" => :environment do
77
+ version = ENV.fetch("VERSION", nil)
78
+ raise "VERSION is required" unless version
79
+
80
+ PgSqlTriggers::Migrator.ensure_migrations_table!
81
+ PgSqlTriggers::Migrator.run_down(version.to_i)
82
+ puts "Trigger migration #{version} down complete"
83
+ end
84
+
85
+ desc "Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x)"
86
+ task "migrate:redo" => :environment do
87
+ PgSqlTriggers::Migrator.ensure_migrations_table!
88
+
89
+ if ENV["VERSION"]
90
+ version = ENV["VERSION"].to_i
91
+ PgSqlTriggers::Migrator.run_down(version)
92
+ PgSqlTriggers::Migrator.run_up(version)
93
+ else
94
+ steps = ENV["STEP"] ? ENV["STEP"].to_i : 1
95
+ current_version = PgSqlTriggers::Migrator.current_version
96
+ target_version = [0, current_version - steps].max
97
+
98
+ PgSqlTriggers::Migrator.run_down(target_version)
99
+ PgSqlTriggers::Migrator.run_up
100
+ end
101
+
102
+ puts "Trigger migration redo complete"
103
+ end
104
+
105
+ desc "Retrieves the current schema version number for trigger migrations"
106
+ task version: :environment do
107
+ PgSqlTriggers::Migrator.ensure_migrations_table!
108
+ puts "Current trigger migration version: #{PgSqlTriggers::Migrator.current_version}"
109
+ end
110
+
111
+ desc "Raises an error if there are pending trigger migrations"
112
+ task "abort_if_pending_migrations" => :environment do
113
+ PgSqlTriggers::Migrator.ensure_migrations_table!
114
+
115
+ pending = PgSqlTriggers::Migrator.pending_migrations
116
+ if pending.any?
117
+ puts "You have #{pending.length} pending trigger migration(s):"
118
+ pending.each do |migration|
119
+ puts " #{migration.version}_#{migration.name}"
120
+ end
121
+ raise "Pending trigger migrations found"
122
+ end
123
+ end
124
+ end
125
+
126
+ # Combined tasks for running both schema and trigger migrations
127
+ namespace :db do
128
+ desc "Migrate the database schema and triggers (options: VERSION=x, VERBOSE=false)"
129
+ task "migrate:with_triggers" => :environment do
130
+ verbose = ENV["VERBOSE"] != "false"
131
+
132
+ puts "Running schema and trigger migrations..." if verbose
133
+
134
+ # Run schema migrations first
135
+ Rake::Task["db:migrate"].invoke
136
+
137
+ # Then run trigger migrations
138
+ Rake::Task["trigger:migrate"].invoke
139
+ end
140
+
141
+ desc "Rollback schema and trigger migrations (specify steps w/ STEP=n)"
142
+ task "rollback:with_triggers" => :environment do
143
+ ENV["STEP"] ? ENV["STEP"].to_i : 1
144
+
145
+ # Determine which type of migration was last run
146
+ schema_version = ActiveRecord::Base.connection.schema_migration_context.current_version || 0
147
+ trigger_version = PgSqlTriggers::Migrator.current_version
148
+
149
+ # Rollback the most recent migration (schema or trigger)
150
+ if schema_version > trigger_version
151
+ Rake::Task["db:rollback"].invoke
152
+ else
153
+ Rake::Task["trigger:rollback"].invoke
154
+ end
155
+ end
156
+
157
+ desc "Display status of schema and trigger migrations"
158
+ task "migrate:status:with_triggers" => :environment do
159
+ puts "\nSchema Migrations:"
160
+ puts "=" * 80
161
+ begin
162
+ Rake::Task["db:migrate:status"].invoke
163
+ rescue StandardError => e
164
+ puts "Error displaying schema migration status: #{e.message}"
165
+ end
166
+
167
+ puts "\nTrigger Migrations:"
168
+ puts "=" * 80
169
+ Rake::Task["trigger:migrate:status"].invoke
170
+ end
171
+
172
+ desc "Runs the 'up' for a given migration VERSION (schema or trigger)"
173
+ task "migrate:up:with_triggers" => :environment do
174
+ version = ENV.fetch("VERSION", nil)
175
+ raise "VERSION is required" unless version
176
+
177
+ version_int = version.to_i
178
+
179
+ # Check if it's a schema or trigger migration
180
+ schema_migrations = ActiveRecord::Base.connection.migration_context.migrations
181
+ trigger_migrations = PgSqlTriggers::Migrator.migrations
182
+
183
+ schema_migration = schema_migrations.find { |m| m.version == version_int }
184
+ trigger_migration = trigger_migrations.find { |m| m.version == version_int }
185
+
186
+ if schema_migration && trigger_migration
187
+ # Both exist - run schema first
188
+ Rake::Task["db:migrate:up"].invoke
189
+ Rake::Task["trigger:migrate:up"].invoke
190
+ elsif schema_migration
191
+ Rake::Task["db:migrate:up"].invoke
192
+ elsif trigger_migration
193
+ Rake::Task["trigger:migrate:up"].invoke
194
+ else
195
+ raise "No migration found with version #{version}"
196
+ end
197
+ rescue StandardError => e
198
+ puts "Error: #{e.message}"
199
+ raise
200
+ end
201
+
202
+ desc "Runs the 'down' for a given migration VERSION (schema or trigger)"
203
+ task "migrate:down:with_triggers" => :environment do
204
+ version = ENV.fetch("VERSION", nil)
205
+ raise "VERSION is required" unless version
206
+
207
+ version_int = version.to_i
208
+
209
+ # Check if it's a schema or trigger migration
210
+ schema_migrations = ActiveRecord::Base.connection.migration_context.migrations
211
+ trigger_migrations = PgSqlTriggers::Migrator.migrations
212
+
213
+ schema_migration = schema_migrations.find { |m| m.version == version_int }
214
+ trigger_migration = trigger_migrations.find { |m| m.version == version_int }
215
+
216
+ if schema_migration && trigger_migration
217
+ # Both exist - run trigger down first
218
+ Rake::Task["trigger:migrate:down"].invoke
219
+ Rake::Task["db:migrate:down"].invoke
220
+ elsif schema_migration
221
+ Rake::Task["db:migrate:down"].invoke
222
+ elsif trigger_migration
223
+ Rake::Task["trigger:migrate:down"].invoke
224
+ else
225
+ raise "No migration found with version #{version}"
226
+ end
227
+ end
228
+
229
+ desc "Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x)"
230
+ task "migrate:redo:with_triggers" => :environment do
231
+ if ENV["VERSION"]
232
+ Rake::Task["db:migrate:down:with_triggers"].invoke
233
+ Rake::Task["db:migrate:up:with_triggers"].invoke
234
+ else
235
+ Rake::Task["db:rollback:with_triggers"].invoke
236
+ Rake::Task["db:migrate:with_triggers"].invoke
237
+ end
238
+ end
239
+
240
+ desc "Retrieves the current schema version numbers for schema and trigger migrations"
241
+ task "version:with_triggers" => :environment do
242
+ schema_version = ActiveRecord::Base.connection.schema_migration_context.current_version
243
+ trigger_version = PgSqlTriggers::Migrator.current_version
244
+
245
+ puts "Schema migration version: #{schema_version || 0}"
246
+ puts "Trigger migration version: #{trigger_version}"
247
+ end
248
+
249
+ desc "Raises an error if there are pending migrations or trigger migrations"
250
+ task "abort_if_pending_migrations:with_triggers" => :environment do
251
+ Rake::Task["db:abort_if_pending_migrations"].invoke
252
+ Rake::Task["trigger:abort_if_pending_migrations"].invoke
253
+ end
254
+ end
@@ -0,0 +1,4 @@
1
+ module PgSqlTriggers
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,260 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pg_sql_triggers
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - samaswin87
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2025-12-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pg
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '6.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '6.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: database_cleaner-active_record
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: factory_bot_rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '6.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '6.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails-controller-testing
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '6.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '6.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.50'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.50'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2.19'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2.19'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.20'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.20'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.21'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.21'
167
+ description: Production-grade PostgreSQL trigger management for Rails with lifecycle
168
+ management, safe deploys, versioning, drift detection, and a mountable UI.
169
+ email:
170
+ - samaswin@gmail.com
171
+ executables: []
172
+ extensions: []
173
+ extra_rdoc_files: []
174
+ files:
175
+ - ".rspec"
176
+ - ".rubocop.yml"
177
+ - CHANGELOG.md
178
+ - Goal.md
179
+ - LICENSE
180
+ - README.md
181
+ - RELEASE.md
182
+ - Rakefile
183
+ - app/assets/javascripts/pg_sql_triggers/application.js
184
+ - app/assets/stylesheets/pg_sql_triggers/application.css
185
+ - app/controllers/pg_sql_triggers/application_controller.rb
186
+ - app/controllers/pg_sql_triggers/dashboard_controller.rb
187
+ - app/controllers/pg_sql_triggers/generator_controller.rb
188
+ - app/controllers/pg_sql_triggers/migrations_controller.rb
189
+ - app/controllers/pg_sql_triggers/tables_controller.rb
190
+ - app/models/pg_sql_triggers/application_record.rb
191
+ - app/models/pg_sql_triggers/trigger_registry.rb
192
+ - app/views/layouts/pg_sql_triggers/application.html.erb
193
+ - app/views/pg_sql_triggers/dashboard/index.html.erb
194
+ - app/views/pg_sql_triggers/generator/new.html.erb
195
+ - app/views/pg_sql_triggers/generator/preview.html.erb
196
+ - app/views/pg_sql_triggers/tables/index.html.erb
197
+ - app/views/pg_sql_triggers/tables/show.html.erb
198
+ - config/routes.rb
199
+ - db/migrate/20251222000001_create_pg_sql_triggers_tables.rb
200
+ - lib/generators/pg_sql_triggers/install_generator.rb
201
+ - lib/generators/pg_sql_triggers/templates/README
202
+ - lib/generators/pg_sql_triggers/templates/create_pg_sql_triggers_tables.rb
203
+ - lib/generators/pg_sql_triggers/templates/initializer.rb
204
+ - lib/generators/pg_sql_triggers/templates/trigger_migration.rb.erb
205
+ - lib/generators/pg_sql_triggers/trigger_migration_generator.rb
206
+ - lib/generators/trigger/migration_generator.rb
207
+ - lib/pg_sql_triggers.rb
208
+ - lib/pg_sql_triggers/database_introspection.rb
209
+ - lib/pg_sql_triggers/drift.rb
210
+ - lib/pg_sql_triggers/dsl.rb
211
+ - lib/pg_sql_triggers/dsl/trigger_definition.rb
212
+ - lib/pg_sql_triggers/engine.rb
213
+ - lib/pg_sql_triggers/generator.rb
214
+ - lib/pg_sql_triggers/generator/form.rb
215
+ - lib/pg_sql_triggers/generator/service.rb
216
+ - lib/pg_sql_triggers/migration.rb
217
+ - lib/pg_sql_triggers/migrator.rb
218
+ - lib/pg_sql_triggers/permissions.rb
219
+ - lib/pg_sql_triggers/permissions/checker.rb
220
+ - lib/pg_sql_triggers/registry.rb
221
+ - lib/pg_sql_triggers/registry/manager.rb
222
+ - lib/pg_sql_triggers/registry/validator.rb
223
+ - lib/pg_sql_triggers/sql.rb
224
+ - lib/pg_sql_triggers/testing.rb
225
+ - lib/pg_sql_triggers/testing/dry_run.rb
226
+ - lib/pg_sql_triggers/testing/function_tester.rb
227
+ - lib/pg_sql_triggers/testing/safe_executor.rb
228
+ - lib/pg_sql_triggers/testing/syntax_validator.rb
229
+ - lib/pg_sql_triggers/version.rb
230
+ - lib/tasks/trigger_migrations.rake
231
+ - sig/pg_sql_triggers.rbs
232
+ homepage: https://github.com/samaswin87/pg_sql_triggers
233
+ licenses:
234
+ - MIT
235
+ metadata:
236
+ homepage_uri: https://github.com/samaswin87/pg_sql_triggers
237
+ source_code_uri: https://github.com/samaswin87/pg_sql_triggers
238
+ changelog_uri: https://github.com/samaswin87/pg_sql_triggers/blob/main/CHANGELOG.md
239
+ github_repo: ssh://github.com/samaswin87/pg_sql_triggers
240
+ rubygems_mfa_required: 'true'
241
+ post_install_message:
242
+ rdoc_options: []
243
+ require_paths:
244
+ - lib
245
+ required_ruby_version: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: 2.7.0
250
+ required_rubygems_version: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
255
+ requirements: []
256
+ rubygems_version: 3.5.22
257
+ signing_key:
258
+ specification_version: 4
259
+ summary: A PostgreSQL Trigger Control Plane for Rails
260
+ test_files: []