csv 3.1.4 → 3.1.9

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +97 -0
  3. data/README.md +5 -0
  4. data/doc/csv/arguments/io.rdoc +5 -0
  5. data/doc/csv/options/common/col_sep.rdoc +57 -0
  6. data/doc/csv/options/common/quote_char.rdoc +42 -0
  7. data/doc/csv/options/common/row_sep.rdoc +91 -0
  8. data/doc/csv/options/generating/force_quotes.rdoc +17 -0
  9. data/doc/csv/options/generating/quote_empty.rdoc +12 -0
  10. data/doc/csv/options/generating/write_converters.rdoc +25 -0
  11. data/doc/csv/options/generating/write_empty_value.rdoc +15 -0
  12. data/doc/csv/options/generating/write_headers.rdoc +29 -0
  13. data/doc/csv/options/generating/write_nil_value.rdoc +14 -0
  14. data/doc/csv/options/parsing/converters.rdoc +46 -0
  15. data/doc/csv/options/parsing/empty_value.rdoc +13 -0
  16. data/doc/csv/options/parsing/field_size_limit.rdoc +39 -0
  17. data/doc/csv/options/parsing/header_converters.rdoc +43 -0
  18. data/doc/csv/options/parsing/headers.rdoc +63 -0
  19. data/doc/csv/options/parsing/liberal_parsing.rdoc +19 -0
  20. data/doc/csv/options/parsing/nil_value.rdoc +12 -0
  21. data/doc/csv/options/parsing/return_headers.rdoc +22 -0
  22. data/doc/csv/options/parsing/skip_blanks.rdoc +31 -0
  23. data/doc/csv/options/parsing/skip_lines.rdoc +37 -0
  24. data/doc/csv/options/parsing/strip.rdoc +15 -0
  25. data/doc/csv/options/parsing/unconverted_fields.rdoc +27 -0
  26. data/doc/csv/recipes/filtering.rdoc +158 -0
  27. data/doc/csv/recipes/generating.rdoc +298 -0
  28. data/doc/csv/recipes/parsing.rdoc +545 -0
  29. data/doc/csv/recipes/recipes.rdoc +6 -0
  30. data/lib/csv.rb +1570 -520
  31. data/lib/csv/parser.rb +1 -0
  32. data/lib/csv/row.rb +478 -133
  33. data/lib/csv/table.rb +750 -108
  34. data/lib/csv/version.rb +1 -1
  35. data/lib/csv/writer.rb +45 -4
  36. metadata +42 -6
@@ -2,5 +2,5 @@
2
2
 
3
3
  class CSV
4
4
  # The version of the installed library.
5
- VERSION = "3.1.4"
5
+ VERSION = "3.1.9"
6
6
  end
@@ -43,8 +43,10 @@ class CSV
43
43
 
44
44
  row = @fields_converter.convert(row, nil, lineno) if @fields_converter
45
45
 
46
+ i = -1
46
47
  converted_row = row.collect do |field|
47
- quote(field)
48
+ i += 1
49
+ quote(field, i)
48
50
  end
49
51
  line = converted_row.join(@column_separator) + @row_separator
50
52
  if @output_encoding
@@ -100,6 +102,33 @@ class CSV
100
102
  end
101
103
  end
102
104
 
105
+ def prepare_force_quotes_fields(force_quotes)
106
+ @force_quotes_fields = {}
107
+ force_quotes.each do |name_or_index|
108
+ case name_or_index
109
+ when Integer
110
+ index = name_or_index
111
+ @force_quotes_fields[index] = true
112
+ when String, Symbol
113
+ name = name_or_index.to_s
114
+ if @headers.nil?
115
+ message = ":headers is required when you use field name " +
116
+ "in :force_quotes: " +
117
+ "#{name_or_index.inspect}: #{force_quotes.inspect}"
118
+ raise ArgumentError, message
119
+ end
120
+ index = @headers.index(name)
121
+ next if index.nil?
122
+ @force_quotes_fields[index] = true
123
+ else
124
+ message = ":force_quotes element must be " +
125
+ "field index or field name: " +
126
+ "#{name_or_index.inspect}: #{force_quotes.inspect}"
127
+ raise ArgumentError, message
128
+ end
129
+ end
130
+ end
131
+
103
132
  def prepare_format
104
133
  @column_separator = @options[:column_separator].to_s.encode(@encoding)
105
134
  row_separator = @options[:row_separator]
@@ -109,7 +138,17 @@ class CSV
109
138
  @row_separator = row_separator.to_s.encode(@encoding)
110
139
  end
111
140
  @quote_character = @options[:quote_character]
112
- @force_quotes = @options[:force_quotes]
141
+ force_quotes = @options[:force_quotes]
142
+ if force_quotes.is_a?(Array)
143
+ prepare_force_quotes_fields(force_quotes)
144
+ @force_quotes = false
145
+ elsif force_quotes
146
+ @force_quotes_fields = nil
147
+ @force_quotes = true
148
+ else
149
+ @force_quotes_fields = nil
150
+ @force_quotes = false
151
+ end
113
152
  unless @force_quotes
