diff options
Diffstat (limited to 'lib/gitlab/database/schema_validation/inconsistency_filter.rb')
-rw-r--r-- | lib/gitlab/database/schema_validation/inconsistency_filter.rb | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/gitlab/database/schema_validation/inconsistency_filter.rb b/lib/gitlab/database/schema_validation/inconsistency_filter.rb new file mode 100644 index 00000000000..aa3a71c0edb --- /dev/null +++ b/lib/gitlab/database/schema_validation/inconsistency_filter.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module Gitlab + module Database + module SchemaValidation + class InconsistencyFilter + def initialize(tables, triggers) + @tables = tables + @triggers = triggers + end + + def to_proc + proc do |inconsistency| + inconsistency unless ignored?(inconsistency) + end + end + + private + + attr_reader :tables, :triggers + + def ignored?(inconsistency) + case inconsistency.type + in 'extra_tables' | 'missing_tables' + ignored_table?(inconsistency.table_name) + in 'extra_triggers' | 'missing_triggers' + ignored_trigger?(inconsistency.object_name) + else + false + end + end + + def ignored_table?(name) + tables.include?(name) + end + + def ignored_trigger?(name) + triggers.any? { |ignored_object| name.to_s.include?(ignored_object) } + end + end + end + end +end |