smarter_csv 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -194,12 +194,11 @@ Or install it yourself as:
194
194
  $ gem install smarter_csv
195
195
 
196
196
 
197
- ## Known Bugs
198
-
199
- * if :col_sep (e.g. a comma) appears inside a quoted field, smarter_csv <= 1.0.4 incorrectly splits on that :col_sep
197
+ ## Changes
200
198
 
199
+ #### 1.0.6 (2013-05-19)
201
200
 
202
- ## Changes
201
+ * bugfix : quoted fields are now correctly parsed
203
202
 
204
203
  #### 1.0.5 (2013-05-08)
205
204
 
@@ -1,4 +1,4 @@
1
+ require 'csv'
1
2
  require "smarter_csv/version"
2
3
  require "extensions/hash.rb"
3
4
  require "smarter_csv/smarter_csv.rb"
4
-
@@ -22,7 +22,12 @@ module SmarterCSV
22
22
  # the first line of a CSV file contains the header .. it might be commented out, so we need to read it anyhow
23
23
  header = f.readline.sub(options[:comment_regexp],'').chomp(options[:row_sep])
24
24
  header = header.gsub(options[:strip_chars_from_headers], '') if options[:strip_chars_from_headers]
25
- file_headerA = header.split(options[:col_sep]).map{|x| x.gsub(%r/options[:quote_char]/,'')}
25
+ if header =~ %r{#{options[:quote_char]}}
26
+ file_headerA = CSV.parse( header ).flatten
27
+ else
28
+ file_headerA = header.split(options[:col_sep])
29
+ end
30
+ file_headerA.map!{|x| x.gsub(%r/options[:quote_char]/,'') }
26
31
  file_headerA.map!{|x| x.strip} if options[:strip_whitespace]
27
32
  file_headerA.map!{|x| x.gsub(/\s+/,'_')}
28
33
  file_headerA.map!{|x| x.downcase } if options[:downcase_header]
@@ -69,7 +74,12 @@ module SmarterCSV
69
74
  next if line =~ options[:comment_regexp] # ignore all comment lines if there are any
70
75
  line.chomp! # will use $/ which is set to options[:col_sep]
71
76
 
72
- dataA = line.split(options[:col_sep]) # ISSUE 4 : BUG : this splits incorrectly if , is inside quoted fields
77
+ if line =~ %r{#{options[:quote_char]}}
78
+ dataA = CSV.parse( line ).flatten
79
+ else
80
+ dataA = line.split(options[:col_sep])
81
+ end
82
+ dataA.map!{|x| x.gsub(%r/options[:quote_char]/,'') }
73
83
  dataA.map!{|x| x.strip} if options[:strip_whitespace]
74
84
  hash = Hash.zip(headerA,dataA) # from Facets of Ruby library
75
85
  # make sure we delete any key/value pairs from the hash, which the user wanted to delete:
@@ -1,3 +1,3 @@
1
1
  module SmarterCSV
2
- VERSION = "1.0.5"
2
+ VERSION = "1.0.6"
3
3
  end
@@ -6,12 +6,13 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["tilo.sloboda@gmail.com\n"]
7
7
  gem.description = %q{Ruby Gem for smarter importing of CSV Files as Array(s) of Hashes, with optional features for processing large files in parallel, embedded comments, unusual field- and record-separators, flexible mapping of CSV-headers to Hash-keys}
8
8
  gem.summary = %q{Ruby Gem for smarter importing of CSV Files (and CSV-like files), with lots of optional features, e.g. chunked processing for huge CSV files}
9
- gem.homepage = ""
9
+ gem.homepage = "https://github.com/tilo/smarter_csv"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = "smarter_csv"
15
15
  gem.require_paths = ["lib"]
16
+ gem.requirements = ['csv'] # for CSV.parse() only needed in case we have quoted fields
16
17
  gem.version = SmarterCSV::VERSION
17
18
  end
metadata CHANGED
@@ -1,31 +1,29 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: smarter_csv
3
- version: !ruby/object:Gem::Version
4
- version: 1.0.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.6
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
- - |
8
- Tilo Sloboda
7
+ authors:
8
+ - ! 'Tilo Sloboda
9
9
 
10
+ '
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
-
14
- date: 2013-05-09 00:00:00 Z
14
+ date: 2013-05-20 00:00:00.000000000 Z
15
15
  dependencies: []
16
+ description: Ruby Gem for smarter importing of CSV Files as Array(s) of Hashes, with
17
+ optional features for processing large files in parallel, embedded comments, unusual
18
+ field- and record-separators, flexible mapping of CSV-headers to Hash-keys
19
+ email:
20
+ - ! 'tilo.sloboda@gmail.com
16
21
 
17
- description: Ruby Gem for smarter importing of CSV Files as Array(s) of Hashes, with optional features for processing large files in parallel, embedded comments, unusual field- and record-separators, flexible mapping of CSV-headers to Hash-keys
18
- email:
19
- - |
20
- tilo.sloboda@gmail.com
21
-
22
+ '
22
23
  executables: []
23
-
24
24
  extensions: []
25
-
26
25
  extra_rdoc_files: []
27
-
28
- files:
26
+ files:
29
27
  - .gitignore
30
28
  - .rvmrc
31
29
  - Gemfile
@@ -37,31 +35,30 @@ files:
37
35
  - lib/smarter_csv/smarter_csv.rb
38
36
  - lib/smarter_csv/version.rb
39
37
  - smarter_csv.gemspec
40
- homepage: ""
38
+ homepage: https://github.com/tilo/smarter_csv
41
39
  licenses: []
42
-
43
- metadata: {}
44
-
45
40
  post_install_message:
46
41
  rdoc_options: []
47
-
48
- require_paths:
42
+ require_paths:
49
43
  - lib
50
- required_ruby_version: !ruby/object:Gem::Requirement
51
- requirements:
52
- - &id001
53
- - ">="
54
- - !ruby/object:Gem::Version
55
- version: "0"
56
- required_rubygems_version: !ruby/object:Gem::Requirement
57
- requirements:
58
- - *id001
59
- requirements: []
60
-
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements:
57
+ - csv
61
58
  rubyforge_project:
62
- rubygems_version: 2.0.3
59
+ rubygems_version: 1.8.15
63
60
  signing_key:
64
- specification_version: 4
65
- summary: Ruby Gem for smarter importing of CSV Files (and CSV-like files), with lots of optional features, e.g. chunked processing for huge CSV files
61
+ specification_version: 3
62
+ summary: Ruby Gem for smarter importing of CSV Files (and CSV-like files), with lots
63
+ of optional features, e.g. chunked processing for huge CSV files
66
64
  test_files: []
67
-
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: ed29542688f14930b2c88be160a092ba0e7e0398
4
- data.tar.gz: 6ce2d29c27af35540f83a44f7c1af1a1f3da988e
5
- SHA512:
6
- metadata.gz: a88bbcfc69a77beb3ef9fbcd68d48d17880e57264f4755426d0f44c64d06905ba496de9805f48cb2c83373da2ba0bb893dd71a55556fed61016b6696a4a35d95
7
- data.tar.gz: 73de0af3b952a8dc4a32f1c823162f718aeedd5304f553b4690100a245c81d68edda0280e3646e965e5c3d260176a884ea64f6a43adb3c62ae26e4bcef2bbfc7