class RuboCop::Cop::Style::OrAssignment

name ||= ‘Bozhidar’
# good - set name to ‘Bozhidar’, only if it’s nil or false
name = ‘Bozhidar’ unless name
# bad
end
name = ‘Bozhidar’
unless name
# bad
end
’Bozhidar’
else
name
name = if name
# bad
name = name ? name : ‘Bozhidar’
# bad
@example
Checks for potential usage of the ‘||=` operator.

def autocorrect(corrector, node)

def autocorrect(corrector, node)
  if ternary_assignment?(node)
    variable, default = take_variable_and_default_from_ternary(node)
  else
    variable, default = take_variable_and_default_from_unless(node)
  end
  corrector.replace(node, "#{variable} ||= #{default.source}")
end

def on_if(node)

def on_if(node)
  return unless unless_assignment?(node)
  add_offense(node) { |corrector| autocorrect(corrector, node) }
end

def on_lvasgn(node)

def on_lvasgn(node)
  return unless (else_branch = ternary_assignment?(node))
  return if else_branch.if_type?
  add_offense(node) { |corrector| autocorrect(corrector, node) }
end

def take_variable_and_default_from_ternary(node)

def take_variable_and_default_from_ternary(node)
  variable, if_statement = *node
  [variable, if_statement.else_branch]
end

def take_variable_and_default_from_unless(node)

def take_variable_and_default_from_unless(node)
  if node.if_branch
    variable, default = *node.if_branch
  else
    variable, default = *node.else_branch
  end
  [variable, default]
end