fastercsv 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +4 -0
- data/lib/faster_csv.rb +28 -15
- data/test/tc_csv_writing.rb +6 -0
- metadata +4 -3
    
        data/CHANGELOG
    CHANGED
    
    
    
        data/lib/faster_csv.rb
    CHANGED
    
    | @@ -75,7 +75,7 @@ require "stringio" | |
| 75 75 | 
             
            # 
         | 
| 76 76 | 
             
            class FasterCSV
         | 
| 77 77 | 
             
              # The version of the installed library.
         | 
| 78 | 
            -
              VERSION = "1.1. | 
| 78 | 
            +
              VERSION = "1.1.1".freeze
         | 
| 79 79 |  | 
| 80 80 | 
             
              # 
         | 
| 81 81 | 
             
              # A FasterCSV::Row is part Array and part Hash.  It retains an order for the
         | 
| @@ -774,6 +774,7 @@ class FasterCSV | |
| 774 774 | 
             
              # <b><tt>:return_headers</tt></b>::     +false+
         | 
| 775 775 | 
             
              # <b><tt>:header_converters</tt></b>::  +nil+
         | 
| 776 776 | 
             
              # <b><tt>:skip_blanks</tt></b>::        +false+
         | 
| 777 | 
            +
              # <b><tt>:force_quotes</tt></b>::       +false+
         | 
| 777 778 | 
             
              # 
         | 
| 778 779 | 
             
              DEFAULT_OPTIONS = { :col_sep            => ",",
         | 
| 779 780 | 
             
                                  :row_sep            => :auto,
         | 
| @@ -782,7 +783,8 @@ class FasterCSV | |
| 782 783 | 
             
                                  :headers            => false,
         | 
| 783 784 | 
             
                                  :return_headers     => false,
         | 
| 784 785 | 
             
                                  :header_converters  => nil,
         | 
| 785 | 
            -
                                  :skip_blanks        => false | 
| 786 | 
            +
                                  :skip_blanks        => false,
         | 
| 787 | 
            +
                                  :force_quotes       => false }.freeze
         | 
| 786 788 |  | 
| 787 789 | 
             
              # 
         | 
| 788 790 | 
             
              # This method will build a drop-in replacement for many of the standard CSV
         | 
| @@ -1292,6 +1294,8 @@ class FasterCSV | |
| 1292 1294 | 
             
              # <b><tt>:skip_blanks</tt></b>::        When set to a +true+ value, FasterCSV
         | 
| 1293 1295 | 
             
              #                                       will skip over any rows with no
         | 
| 1294 1296 | 
             
              #                                       content.
         | 
| 1297 | 
            +
              # <b><tt>:force_quotes</tt></b>::       When set to a +true+ value, FasterCSV
         | 
| 1298 | 
            +
              #                                       will quote all CSV fields it creates.
         | 
| 1295 1299 | 
             
              # 
         | 
| 1296 1300 | 
             
              # See FasterCSV::DEFAULT_OPTIONS for the default settings.
         | 
| 1297 1301 | 
             
              # 
         | 
| @@ -1354,19 +1358,7 @@ class FasterCSV | |
| 1354 1358 | 
             
                # handle FasterCSV::Row objects
         | 
| 1355 1359 | 
             
                row = row.fields if row.is_a? self.class::Row
         | 
| 1356 1360 |  | 
| 1357 | 
            -
                @io << row.map  | 
| 1358 | 
            -
                  if field.nil?  # represent +nil+ fields as empty unquoted fields
         | 
| 1359 | 
            -
                    ""
         | 
| 1360 | 
            -
                  else
         | 
| 1361 | 
            -
                    field = String(field)  # Stringify fields
         | 
| 1362 | 
            -
                    # represent empty fields as empty quoted fields
         | 