114
153
  @quotable_pattern =
115
154
  Regexp.new("[\r\n".encode(@encoding) +
@@ -147,16 +186,18 @@ class CSV
147
186
  encoded_quote_character
148
187
  end
149
188
 
150
- def quote(field)
189
+ def quote(field, i)
151
190
  if @force_quotes
152
191
  quote_field(field)
192
+ elsif @force_quotes_fields and @force_quotes_fields[i]
193
+ quote_field(field)
153
194
  else
154
195
  if field.nil? # represent +nil+ fields as empty unquoted fields
155
196
  ""
156
197
  else
157
198
  field = String(field) # Stringify fields
158
199
  # represent empty fields as empty quoted fields
159
- if (@quote_empty and field.empty?) or @quotable_pattern.match?(field)
200
+ if (@quote_empty and field.empty?) or (field.valid_encoding? and @quotable_pattern.match?(field))
160
201
  quote_field(field)
161
202
  else
162
203
  field # unquoted field
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.4
4
+ version: 3.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Edward Gray II
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-05-17 00:00:00.000000000 Z
12
+ date: 2020-11-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -75,11 +75,44 @@ email:
75
75
  - kou@cozmixng.org
76
76
  executables: []
77
77
  extensions: []
78
- extra_rdoc_files: []
78
+ extra_rdoc_files:
79
+ - LICENSE.txt
80
+ - NEWS.md
81
+ - README.md
82
+ - doc/csv/recipes/filtering.rdoc
83
+ - doc/csv/recipes/generating.rdoc
84
+ - doc/csv/recipes/parsing.rdoc
85
+ - doc/csv/recipes/recipes.rdoc
79
86
  files:
80
87
  - LICENSE.txt
81
88
  - NEWS.md
82
89
  - README.md
90
+ - doc/csv/arguments/io.rdoc
91
+ - doc/csv/options/common/col_sep.rdoc
92
+ - doc/csv/options/common/quote_char.rdoc
93
+ - doc/csv/options/common/row_sep.rdoc
94
+ - doc/csv/options/generating/force_quotes.rdoc
95
+ - doc/csv/options/generating/quote_empty.rdoc
96
+ - doc/csv/options/generating/write_converters.rdoc
97
+ - doc/csv/options/generating/write_empty_value.rdoc
98
+ - doc/csv/options/generating/write_headers.rdoc
99
+ - doc/csv/options/generating/write_nil_value.rdoc
100
+ - doc/csv/options/parsing/converters.rdoc
101
+ - doc/csv/options/parsing/empty_value.rdoc
102
+ - doc/csv/options/parsing/field_size_limit.rdoc
103
+ - doc/csv/options/parsing/header_converters.rdoc
104
+ - doc/csv/options/parsing/headers.rdoc
105
+ - doc/csv/options/parsing/liberal_parsing.rdoc
106
+ - doc/csv/options/parsing/nil_value.rdoc
107
+ - doc/csv/options/parsing/return_headers.rdoc
108
+ - doc/csv/options/parsing/skip_blanks.rdoc
109
+ - doc/csv/options/parsing/skip_lines.rdoc
110
+ - doc/csv/options/parsing/strip.rdoc
111
+ - doc/csv/options/parsing/unconverted_fields.rdoc
112
+ - doc/csv/recipes/filtering.rdoc
113
+ - doc/csv/recipes/generating.rdoc
114
+ - doc/csv/recipes/parsing.rdoc
115
+ - doc/csv/recipes/recipes.rdoc
83
116
  - lib/csv.rb
84
117
  - lib/csv/core_ext/array.rb
85
118
  - lib/csv/core_ext/string.rb
@@ -93,24 +126,27 @@ files:
93
126
  - lib/csv/writer.rb
94
127
  homepage: https://github.com/ruby/csv
95
128
  licenses:
129
+ - Ruby
96
130
  - BSD-2-Clause
97
131
  metadata: {}
98
132
  post_install_message:
99
- rdoc_options: []
133
+ rdoc_options:
134
+ - "--main"
135
+ - README.md
100
136
  require_paths:
101
137
  - lib
102
138
  required_ruby_version: !ruby/object:Gem::Requirement
103
139
  requirements:
104
140
  - - ">="
105
141
  - !ruby/object:Gem::Version
106
- version: 2.3.0
142
+ version: 2.5.0
107
143
  required_rubygems_version: !ruby/object:Gem::Requirement
108
144
  requirements:
109
145
  - - ">="
110
146
  - !ruby/object:Gem::Version
111
147
  version: '0'
112
148
  requirements: []
113
- rubygems_version: 3.2.0.pre1
149
+ rubygems_version: 3.2.0.rc.2
114
150
  signing_key:
115
151
  specification_version: 4
116
152
  summary: CSV Reading and Writing