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
This cop checks for potential usage of the ‘||=` operator.
def autocorrect(node)
def autocorrect(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 lambda do |corrector| corrector.replace(node.source_range, "#{variable} ||= #{default.source}") end end
def on_if(node)
def on_if(node) return unless unless_assignment?(node) add_offense(node) end
def on_lvasgn(node)
def on_lvasgn(node) return unless ternary_assignment?(node) add_offense(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) variable, default = *node.if_branch [variable, default] end