| 1363 | 
            -
                    if field.empty? or field.count(%Q{\r\n#{@col_sep}"}).nonzero?
         | 
| 1364 | 
            -
                      %Q{"#{field.gsub('"', '""')}"}  # escape quoted fields
         | 
| 1365 | 
            -
                    else
         | 
| 1366 | 
            -
                      field  # unquoted field
         | 
| 1367 | 
            -
                    end
         | 
| 1368 | 
            -
                  end
         | 
| 1369 | 
            -
                end.join(@col_sep) + @row_sep  # add separators
         | 
| 1361 | 
            +
                @io << row.map(&@quote).join(@col_sep) + @row_sep  # quote and separate
         | 
| 1370 1362 |  | 
| 1371 1363 | 
             
                self  # for chaining
         | 
| 1372 1364 | 
             
              end
         | 
| @@ -1573,6 +1565,8 @@ class FasterCSV | |
| 1573 1565 | 
             
              # +STDERR+ and any stream open for output only with a default
         | 
| 1574 1566 | 
             
              # <tt>@row_sep</tt> of <tt>$INPUT_RECORD_SEPARATOR</tt> (<tt>$/</tt>).
         | 
| 1575 1567 | 
             
              # 
         | 
| 1568 | 
            +
              # This method also establishes the quoting rules used for CSV output.
         | 
| 1569 | 
            +
              # 
         | 
| 1576 1570 | 
             
              def init_separators(options)
         | 
| 1577 1571 | 
             
                # store the selected separators
         | 
| 1578 1572 | 
             
                @col_sep = options.delete(:col_sep)
         | 
| @@ -1611,6 +1605,25 @@ class FasterCSV | |
| 1611 1605 | 
             
                    end
         | 
| 1612 1606 | 
             
                  end
         | 
| 1613 1607 | 
             
                end
         | 
| 1608 | 
            +
                
         | 
| 1609 | 
            +
                # establish quoting rules
         | 
| 1610 | 
            +
                @quote = if options.delete(:force_quotes)
         | 
| 1611 | 
            +
                  lambda { |field| %Q{"#{String(field).gsub('"', '""')}"} }
         | 
| 1612 | 
            +
                else
         | 
| 1613 | 
            +
                  lambda do |field|
         | 
| 1614 | 
            +
                    if field.nil?  # represent +nil+ fields as empty unquoted fields
         | 
| 1615 | 
            +
                      ""
         | 
| 1616 | 
            +
                    else
         | 
| 1617 | 
            +
                      field = String(field)  # Stringify fields
         | 
| 1618 | 
            +
                      # represent empty fields as empty quoted fields
         | 
| 1619 | 
            +
                      if field.empty? or field.count(%Q{\r\n#{@col_sep}"}).nonzero?
         | 
| 1620 | 
            +
                        %Q{"#{field.gsub('"', '""')}"}  # escape quoted fields
         | 
| 1621 | 
            +
                      else
         | 
| 1622 | 
            +
                        field  # unquoted field
         | 
| 1623 | 
            +
                      end
         | 
| 1624 | 
            +
                    end
         | 
| 1625 | 
            +
                  end
         | 
| 1626 | 
            +
                end
         | 
| 1614 1627 | 
             
              end
         | 
| 1615 1628 |  | 
| 1616 1629 | 
             
              # Pre-compiles parsers and stores them by name for access during reads.
         | 
    
        data/test/tc_csv_writing.rb
    CHANGED
    
    | @@ -87,4 +87,10 @@ class TestFasterCSVWriting < Test::Unit::TestCase | |
| 87 87 | 
             
                assert_equal( "a,b,,c\r\n", FasterCSV.generate_line( ["a", "b", nil, "c"],
         | 
| 88 88 | 
             
                                                                     :row_sep => "\r\n" ) )
         | 
| 89 89 | 
             
              end
         | 
| 90 | 
            +
              
         | 
| 91 | 
            +
              def test_force_quotes
         | 
| 92 | 
            +
                assert_equal( %Q{"1","b","","already ""quoted"""\n},
         | 
| 93 | 
            +
                              FasterCSV.generate_line( [1, "b", nil, %Q{already "quoted"}],
         | 
| 94 | 
            +
                                                       :force_quotes => true ) )
         | 
| 95 | 
            +
              end
         | 
| 90 96 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,10 +1,10 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            -
            rubygems_version: 0. | 
| 2 | 
            +
            rubygems_version: 0.9.1
         | 
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: fastercsv
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 1.1. | 
| 7 | 
            -
            date:  | 
| 6 | 
            +
              version: 1.1.1
         | 
| 7 | 
            +
            date: 2007-01-31 00:00:00 -06:00
         | 
| 8 8 | 
             
            summary: FasterCSV is CSV, but faster, smaller, and cleaner.
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - lib
         | 
| @@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement | |
| 25 25 | 
             
            platform: ruby
         | 
| 26 26 | 
             
            signing_key: 
         | 
| 27 27 | 
             
            cert_chain: 
         | 
| 28 | 
            +
            post_install_message: 
         | 
| 28 29 | 
             
            authors: 
         | 
| 29 30 | 
             
            - James Edward Gray II
         | 
| 30 31 | 
             
            files: 
         |