Peter Penzov
Peter Penzov

Reputation: 1668

Use array to pass arguments to methods

I use this code to create db records. How I can shrink the code and use array to call one method only?

create_acquirers(args[:count_to_create].to_i)
create_companies(args[:count_to_create].to_i)
create_merchant_users(args[:count_to_create].to_i)

def create_acquirers(n)
    puts ">> Creating acquirers..."
    n.times { create(:acquirer) }
  end

  def create_companies(n)
    puts ">> Creating companies..."
    n.times { create(:fake_company) }
  end

  def create_merchant_users(n)
    puts ">> Creating merchant users..."
    n.times { create(:fake_merchant_user) }
  end

Upvotes: 0

Views: 48

Answers (1)

Maxim Fedotov
Maxim Fedotov

Reputation: 1357

Can't you just iterate over the symbols (model names I presume), like so:

populate_db(args[:count_to_create].to_i)

def populate_db(count_to_create)
  [:acquirer, :fake_company, :fake_merchant_user].each do |model_name|
    puts ">> Creating #{model_name.to_s.pluralize.humanize}..."
    count_to_create.times { create(model_name) }
  end
end

I'd recommend splitting that array into a method or constant:

def populate_db(count_to_create)
  model_names.each do |model_name|
    puts ">> Creating #{model_name.to_s.pluralize.humanize} users..."
    count_to_create.times { create(model_name) }
  end
end

def model_names
  [:acquirer, :fake_company, :fake_merchant_user]
end

Upvotes: 1

Related Questions