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.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +120 -0
- data/CHANGELOG.md +52 -0
- data/Goal.md +294 -0
- data/LICENSE +21 -0
- data/README.md +294 -0
- data/RELEASE.md +270 -0
- data/Rakefile +16 -0
- data/app/assets/javascripts/pg_sql_triggers/application.js +5 -0
- data/app/assets/stylesheets/pg_sql_triggers/application.css +179 -0
- data/app/controllers/pg_sql_triggers/application_controller.rb +35 -0
- data/app/controllers/pg_sql_triggers/dashboard_controller.rb +42 -0
- data/app/controllers/pg_sql_triggers/generator_controller.rb +145 -0
- data/app/controllers/pg_sql_triggers/migrations_controller.rb +84 -0
- data/app/controllers/pg_sql_triggers/tables_controller.rb +44 -0
- data/app/models/pg_sql_triggers/application_record.rb +7 -0
- data/app/models/pg_sql_triggers/trigger_registry.rb +93 -0
- data/app/views/layouts/pg_sql_triggers/application.html.erb +72 -0
- data/app/views/pg_sql_triggers/dashboard/index.html.erb +225 -0
- data/app/views/pg_sql_triggers/generator/new.html.erb +370 -0
- data/app/views/pg_sql_triggers/generator/preview.html.erb +77 -0
- data/app/views/pg_sql_triggers/tables/index.html.erb +105 -0
- data/app/views/pg_sql_triggers/tables/show.html.erb +126 -0
- data/config/routes.rb +35 -0
- data/db/migrate/20251222000001_create_pg_sql_triggers_tables.rb +29 -0
- data/lib/generators/pg_sql_triggers/install_generator.rb +36 -0
- data/lib/generators/pg_sql_triggers/templates/README +36 -0
- data/lib/generators/pg_sql_triggers/templates/create_pg_sql_triggers_tables.rb +36 -0
- data/lib/generators/pg_sql_triggers/templates/initializer.rb +27 -0
- data/lib/generators/pg_sql_triggers/templates/trigger_migration.rb.erb +32 -0
- data/lib/generators/pg_sql_triggers/trigger_migration_generator.rb +60 -0
- data/lib/generators/trigger/migration_generator.rb +60 -0
- data/lib/pg_sql_triggers/database_introspection.rb +251 -0
- data/lib/pg_sql_triggers/drift.rb +24 -0
- data/lib/pg_sql_triggers/dsl/trigger_definition.rb +67 -0
- data/lib/pg_sql_triggers/dsl.rb +15 -0
- data/lib/pg_sql_triggers/engine.rb +29 -0
- data/lib/pg_sql_triggers/generator/form.rb +78 -0
- data/lib/pg_sql_triggers/generator/service.rb +251 -0
- data/lib/pg_sql_triggers/generator.rb +8 -0
- data/lib/pg_sql_triggers/migration.rb +15 -0
- data/lib/pg_sql_triggers/migrator.rb +237 -0
- data/lib/pg_sql_triggers/permissions/checker.rb +33 -0
- data/lib/pg_sql_triggers/permissions.rb +35 -0
- data/lib/pg_sql_triggers/registry/manager.rb +47 -0
- data/lib/pg_sql_triggers/registry/validator.rb +15 -0
- data/lib/pg_sql_triggers/registry.rb +36 -0
- data/lib/pg_sql_triggers/sql.rb +21 -0
- data/lib/pg_sql_triggers/testing/dry_run.rb +74 -0
- data/lib/pg_sql_triggers/testing/function_tester.rb +118 -0
- data/lib/pg_sql_triggers/testing/safe_executor.rb +66 -0
- data/lib/pg_sql_triggers/testing/syntax_validator.rb +124 -0
- data/lib/pg_sql_triggers/testing.rb +10 -0
- data/lib/pg_sql_triggers/version.rb +15 -0
- data/lib/pg_sql_triggers.rb +41 -0
- data/lib/tasks/trigger_migrations.rake +254 -0
- data/sig/pg_sql_triggers.rbs +4 -0
- 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
|
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: []
|