Best practice is to put begin
and rescue
only around the specific piece of code you want to change default raise behaviour for (i.e. exit your code, potentially terminating the process unless there is a higher-level rescue), and to achieve the purpose you intended.
What that is varies according to why you need to begin...rescue
clause in the first place.
For example, if your classes are a web service, and a component of that service, and the purpose of the block is to present all raised errors as debug stack-traces in the browser, then the outer, web-service layer is where you should rescue exceptions. You should probably also cover most, if not all, possible types of raised error.
Alternatively, if your "inner" class is providing access to a third-party service, and the rescue is to allow retries on a failed connect, the block could be entirely within the inner class. In addition, you would only rescue
the specific failures where a retry would make sense.