class RuboCop::Cop::RSpec::FactoryBot::CreateList::CreateListCorrector

Attributes

node[R]

Public Class Methods

new(node) click to toggle source
# File lib/rubocop/cop/rspec/factory_bot/create_list.rb, line 141
def initialize(node)
  @node = node.parent
end

Public Instance Methods

call(corrector) click to toggle source
# File lib/rubocop/cop/rspec/factory_bot/create_list.rb, line 145
def call(corrector)
  replacement = if node.body.block_type?
                  call_with_block_replacement(node)
                else
                  call_replacement(node)
                end

  corrector.replace(node.loc.expression, replacement)
end

Private Instance Methods

build_arguments(node, count) click to toggle source
# File lib/rubocop/cop/rspec/factory_bot/create_list.rb, line 168
def build_arguments(node, count)
  factory, *options = *node.send_node.arguments

  arguments = ":#{factory.value}, #{count}"
  options = build_options_string(options)
  arguments += ", #{options}" unless options.empty?
  arguments
end
call_replacement(node) click to toggle source
# File lib/rubocop/cop/rspec/factory_bot/create_list.rb, line 177
def call_replacement(node)
  block = node.body
  factory, *options = *block.arguments

  arguments = "#{factory.source}, #{node.receiver.source}"
  options = build_options_string(options)
  arguments += ", #{options}" unless options.empty?

  replacement = format_receiver(block.receiver)
  replacement += format_method_call(block, 'create_list', arguments)
  replacement
end
call_with_block_replacement(node) click to toggle source
# File lib/rubocop/cop/rspec/factory_bot/create_list.rb, line 159
def call_with_block_replacement(node)
  block = node.body
  arguments = build_arguments(block, node.receiver.source)
  replacement = format_receiver(block.send_node.receiver)
  replacement += format_method_call(block, 'create_list', arguments)
  replacement += format_block(block)
  replacement
end
format_block(node) click to toggle source
# File lib/rubocop/cop/rspec/factory_bot/create_list.rb, line 190
def format_block(node)
  if node.body.begin_type?
    format_multiline_block(node)
  else
    format_singeline_block(node)
  end
end
format_multiline_block(node) click to toggle source
# File lib/rubocop/cop/rspec/factory_bot/create_list.rb, line 198
def format_multiline_block(node)
  indent = ' ' * node.body.loc.column
  indent_end = ' ' * node.parent.loc.column
  " do #{node.arguments.source}\n" \
  "#{indent}#{node.body.source}\n" \
  "#{indent_end}end"
end
format_singeline_block(node) click to toggle source
# File lib/rubocop/cop/rspec/factory_bot/create_list.rb, line 206
def format_singeline_block(node)
  " { #{node.arguments.source} #{node.body.source} }"
end