From 7ff049457f5c0c29ce3aec9414b98ae4226d2377 Mon Sep 17 00:00:00 2001 From: Paolo Bosetti Date: Tue, 4 Mar 2014 10:43:46 +0100 Subject: Added File.foreach method. Improved error management in File.new (Errno can be undefined) --- mrblib/file.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/mrblib/file.rb b/mrblib/file.rb index 4087593a5..9a4333c64 100644 --- a/mrblib/file.rb +++ b/mrblib/file.rb @@ -12,9 +12,17 @@ class File < IO if fd_or_path.kind_of? Fixnum super(fd_or_path, mode) else + if Object.const_defined? :Errno + eclass = [Errno::ENOENT, Errno::ENFILE] + else + eclass = FileError + end + @path = fd_or_path begin fd = IO.sysopen(@path, mode, perm) + rescue RuntimeError => e + raise FileError, "Could not open file (#{e})" rescue Errno::EMFILE, Errno::ENFILE GC.start fd = IO.sysopen(@path, mode, perm) @@ -119,6 +127,16 @@ class File < IO end end + def self.foreach(file) + if block_given? + self.open(file) do |f| + f.each {|l| yield l} + end + else + return self.new(file) + end + end + def self.directory?(file) FileTest.directory?(file) end -- cgit v1.2.3