JBoy
JBoy

Reputation: 5735

Ruby ArgumentError when actually providing correct arguments

Ruby complains i am not providing enough arguments to my script, which is:

    #!/usr/bin/ruby
require 'mail'

def send(file,recipients_csv)
     recipients=recipients_csv.split(",")
      recipients.each do |recipient|
       Mail.defaults do
        delivery_method :smtp,{ :address => 'localhost', :port => 25,:openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE}
       end
        mail = Mail.new do
         from '[email protected]'
         to "#{recipient}"
         subject "test"
         body "test"
         add_file :filename => "a_testfile.tsv", :content => File.read(file.path)
        end
       mail.deliver!
      end
end

testfile=File.new("newfile.tsv","w")
send(testfile,"[email protected]")

What i get back is:

Mailer.rb:4:in `send': wrong number of arguments (1 for 2) (ArgumentError)
    from /usr/lib64/ruby/gems/1.9.1/gems/treetop-1.4.15/lib/treetop/runtime/compiled_parser.rb:18:in `parse'
    from /usr/lib64/ruby/gems/1.9.1/gems/mail-2.5.4/lib/mail/elements/address_list.rb:26:in `initialize'
    from /usr/lib64/ruby/gems/1.9.1/gems/mail-2.5.4/lib/mail/fields/common/common_address.rb:9:in `new'

I dont get this, the arguments i provide are obviously 2

Upvotes: 3

Views: 52

Answers (2)

PhilVarg
PhilVarg

Reputation: 4820

This might be conflicting with the Ruby base send method. Try renaming send to send_mail (or something), to avoid overwriting the send method

Upvotes: 2

tykowale
tykowale

Reputation: 449

This error isn't coming from when you are running the script yourself on line 22, you are clearly passing it two arguments. It is actually coming from one of the three files you see in your error stack.

from /usr/lib64/ruby/gems/1.9.1/gems/treetop-1.4.15/lib/treetop/runtime/compiled_parser.rb:18:in `parse'
from /usr/lib64/ruby/gems/1.9.1/gems/mail-2.5.4/lib/mail/elements/address_list.rb:26:in `initialize'
from /usr/lib64/ruby/gems/1.9.1/gems/mail-2.5.4/lib/mail/fields/common/common_address.rb:9:in `new'

If you go into those files send is being called with only one argument as opposed to two.

Upvotes: 2

Related Questions