diff options
author | jeg2 <jeg2@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-25 14:46:08 +0000 |
---|---|---|
committer | jeg2 <jeg2@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-25 14:46:08 +0000 |
commit | 6e7544f132d2903cf88f7f41208913d940068be8 (patch) | |
tree | d792df6c66688255fc3124792efed82f6ce1f735 | |
parent | ce9d84a9f05c2bc891826aa87cc38faac1a1c5b8 (diff) | |
download | ruby-6e7544f132d2903cf88f7f41208913d940068be8.tar.gz |
* lib/csv.rb: Improved stray quoting error message (patch by Edvard Majakari).
* lib/csv.rb: Remove debugging prints.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31735 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | lib/csv.rb | 35 | ||||
-rwxr-xr-x | test/csv/test_csv_parsing.rb | 2 | ||||
-rwxr-xr-x | test/csv/test_encodings.rb | 17 |
3 files changed, 36 insertions, 18 deletions
diff --git a/lib/csv.rb b/lib/csv.rb index ce5fdeaa61..c19a59e997 100644 --- a/lib/csv.rb +++ b/lib/csv.rb @@ -1567,23 +1567,24 @@ class CSV @io = data.is_a?(String) ? StringIO.new(data) : data # honor the IO encoding if we can, otherwise default to ASCII-8BIT @encoding = raw_encoding(nil) || - (if encoding = options.delete(:internal_encoding) - case encoding - when Encoding; encoding - else Encoding.find(encoding) - end - end) || - (case encoding = options.delete(:encoding) - when Encoding; encoding - when /\A[^:]+/; Encoding.find($&) - end) || + ( if encoding = options.delete(:internal_encoding) + case encoding + when Encoding; encoding + else Encoding.find(encoding) + end + end ) || + ( case encoding = options.delete(:encoding) + when Encoding; encoding + when /\A[^:]+/; Encoding.find($&) + end ) || Encoding.default_internal || Encoding.default_external # # prepare for building safe regular expressions in the target encoding, # if we can transcode the needed characters # @re_esc = "\\".encode(@encoding) rescue "" - @re_chars = /#{%"[-][\\.^$?*+{}()|# \r\n\t\f\v]".encode(@encoding, fallback: proc{""})}/ + @re_chars = /#{%"[-][\\.^$?*+{}()|# \r\n\t\f\v]".encode(@encoding)}/ + # @re_chars = /#{%"[-][\\.^$?*+{}()|# \r\n\t\f\v]".encode(@encoding, fallback: proc{""})}/ init_separators(options) init_parsers(options) @@ -1884,7 +1885,10 @@ class CSV if part[-1] == @quote_char && part.count(@quote_char) % 2 != 0 # extended column ends csv.last << part[0..-2] - raise MalformedCSVError if csv.last =~ @parsers[:stray_quote] + if csv.last =~ @parsers[:stray_quote] + raise MalformedCSVError, + "Missing or stray quote in line #{lineno + 1}" + end csv.last.gsub!(@quote_char * 2, @quote_char) in_extended_col = false else @@ -1901,7 +1905,10 @@ class CSV else # regular quoted column csv << part[1..-2] - raise MalformedCSVError if csv.last =~ @parsers[:stray_quote] + if csv.last =~ @parsers[:stray_quote] + raise MalformedCSVError, + "Missing or stray quote in line #{lineno + 1}" + end csv.last.gsub!(@quote_char * 2, @quote_char) end elsif part =~ @parsers[:quote_or_nl] @@ -1910,7 +1917,7 @@ class CSV raise MalformedCSVError, "Unquoted fields do not allow " + "\\r or \\n (line #{lineno + 1})." else - raise MalformedCSVError, "Illegal quoting on line #{lineno + 1}." + raise MalformedCSVError, "Illegal quoting in line #{lineno + 1}." end else # Regular ole unquoted field. diff --git a/test/csv/test_csv_parsing.rb b/test/csv/test_csv_parsing.rb index 55d1bee80b..319f3f392f 100755 --- a/test/csv/test_csv_parsing.rb +++ b/test/csv/test_csv_parsing.rb @@ -191,7 +191,7 @@ class TestCSV::Parsing < TestCSV assert_send([csv.lineno, :<, 4]) end rescue CSV::MalformedCSVError - assert_equal("Illegal quoting on line 4.", $!.message) + assert_equal("Illegal quoting in line 4.", $!.message) end end diff --git a/test/csv/test_encodings.rb b/test/csv/test_encodings.rb index 54c34f3f38..5ff6d33821 100755 --- a/test/csv/test_encodings.rb +++ b/test/csv/test_encodings.rb @@ -80,15 +80,19 @@ class TestCSV::Encodings < TestCSV end def test_read_with_default_encoding - data = "abc" + data = "abc" default_external = Encoding.default_external each_encoding do |encoding| File.open(@temp_csv_path, "wb", encoding: encoding) {|f| f << data} begin - Encoding.default_external = encoding + no_warnings do + Encoding.default_external = encoding + end result = CSV.read(@temp_csv_path)[0][0] ensure - Encoding.default_external = default_external + no_warnings do + Encoding.default_external = default_external + end end assert_equal(encoding, result.encoding) end @@ -325,4 +329,11 @@ class TestCSV::Encodings < TestCSV yield encoding end end + + def no_warnings + old_verbose, $VERBOSE = $VERBOSE, nil + yield + ensure + $VERBOSE = old_verbose + end end |