hippie_csv 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f53a562b556d85f2c893855cf0aa34ea6126afab
4
- data.tar.gz: 9c1a2954a38b2c01b1a9dcbc13c25fb21e9799be
3
+ metadata.gz: 0c3685fbff376b677274444f9b9211a80165cabd
4
+ data.tar.gz: 36322262f11c8ff9e28e90fa17ebd9be07cc9bad
5
5
  SHA512:
6
- metadata.gz: 7db7d04670863b9bffc7c66d8c1410b57892b4729819c6755816bd3e5deffcf0acc2af75870d6e26b41dc5643f1ef7eb8ec9cce86aa9868fff49129c2872e204
7
- data.tar.gz: 2a587740e0ee24c021a373c71e4c3038447de70595d7ff1e89d86dc51aa696083a238cef221bdb2e6970a53eca11d407b6a0c5ee11df1449e32305ce25113055
6
+ metadata.gz: 8d050fb4b1d7836f1167bacae1884126c92797026e1ac9177b1df316dcf146ffb34d46fc062e1a0bf5440cc9c6863fb750bc14ea76a08969a9969a90b70840b9
7
+ data.tar.gz: 24bcf0eb9c671a7116a311b74e3b381ae7557067f1e5d9174c835ac58344b5f4b0e8eaa263443d2ffd0f7b73ba7474fcb21e7c3be2b948a7d4add2507da4b14b
@@ -1,7 +1,12 @@
1
1
  require "csv"
2
2
 
3
3
  module HippieCSV
4
- QUOTE_CHARACTERS = %w(" ' |).freeze
4
+ QUOTE_CHARACTERS = %w(" ' | ∑ ⦿ ◉).freeze
5
+ # The latter three characters are not expected to intentionally used as
6
+ # quotes. Rather, when usual quote characters are badly misused, we want
7
+ # to fall back to a character _unlikely_ to be in the file, such that
8
+ # we can at least parse.
9
+
5
10
  DELIMETERS = %W(, ; \t).freeze
6
11
  ENCODING = "utf-8".freeze
7
12
  ALTERNATE_ENCODING = "utf-16".freeze
@@ -27,15 +27,17 @@ module HippieCSV
27
27
 
28
28
  def maybe_parse(string)
29
29
  QUOTE_CHARACTERS.find do |quote_character|
30
- Support.rescuing_malformed do
31
- return Support.parse_csv(string.strip, quote_character)
30
+ [string, tolerate_escaping(string, quote_character)].find do |string_to_parse|
31
+ rescuing_malformed do
32
+ return parse_csv(string_to_parse.strip, quote_character)
33
+ end
32
34
  end
33
35
  end
34
36
  end
35
37
 
36
38
  def parse_csv(string, quote_character)
37
39
  CSV.parse(
38
- tolerate_escaping(string, quote_character),
40
+ string,
39
41
  quote_char: quote_character,
40
42
  col_sep: guess_delimeter(string, quote_character)
41
43
  )
@@ -1,3 +1,3 @@
1
1
  module HippieCSV
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -0,0 +1,8 @@
1
+ id,full_name,email,support,admin_of,user_payment_count,user_payment_total,click_count,registration_date,user_status,email_validation
2
+ 1,Tom Stonew,tom@example.com,Stone's Soccer Club,Stone's Soccer Club,5,£1.16,96,3/31/2015 17:28:39,active,Y
3
+ 262,Mark J Collins,info@example.co,|Run N Hide Things Get Cancelled!|,Run N Hide | Things Get Cancelled!,0,NULL,0,7/2/2015 18:41:05,active,N
4
+ 474,Francis Daly,francisdaly@live.com,"\A Junction\"" Project Association""",NULL,0,NULL,1,8/13/2015 14:50:05,active,N
5
+ 640,mitchell miller,test@example.co.uk,Berkely ⦿ Club,NULL,0,NULL,1,9/9/2015 10:35:00,active,N
6
+ 646,Ash ,hi@example.com,"\NSAAA A" """,NULL,0,NULL,0,9/9/2015 14:21:21,active,N
7
+ 649,Ken Kenneth,ken@example.com,Lusk ∑ Club,Lusk ∑ Club,0,NULL,1,9/9/2015 21:45:24,active,Y
8
+ 650,Bam Gouldstone,bam@example.com,$ Shave Club,NULL,0,NULL,0,9/10/2015 6:43:07,active,N
@@ -5,8 +5,8 @@ describe HippieCSV do
5
5
  describe "::QUOTE_CHARACTERS" do
6
6
  let(:supported_quote_characters) { ['"', "'", "|"] }
7
7
 
8
- it "defines supported quote characters" do
9
- expect(HippieCSV::QUOTE_CHARACTERS).to match(supported_quote_characters)
8
+ it "supports common quote characters" do
9
+ expect(HippieCSV::QUOTE_CHARACTERS).to include(*supported_quote_characters)
10
10
  end
11
11
 
12
12
  it "is not modifiable" do
@@ -68,7 +68,6 @@ describe HippieCSV::Support do
68
68
 
69
69
  it "works" do
70
70
  expect(subject).to receive(:guess_delimeter).with(string, quote_character).and_return(',')
71
- expect(subject).to receive(:tolerate_escaping).with(string, quote_character).and_return(string)
72
71
 
73
72
  expect(subject.parse_csv(string, quote_character)).to eq(
74
73
  [["name", "email"], ["stephen", "test@example.com"]]
@@ -3,7 +3,7 @@ require "spec_helper"
3
3
  describe HippieCSV do
4
4
 
5
5
  it "defines a version" do
6
- expect(HippieCSV::VERSION).to eq("0.0.6")
6
+ expect(HippieCSV::VERSION).to eq("0.0.7")
7
7
  end
8
8
 
9
9
  end
@@ -121,6 +121,17 @@ describe HippieCSV do
121
121
  expect(Time.now).to be_within(5).of(start_time)
122
122
  end
123
123
 
124
+ it "works when many invalid quote types contained" do
125
+ path = fixture_path(:bad_quoting)
126
+
127
+ expect { CSV.read(path) }.to raise_error
128
+ expect {
129
+ import = subject.read(path)
130
+ expect(import.map(&:count).uniq).to eq([11])
131
+ expect(import.count).to eq(8)
132
+ }.not_to raise_error
133
+ end
134
+
124
135
  it "strips leading/trailing blank lines" do
125
136
  path = fixture_path(:trailing_leading_lines)
126
137
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hippie_csv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen O'Brien
@@ -100,6 +100,7 @@ files:
100
100
  - lib/hippie_csv/support.rb
101
101
  - lib/hippie_csv/version.rb
102
102
  - spec/fixtures/accents_semicolon_windows_1252.csv
103
+ - spec/fixtures/bad_quoting.csv
103
104
  - spec/fixtures/dos_line_ending.csv
104
105
  - spec/fixtures/encoding.csv
105
106
  - spec/fixtures/escaped_quotes.csv
@@ -141,6 +142,7 @@ specification_version: 4
141
142
  summary: Tolerant, liberal CSV parsing
142
143
  test_files:
143
144
  - spec/fixtures/accents_semicolon_windows_1252.csv
145
+ - spec/fixtures/bad_quoting.csv
144
146
  - spec/fixtures/dos_line_ending.csv
145
147
  - spec/fixtures/encoding.csv
146
148
  - spec/fixtures/escaped_quotes.csv