Project

General

Profile

Bug #10504

Updated by nobu (Nobuyoshi Nakada) over 9 years ago

This patch allows `CSV.open` to more gracefully handle user error. Because the IO object is passed to the user-provided block it's entirely possible the IO object can be closed before the block finishes. This would raise an error in the `ensure` clause of `CSV.open`.  

 ~~~diff ~~~ 
 Index: lib/csv.rb 
 =================================================================== 
 --- lib/csv.rb 	 (revision 48392) 
 +++ lib/csv.rb 	 (working copy) 
 @@ -1272,7 +1272,7 @@ 
        begin 
          yield csv 
        ensure 
 -          csv.close 
 +          csv.closed? || csv.close 
        end 
      else 
        csv 
 Index: test/csv/test_interface.rb 
 =================================================================== 
 --- test/csv/test_interface.rb 	 (revision 48392) 
 +++ test/csv/test_interface.rb 	 (working copy) 
 @@ -136,6 +136,14 @@ 
      end 
    end 
 
 +    def test_open_handles_prematurely_closed_file_descriptor_gracefully 
 +      assert_nothing_raised(Exception) do 
 +        CSV.open(@path) do |csv| 
 +          csv.close 
 +        end 
 +      end 
 +    end 
 + 
    ### Test Write Interface ### 
 
    def test_generate 
 ~~~

Back