mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									10ca8a4b07
								
							
						
					
					
						commit
						80c4b4b3d7
					
				
					 3 changed files with 23 additions and 7 deletions
				
			
		|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										13
									
								
								lib/csv.rb
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								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 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 jeg2
						jeg2