summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--lib/csv.rb13
-rwxr-xr-xtest/csv/test_features.rb11
3 files changed, 23 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 27cce5a49b..94172bb7ea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat Nov 23 13:38:00 2013 Kyle Stevens <kstevens715@gmail.com>
+
+ * lib/csv.rb: If skip_lines is set to a String, convert it to a Regexp
+ to prevent the alternative, which is that each line in the CSV gets
+ converted to a Regexp when calling skip_lines#match.
+
Sun Nov 24 01:03:00 2013 Kenta Murata <mrkn@mrkn.jp>
* ext/bigdecimal/bigdecimal.c (BigDecimal_power): Use FIX2LONG instead
diff --git a/lib/csv.rb b/lib/csv.rb
index 804b941433..d66b84922a 100644
--- a/lib/csv.rb
+++ b/lib/csv.rb
@@ -1470,11 +1470,12 @@ class CSV
# <b><tt>:skip_lines</tt></b>:: When set to an object responding to
# <tt>match</tt>, every line matching
# it is considered a comment and ignored
- # during parsing. When set to +nil+
- # no line is considered a comment.
- # If the passed object does not respond
- # to <tt>match</tt>, <tt>ArgumentError</tt>
- # is thrown.
+ # during parsing. When set to a String,
+ # it is first converted to a Regexp.
+ # When set to +nil+ no line is considered
+ # a comment. If the passed object does
+ # not respond to <tt>match</tt>,
+ # <tt>ArgumentError</tt> is thrown.
#
# See CSV::DEFAULT_OPTIONS for the default settings.
#
@@ -2120,10 +2121,12 @@ class CSV
# Stores the pattern of comments to skip from the provided options.
#
# The pattern must respond to +.match+, else ArgumentError is raised.
+ # Strings are converted to a Regexp.
#
# See also CSV.new
def init_comments(options)
@skip_lines = options.delete(:skip_lines)
+ @skip_lines = Regexp.new(@skip_lines) if @skip_lines.is_a? String
if @skip_lines and not @skip_lines.respond_to?(:match)
raise ArgumentError, ":skip_lines has to respond to matches"
end
diff --git a/test/csv/test_features.rb b/test/csv/test_features.rb
index 8c2b3eb2b7..9324af7096 100755
--- a/test/csv/test_features.rb
+++ b/test/csv/test_features.rb
@@ -299,12 +299,19 @@ class TestCSV::Features < TestCSV
def test_comment_rows_are_ignored
sample_data = "line,1,a\n#not,a,line\nline,2,b\n #also,no,line"
c = CSV.new sample_data, :skip_lines => /\A\s*#/
- assert_equal c.each.to_a, [["line", "1", "a"], ["line", "2", "b"]]
+ assert_equal [["line", "1", "a"], ["line", "2", "b"]], c.each.to_a
end
def test_quoted_skip_line_markers_are_ignored
sample_data = "line,1,a\n\"#not\",a,line\nline,2,b"
c = CSV.new sample_data, :skip_lines => /\A\s*#/
- assert_equal c.each.to_a, [["line", "1", "a"], ["#not", "a", "line"], ["line", "2", "b"]]
+ assert_equal [["line", "1", "a"], ["#not", "a", "line"], ["line", "2", "b"]], c.each.to_a
end
+
+ def test_string_works_like_a_regexp
+ sample_data = "line,1,a\n#(not,a,line\nline,2,b\n also,#no,line"
+ c = CSV.new sample_data, :skip_lines => "#"
+ assert_equal [["line", "1", "a"], ["line", "2", "b"]], c.each.to_a
+ end
+
end