csvreader 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest.txt +4 -0
- data/lib/csvreader/version.rb +2 -2
- data/test/data/beer.csv +7 -0
- data/test/data/beer11.csv +51 -0
- data/test/helper.rb +16 -0
- data/test/test_reader.rb +119 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6b05520911361eae641ef53b9550d11974478fe
|
4
|
+
data.tar.gz: a119bd4a8e85408b84b9683d8fa5aa61884bfb1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0938a895f630f06740ecb2d947adccb3f6384ad1f7c06316bde43d60b750fae76fda227138c5827c7da404590b96102feb8089e5fb83d056c180a313a4b17e1
|
7
|
+
data.tar.gz: 14cc7b7da521649b5713fb6932a9d201962fbf5bf9df2f09569066baaa29bdffc8edcc89e7903d2aceb7eb6df1c3f05ebff4b27623dc8a427cfaba0ddf4df8f1
|
data/Manifest.txt
CHANGED
data/lib/csvreader/version.rb
CHANGED
data/test/data/beer.csv
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
Brewery,City,Name,Abv
|
2
|
+
Andechser Klosterbrauerei,Andechs,Doppelbock Dunkel,7%
|
3
|
+
Augustiner Bräu München,München,Edelstoff,5.6%
|
4
|
+
Bayerische Staatsbrauerei Weihenstephan,Freising,Hefe Weissbier,5.4%
|
5
|
+
Brauerei Spezial,Bamberg,Rauchbier Märzen,5.1%
|
6
|
+
Hacker-Pschorr Bräu,München,Münchner Dunkel,5.0%
|
7
|
+
Staatliches Hofbräuhaus München,München,Hofbräu Oktoberfestbier,6.3%
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#######
|
2
|
+
# try with some comments
|
3
|
+
# and blank lines even before header
|
4
|
+
|
5
|
+
Brewery,City,Name,Abv
|
6
|
+
Andechser Klosterbrauerei,Andechs,Doppelbock Dunkel,7%
|
7
|
+
Augustiner Bräu München,München,Edelstoff,5.6%
|
8
|
+
Bayerische Staatsbrauerei Weihenstephan,Freising,Hefe Weissbier,5.4%
|
9
|
+
|
10
|
+
Brauerei Spezial, Bamberg, Rauchbier Märzen, 5.1%
|
11
|
+
|
12
|
+
Hacker-Pschorr Bräu, München, Münchner Dunkel, 5.0%
|
13
|
+
|
14
|
+
## some more comments here
|
15
|
+
|
16
|
+
Staatliches Hofbräuhaus München,München,Hofbräu Oktoberfestbier,6.3%
|
17
|
+
|
18
|
+
## check for nil
|
19
|
+
"", ,,"",
|
20
|
+
|
21
|
+
## check for blank line with spaces
|
22
|
+
## yes, will get added as a record!! e.g. ["", nil, nil, nil]
|
23
|
+
## use regex to skip blank lines with spaces!!!!
|
24
|
+
|
25
|
+
|
26
|
+
## test double quotes and double quotes escaped
|
27
|
+
## note: double quotes do NOT work with leading AND/OR trailing spaces
|
28
|
+
## leads to:
|
29
|
+
## CSV::MalformedCSVError - Missing or stray quote in line xxx
|
30
|
+
##
|
31
|
+
## note: for now double quote does not accept leading AND/OR trailing spaces!!!!
|
32
|
+
##
|
33
|
+
## todo/fix: check liberal_quote option starting in csv ruby 2.4 ???
|
34
|
+
##
|
35
|
+
## examples:
|
36
|
+
## "value with comma, comma","some ""hello""","some ""hello""",
|
37
|
+
## works - but does NOT work (note the leading and trailing spaces for double quotes):
|
38
|
+
## "value with comma, comma" ,"some ""hello""", "some ""hello""",
|
39
|
+
##
|
40
|
+
## check for "multi-line":
|
41
|
+
## "hello
|
42
|
+
## and another line
|
43
|
+
## and another",two,three,
|
44
|
+
|
45
|
+
|
46
|
+
"value with comma, comma","some ""hello""","some ""hello""",
|
47
|
+
|
48
|
+
## check for "multi-line"
|
49
|
+
"hello
|
50
|
+
and another line
|
51
|
+
and another",two,three,
|
data/test/helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
## $:.unshift(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
## minitest setup
|
4
|
+
|
5
|
+
require 'minitest/autorun'
|
6
|
+
|
7
|
+
|
8
|
+
## our own code
|
9
|
+
require 'csvreader'
|
10
|
+
|
11
|
+
## add test_data_dir helper
|
12
|
+
class CsvReader
|
13
|
+
def self.test_data_dir
|
14
|
+
"#{root}/test/data"
|
15
|
+
end
|
16
|
+
end
|
data/test/test_reader.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_reader.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestReader < MiniTest::Test
|
11
|
+
|
12
|
+
def test_read
|
13
|
+
puts "== read: beer.csv:"
|
14
|
+
table = CsvReader.read( "#{CsvReader.test_data_dir}/beer.csv" ) ## returns CSV::Table
|
15
|
+
|
16
|
+
pp table.class.name
|
17
|
+
pp table
|
18
|
+
pp table.to_a ## note: includes header (first row with column names)
|
19
|
+
|
20
|
+
table.each do |row| ## note: will skip (NOT include) header row!!
|
21
|
+
pp row
|
22
|
+
end
|
23
|
+
puts " #{table.size} rows" ## note: again will skip (NOT include) header row in count!!!
|
24
|
+
assert_equal 6, table.size
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_read_header_false
|
28
|
+
puts "== read (headers: false): beer.csv:"
|
29
|
+
data = CsvReader.read( "#{CsvReader.test_data_dir}/beer.csv", headers: false )
|
30
|
+
|
31
|
+
pp data.class.name
|
32
|
+
pp data
|
33
|
+
|
34
|
+
data.each do |row|
|
35
|
+
pp row
|
36
|
+
end
|
37
|
+
puts " #{data.size} rows"
|
38
|
+
assert_equal 7, data.size ## note: include header row in count
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def test_read11
|
43
|
+
puts "== read: beer11.csv:"
|
44
|
+
table = CsvReader.read( "#{CsvReader.test_data_dir}/beer11.csv" )
|
45
|
+
pp table
|
46
|
+
pp table.to_a ## note: includes header (first row with column names)
|
47
|
+
|
48
|
+
assert true
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def test_parse_line
|
53
|
+
puts "== parse_line:"
|
54
|
+
row = CsvReader.parse_line( <<TXT )
|
55
|
+
Augustiner Bräu München, München, Edelstoff, 5.6%
|
56
|
+
Bayerische Staatsbrauerei Weihenstephan, Freising, Hefe Weissbier, 5.4%
|
57
|
+
TXT
|
58
|
+
|
59
|
+
pp row
|
60
|
+
assert_equal ['Augustiner Bräu München', 'München', 'Edelstoff', '5.6%'], row
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_parse_line11
|
64
|
+
puts "== parse_line:"
|
65
|
+
row = CsvReader.parse_line( <<TXT )
|
66
|
+
#######
|
67
|
+
# try with some comments
|
68
|
+
# and blank lines even before header
|
69
|
+
|
70
|
+
Augustiner Bräu München, München, Edelstoff, 5.6%
|
71
|
+
Bayerische Staatsbrauerei Weihenstephan, Freising, Hefe Weissbier, 5.4%
|
72
|
+
TXT
|
73
|
+
|
74
|
+
pp row
|
75
|
+
assert_equal ['Augustiner Bräu München', 'München', 'Edelstoff', '5.6%'], row
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_header
|
79
|
+
puts "== header: beer.csv:"
|
80
|
+
header = CsvReader.header( "#{CsvReader.test_data_dir}/beer.csv" )
|
81
|
+
pp header
|
82
|
+
assert_equal ['Brewery','City','Name','Abv'], header
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_header11
|
86
|
+
puts "== header: beer11.csv:"
|
87
|
+
header = CsvReader.header( "#{CsvReader.test_data_dir}/beer11.csv" )
|
88
|
+
pp header
|
89
|
+
assert_equal ['Brewery','City','Name','Abv'], header
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def test_foreach
|
94
|
+
puts "== foreach: beer.csv:"
|
95
|
+
CsvReader.foreach( "#{CsvReader.test_data_dir}/beer.csv" ) do |row|
|
96
|
+
pp row
|
97
|
+
pp row.fields
|
98
|
+
end
|
99
|
+
assert true
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_foreach11
|
103
|
+
puts "== foreach: beer11.csv:"
|
104
|
+
CsvReader.foreach( "#{CsvReader.test_data_dir}/beer11.csv" ) do |row|
|
105
|
+
pp row
|
106
|
+
pp row.fields
|
107
|
+
end
|
108
|
+
assert true
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_foreach_header_false
|
112
|
+
puts "== foreach (headers: false): beer11.csv:"
|
113
|
+
CsvReader.foreach( "#{CsvReader.test_data_dir}/beer11.csv", headers: false ) do |row|
|
114
|
+
pp row ## note: is Array (no .fields available!!!!!)
|
115
|
+
end
|
116
|
+
assert true
|
117
|
+
end
|
118
|
+
|
119
|
+
end # class TestReader
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csvreader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
@@ -57,6 +57,10 @@ files:
|
|
57
57
|
- lib/csvreader.rb
|
58
58
|
- lib/csvreader/reader.rb
|
59
59
|
- lib/csvreader/version.rb
|
60
|
+
- test/data/beer.csv
|
61
|
+
- test/data/beer11.csv
|
62
|
+
- test/helper.rb
|
63
|
+
- test/test_reader.rb
|
60
64
|
homepage: https://github.com/csv11/csvreader
|
61
65
|
licenses:
|
62
66
|
- Public Domain
|