class RuboCop::Cop::Style::TernaryCorrector

Corrector to correct conditional assignment in ternary conditions.

def correct(node)

def correct(node)
  lambda do |corrector|
    corrector.replace(node.source_range, correction(node))
  end
end

def correction(node)

def correction(node)
  condition, if_branch, else_branch = *node
  "#{lhs(if_branch)}#{ternary(condition, if_branch, else_branch)}"
end

def element_assignment?(node)

def element_assignment?(node)
  node.send_type? && node.method_name != :[]=
end

def extract_branches(node)

def extract_branches(node)
  *_var, rhs = *node
  condition, = *rhs if rhs.begin_type? && rhs.children.one?
  _condition, if_branch, else_branch = *(condition || rhs)
  [if_branch, else_branch]
end

def move_assignment_inside_condition(node)

def move_assignment_inside_condition(node)
  *_var, rhs = *node
  if_branch, else_branch = extract_branches(node)
  assignment = assignment(node)
  lambda do |corrector|
    remove_parentheses(corrector, rhs) if Util.parentheses?(rhs)
    corrector.remove(assignment)
    move_branch_inside_condition(corrector, if_branch, assignment)
    move_branch_inside_condition(corrector, else_branch, assignment)
  end
end

def move_branch_inside_condition(corrector, branch, assignment)

def move_branch_inside_condition(corrector, branch, assignment)
  corrector.insert_before(branch.loc.expression, assignment.source)
end

def remove_parentheses(corrector, node)

def remove_parentheses(corrector, node)
  corrector.remove(node.loc.begin)
  corrector.remove(node.loc.end)
end

def ternary(condition, if_branch, else_branch)

def ternary(condition, if_branch, else_branch)
  _variable, *_operator, if_rhs = *if_branch
  _else_variable, *_operator, else_rhs = *else_branch
  expr = "#{condition.source} ? #{if_rhs.source} : #{else_rhs.source}"
  element_assignment?(if_branch) ? "(#{expr})" : expr
end