trabajo-afectivo/.rubocop/cop/zammad/exists_db_strategy.rb

46 lines
1.3 KiB
Ruby

# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
module RuboCop
module Cop
module Zammad
class ExistsDbStrategy < Base
def_node_matcher :migration_execute?, <<-PATTERN
$(send (const (const _ :ObjectManager ) :Attribute) :migration_execute)
PATTERN
def_node_matcher :create_attribute?, <<-PATTERN
$(send _ :create_attribute ...)
PATTERN
def_node_matcher :is_block?, <<-PATTERN
$(block ...)
PATTERN
def_node_matcher :has_reset?, <<-PATTERN
$(send _ {:describe :context :it} (_ ...) (hash ... (pair (sym :db_strategy) (sym {:reset :reset_all}))))
PATTERN
MSG = 'Add a `db_strategy: :reset` to your context/decribe when you are creating object manager attributes!'.freeze
def on_send(node)
return if !migration_execute?(node) && !create_attribute?(node)
reset = false
node_parent = node.parent
until node_parent.nil?
if is_block?(node_parent) && has_reset?(node_parent.children[0])
reset = true
break
end
node_parent = node_parent.parent
end
return if reset
add_offense(node)
end
end
end
end
end