Class: PgSqlTriggers::Registry::Validator
- Inherits:
-
Object
- Object
- PgSqlTriggers::Registry::Validator
- Defined in:
- lib/pg_sql_triggers/registry/validator.rb
Overview
rubocop:disable Metrics/ClassLength – validation rules grouped in one class
Constant Summary collapse
- VALID_EVENTS =
%w[insert update delete truncate].freeze
- VALID_TIMINGS =
%w[before after instead_of].freeze
- VALID_FOR_EACH =
%w[row statement].freeze
Class Method Summary collapse
-
.related_triggers_for_show(trigger_record) ⇒ Object
Prerequisite and dependent DSL triggers for the trigger detail page.
-
.trigger_order_validation_errors ⇒ Object
Returns dependency-related errors (missing refs, cycles, incompatible pairs, name order).
- .validate! ⇒ Object
Class Method Details
.related_triggers_for_show(trigger_record) ⇒ Object
Prerequisite and dependent DSL triggers for the trigger detail page.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/pg_sql_triggers/registry/validator.rb', line 41 def self.(trigger_record) empty = { prerequisites: [], dependents: [] } return empty if trigger_record.blank? || trigger_record.source != "dsl" defn = parse_definition(trigger_record.definition) prerequisite_names = normalize_depends_on(defn) prerequisites = prerequisite_names.filter_map do |dep_name| PgSqlTriggers::TriggerRegistry.find_by(source: "dsl", trigger_name: dep_name) end dependents = [] PgSqlTriggers::TriggerRegistry.where(source: "dsl").find_each do |row| next if row.id == trigger_record.id other = parse_definition(row.definition) dependents << row if normalize_depends_on(other).include?(trigger_record.trigger_name) end { prerequisites: prerequisites.sort_by(&:trigger_name), dependents: dependents.sort_by(&:trigger_name) } end |
.trigger_order_validation_errors ⇒ Object
Returns dependency-related errors (missing refs, cycles, incompatible pairs, name order). Used by rake trigger:validate_order and included in validate!.
35 36 37 38 |
# File 'lib/pg_sql_triggers/registry/validator.rb', line 35 def self.trigger_order_validation_errors dsl_triggers = PgSqlTriggers::TriggerRegistry.where(source: "dsl").to_a collect_dependency_and_order_errors(dsl_triggers) end |
.validate! ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/pg_sql_triggers/registry/validator.rb', line 14 def self.validate! errors = [] dsl_triggers = PgSqlTriggers::TriggerRegistry.where(source: "dsl").to_a dsl_triggers.each do |trigger| errors.concat(validate_dsl_trigger(trigger)) end errors.concat(collect_dependency_and_order_errors(dsl_triggers)) return true if errors.empty? raise PgSqlTriggers::ValidationError.new( "Registry validation failed:\n#{errors.map { |e| " - #{e}" }.join("\n")}", error_code: "VALIDATION_FAILED", context: { errors: errors } ) end |