Hi.

Consider you have two ruby files.

file1.rb:
---------------------------------------------------
require 'pp'
RUBY_FILE = './file2.rb'

begin
  load RUBY_FILE
rescue NameError => error
  # pp error # Do not report the error here. Be silent.
end

# Now we call the two methods defined in file2.rb
foo()
bar()
---------------------------------------------------

file2.rb:
---------------------------------------------------

def foo
  puts 'This is from foo()'
end

# Create an error on purpose here.
joe_doe()

def bar # The second method.
  puts 'This is from bar()'
end
---------------------------------------------------

Note - I use the parens () at bar() to make it more
explicit and illustrate my question.

If you run file1.rb, an error occurs:

undefined method `bar' for main:Object (NoMethodError)


The method call to foo() works.

If you look at the content of file2.rb, you can see that
the method definition first has foo(), then a method
call to a method that does not exist (on purpose), and
then the method definition to bar()

Ruby apparently stops processing file2.rb when it
encounters a NameError exception.

My question is:

- Is there a way to force or otherwise cause Ruby to continue
reading the second file? I am in control of the ruby files so
I can use eval without a problem.

What I would like to achieve is to let ruby read a file
and treat it as a ruby file, but if it encounters errors,
it would disregard these errors, and continue processing
them.

In a way, I'd need a faulty ruby loader that ignores errors
when instructed.

Right now, in the code above, I can not achieve this, as
ruby stops the very moment it encounters an invalid method
call. How could I continue to process that faulty file?

-- 
Posted via http://www.ruby-forum.com/.