class RuboCop::Cop::RSpec::Rails::TravelAround

before { freeze_time }
# good
end
end
example.run
freeze_time do
around do |example|
# bad
@example
`around`.
execution will change if other steps exist before traveling in
And also, this cop’s autocorrection is unsafe because the order of
on test cases that are considered as Rails related.
This cop is unsafe because the automatic ‘travel_back` is only run
@safety
Prefer to travel in `before` rather than `around`.

def autocorrect(corrector, node, run_node, around_node)

def autocorrect(corrector, node, run_node, around_node)
  corrector.replace(
    node,
    node.body.source
  )
  corrector.insert_before(
    around_node,
    "before { #{run_node.source} }\n\n"
  )
end

def extract_surrounding_around_block(node)

Returns:
  • (RuboCop::AST::BlockNode, nil) -

Parameters:
  • node (RuboCop::AST::BlockNode) --
def extract_surrounding_around_block(node)
  node.each_ancestor(:block).find do |ancestor|
    match_around_each?(ancestor)
  end
end

def on_block(node)

def on_block(node)
  run_node = extract_run_in_travel(node)
  return unless run_node
  around_node = extract_surrounding_around_block(run_node)
  return unless around_node
  add_offense(node) do |corrector|
    autocorrect(corrector, node, run_node, around_node)
  end
end