Class: PgSqlTriggers::Migrator::SafetyValidator
- Inherits:
-
Object
- Object
- PgSqlTriggers::Migrator::SafetyValidator
- Defined in:
- lib/pg_sql_triggers/migrator/safety_validator.rb
Overview
Validates that migrations don’t blindly DROP + CREATE objects This ensures safety by detecting unsafe patterns and blocking them
Defined Under Namespace
Classes: UnsafeOperationError
Class Method Summary collapse
-
.detect_unsafe_patterns(migration_instance, direction) ⇒ Object
Detect unsafe patterns in migration SQL Returns array of violation hashes.
-
.validate!(migration_instance, direction: :up, allow_unsafe: false) ⇒ Object
Validate that a migration doesn’t perform unsafe DROP + CREATE operations Raises UnsafeOperationError if unsafe patterns are detected.
-
.validate_sql!(captured_sql, allow_unsafe: false) ⇒ Object
Validate using pre-captured SQL (avoids re-instantiating the migration class).
Class Method Details
.detect_unsafe_patterns(migration_instance, direction) ⇒ Object
Detect unsafe patterns in migration SQL Returns array of violation hashes
53 54 55 56 |
# File 'lib/pg_sql_triggers/migrator/safety_validator.rb', line 53 def detect_unsafe_patterns(migration_instance, direction) captured_sql = capture_sql(migration_instance, direction) detect_unsafe_patterns_from_sql(captured_sql) end |
.validate!(migration_instance, direction: :up, allow_unsafe: false) ⇒ Object
Validate that a migration doesn’t perform unsafe DROP + CREATE operations Raises UnsafeOperationError if unsafe patterns are detected
27 28 29 30 31 32 33 34 35 |
# File 'lib/pg_sql_triggers/migrator/safety_validator.rb', line 27 def validate!(migration_instance, direction: :up, allow_unsafe: false) return if allow_unsafe violations = detect_unsafe_patterns(migration_instance, direction) return if violations.empty? = (violations, migration_instance.class.name) raise UnsafeOperationError.new(, violations) end |
.validate_sql!(captured_sql, allow_unsafe: false) ⇒ Object
Validate using pre-captured SQL (avoids re-instantiating the migration class). Direction is intentionally not a parameter here – the captured SQL already reflects the direction that was executed to produce it. Raises UnsafeOperationError if unsafe patterns are detected.
41 42 43 44 45 46 47 48 49 |
# File 'lib/pg_sql_triggers/migrator/safety_validator.rb', line 41 def validate_sql!(captured_sql, allow_unsafe: false) return if allow_unsafe violations = detect_unsafe_patterns_from_sql(captured_sql) return if violations.empty? = (violations, "(migration)") raise UnsafeOperationError.new(, violations) end |