csvreader 1.2.2 → 1.2.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8e2f4f6e06ec63483735c1e0966b61398df85eb
4
- data.tar.gz: 6c867acfa43c261473b6d6300e3ecd8d7042f0dc
3
+ metadata.gz: e54c57c44e895f8daacd12261b87195ab0ab6cd2
4
+ data.tar.gz: b63d0d183d98c3ab1f291e3bdf6168e0d5bd39fc
5
5
  SHA512:
6
- metadata.gz: 2ddc944ee42de5660c68e057d0cbdbdf81b0f135b603e87231da2258bbd9001fc2483881e1c0ff15d5d7b23d2cb9f1b2c799a77a3551dbaee18094ba9aad5086
7
- data.tar.gz: 39743a7df8b49b45a9ad1dd7ce8598616733348ecdbc52b94de4e8fc1fb7a54e33d0cbc36f3750a5940c9d46310d94a4c6d983811fb506efa2349bb0adc94d16
6
+ metadata.gz: 06756ee95e4810ded31be95abb5136bf0d0c8d7b79e2e19df483590bac051b449daee4f6178571bf177635ec35847220d859a6b5ba72068325710f022dbb6115
7
+ data.tar.gz: 884f5eff36a5d4cf03e1d7d5bab3a53632361ad6a7ab09ce16a502c0d25f25dcfea025efa8d79e8127fd735627683c3d8a91f22e3c03cf3d033ff7e64d7004b0
@@ -3,6 +3,16 @@ LICENSE.md
3
3
  Manifest.txt
4
4
  README.md
5
5
  Rakefile
6
+ datasets/beer.csv
7
+ datasets/beer11.csv
8
+ datasets/cars11.csv
9
+ datasets/cities11.csv
10
+ datasets/customers11.csv
11
+ datasets/iris.attrib.csv
12
+ datasets/iris11.csv
13
+ datasets/lcc.attrib.csv
14
+ datasets/shakespeare.csv
15
+ datasets/test.csv
6
16
  lib/csvreader.rb
7
17
  lib/csvreader/base.rb
8
18
  lib/csvreader/buffer.rb
@@ -15,19 +25,10 @@ lib/csvreader/parser_std.rb
15
25
  lib/csvreader/parser_strict.rb
16
26
  lib/csvreader/parser_tab.rb
17
27
  lib/csvreader/parser_table.rb
28
+ lib/csvreader/parser_yaml.rb
18
29
  lib/csvreader/reader.rb
19
30
  lib/csvreader/reader_hash.rb
20
31
  lib/csvreader/version.rb
21
- test/data/beer.csv
22
- test/data/beer11.csv
23
- test/data/cars11.csv
24
- test/data/cities11.csv
25
- test/data/customers11.csv
26
- test/data/iris.attrib.csv
27
- test/data/iris11.csv
28
- test/data/lcc.attrib.csv
29
- test/data/shakespeare.csv
30
- test/data/test.csv
31
32
  test/helper.rb
32
33
  test/test_buffer.rb
33
34
  test/test_converter.rb
data/Rakefile CHANGED
@@ -17,6 +17,12 @@ Hoe.spec 'csvreader' do
17
17
  self.readme_file = 'README.md'
18
18
  self.history_file = 'HISTORY.md'
19
19
 
20
+ self.extra_deps = [
21
+ ['tabreader', '>=1.0.1'],
22
+ ['csvyaml', '>=0.1.0'],
23
+ ['csvjson', '>=1.0.0']
24
+ ]
25
+
20
26
  self.licenses = ['Public Domain']
21
27
 
22
28
  self.spec_extras = {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -9,6 +9,10 @@ require 'date' ## use for Date.parse and DateTime.parse
9
9
  require 'yaml' ## used for (optional) meta data blocks
10
10
 
11
11
 
12
+ require 'tabreader'
13
+ require 'csvjson'
14
+ require 'csvyaml'
15
+
12
16
 
13
17
  ###
14
18
  # our own code
@@ -19,6 +23,7 @@ require 'csvreader/parser_strict' # flexible (strict - no leading/trailing spa
19
23
  require 'csvreader/parser_tab'
20
24
  require 'csvreader/parser_fixed'
21
25
  require 'csvreader/parser_json'
26
+ require 'csvreader/parser_yaml'
22
27
  require 'csvreader/parser_table'
23
28
  require 'csvreader/parser'
24
29
  require 'csvreader/converter'
@@ -68,6 +73,8 @@ class Parser
68
73
  TABLE = ParserTable.new ## space-separated e.g /[ \t]+/
69
74
  FIXED = ParserFixed.new
70
75
 
76
+ JSON = ParserJson.new
77
+ YAML = ParserYaml.new
71
78
 
72
79
  def self.default() DEFAULT; end ## alternative alias for DEFAULT
73
80
  def self.numeric() NUMERIC; end
@@ -85,11 +92,17 @@ class Parser
85
92
  def self.postgres() postgresql; end
86
93
  def self.postgresql_text() POSTGRESQL_TEXT; end
87
94
  def self.postgres_text() postgresql_text; end
95
+
88
96
  def self.tab() TAB; end
89
97
  def self.table() TABLE; end
90
98
  def self.fixed() FIXED; end
91
99
  def self.fix() fixed; end
92
100
  def self.f() fixed; end
101
+
102
+ def self.json() JSON; end
103
+ def self.j() json; end
104
+ def self.yaml() YAML; end
105
+ def self.y() yaml; end
93
106
  end # class Parser
94
107
  end # class CsvReader
95
108
 
@@ -114,6 +127,8 @@ class CsvReader
114
127
  TABLE = Builder.new( Parser::TABLE )
115
128
  FIXED = Builder.new( Parser::FIXED )
116
129
 
130
+ JSON = Builder.new( Parser::JSON )
131
+ YAML = Builder.new( Parser::YAML )
117
132
 
118
133
  def self.default() DEFAULT; end ## alternative alias for DEFAULT
119
134
  def self.numeric() NUMERIC; end
@@ -131,11 +146,17 @@ class CsvReader
131
146
  def self.postgres() postgresql; end
132
147
  def self.postgresql_text() POSTGRESQL_TEXT; end
133
148
  def self.postgres_text() postgresql_text; end
149
+
134
150
  def self.tab() TAB; end
135
151
  def self.table() TABLE; end
136
152
  def self.fixed() FIXED; end
137
153
  def self.fix() fixed; end
138
154
  def self.f() fixed; end
155
+
156
+ def self.json() JSON; end
157
+ def self.j() json; end
158
+ def self.yaml() YAML; end
159
+ def self.y() yaml; end
139
160
  end # class CsvReader
140
161
 
141
162
 
@@ -158,6 +179,9 @@ class CsvHashReader
158
179
  TABLE = Builder.new( Parser::TABLE )
159
180
  FIXED = Builder.new( Parser::FIXED )
160
181
 
182
+ JSON = Builder.new( Parser::JSON )
183
+ YAML = Builder.new( Parser::YAML )
184
+
161
185
 
162
186
  def self.default() DEFAULT; end ## alternative alias for DEFAULT
163
187
  def self.numeric() NUMERIC; end
@@ -171,11 +195,17 @@ class CsvHashReader
171
195
  def self.postgres() postgresql; end
172
196
  def self.postgresql_text() POSTGRESQL_TEXT; end
173
197
  def self.postgres_text() postgresql_text; end
198
+
174
199
  def self.tab() TAB; end
175
200
  def self.table() TABLE; end
176
201
  def self.fixed() FIXED; end
177
202
  def self.fix() fixed; end
178
203
  def self.f() fixed; end
204
+
205
+ def self.json() JSON; end
206
+ def self.j() json; end
207
+ def self.yaml() YAML; end
208
+ def self.y() yaml; end
179
209
  end # class CsvHashReader
180
210
 
181
211
 
@@ -1,5 +1,24 @@
1
1
  # encoding: utf-8
2
2
 
3
3
 
4
- #######
5
- ## todo: add parser for new CSV <3 JSON format
4
+ class CsvReader
5
+
6
+ class ParserJson
7
+
8
+ def parse( data, **kwargs, &block )
9
+ ## note: kwargs NOT used for now (but required for "protocol/interface" by other parsers)
10
+
11
+ ## note: input: required each_line (string or io/file for example)
12
+ ## assume data is a string or io/file handle
13
+ csv = CsvJson.new( data )
14
+
15
+ if block_given?
16
+ csv.each( &block )
17
+ else
18
+ csv.to_a
19
+ end
20
+ end ## method parse
21
+
22
+
23
+ end # class ParserJson
24
+ end # class CsvReader
@@ -378,8 +378,8 @@ def parse_meta( input )
378
378
  skip_newline( input )
379
379
 
380
380
  buf = "---\n" ## note: start buffer with yaml header line - why?
381
- ## YAML.load("") return false !!!
382
- ## YAML.load("---\n") returns nil -- yes!! if we get nil return empty hash {}
381
+ ## ::YAML.load("") return false !!!
382
+ ## ::YAML.load("---\n") returns nil -- yes!! if we get nil return empty hash {}
383
383
 
384
384
  newline = true
385
385
 
@@ -406,7 +406,7 @@ def parse_meta( input )
406
406
  end
407
407
  end
408
408
 
409
- data = YAML.load( buf )
409
+ data = ::YAML.load( buf ) ## note: MUST use "outer" scope (CsvReader defines its own YAML parser)
410
410
  ## todo: check edge cases - always should return a hash or nil
411
411
  ## what to do with just integer, string or array etc. ???
412
412
 
@@ -5,58 +5,19 @@ class CsvReader
5
5
  class ParserTab
6
6
 
7
7
  def parse( data, **kwargs, &block )
8
-
9
- ## note: input: required each_line (string or io/file for example)
10
8
  ## note: kwargs NOT used for now (but required for "protocol/interface" by other parsers)
11
9
 
12
- input = data ## assume it's a string or io/file handle
10
+ ## note: input: required each_line (string or io/file for example)
11
+ ## assume data is a string or io/file handle
12
+ tab = TabReader.new( data )
13
13
 
14
14
  if block_given?
15
- parse_lines( input, &block )
15
+ tab.each( &block )
16
16
  else
17
- records = []
18
-
19
- parse_lines( input ) do |record|
20
- records << record
21
- end
22
-
23
- records
17
+ tab.to_a
24
18
  end
25
19
  end ## method parse
26
20
 
27
21
 
28
-
29
- private
30
-
31
- def parse_lines( input, &block )
32
-
33
- ## note: each line only works with \n (windows) or \r\n (unix)
34
- ## will NOT work with \r (old mac, any others?) only!!!!
35
- input.each_line do |line|
36
-
37
- ## puts "line:"
38
- ## pp line
39
-
40
- ## note: chomp('') if is an empty string,
41
- ## it will remove all trailing newlines from the string.
42
- ## use line.sub(/[\n\r]*$/, '') or similar instead - why? why not?
43
- line = line.chomp( '' )
44
- ## pp line
45
-
46
- # note: trailing empty fields get (auto-)trimmed by split !!!!!!!
47
- # Solution!! change split( "\t" ) to split( "\t", -1 )
48
- # If the limit parameter is omitted, trailing null fields are suppressed.
49
- # If limit is a positive number, at most that number of fields will be returned
50
- # (if limit is 1, the entire string is returned as the only entry in an array).
51
- # If negative, there is no limit to the number of fields returned, and trailing null fields are not suppressed.
52
- values = line.split( "\t", -1 )
53
- ## pp values
54
-
55
- ## note: requires block - enforce? how? why? why not?
56
- block.call( values )
57
- end
58
- end # method parse_lines
59
-
60
-
61
22
  end # class ParserTab
62
23
  end # class CsvReader
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ class CsvReader
5
+
6
+ class ParserYaml
7
+
8
+ def parse( data, **kwargs, &block )
9
+ ## note: kwargs NOT used for now (but required for "protocol/interface" by other parsers)
10
+
11
+ ## note: input: required each_line (string or io/file for example)
12
+ ## assume data is a string or io/file handle
13
+ csv = CsvYaml.new( data )
14
+
15
+ if block_given?
16
+ csv.each( &block )
17
+ else
18
+ csv.to_a
19
+ end
20
+ end ## method parse
21
+
22
+
23
+ end # class ParserYaml
24
+ end # class CsvReader
@@ -6,6 +6,8 @@ class CsvHashReader
6
6
  ## add convenience shortcuts / aliases for CsvReader support classes
7
7
  Parser = CsvReader::Parser
8
8
  ParserFixed = CsvReader::ParserFixed
9
+ ParserJson = CsvReader::ParserJson
10
+ ParserYaml = CsvReader::ParserYaml
9
11
  Converter = CsvReader::Converter
10
12
 
11
13
 
@@ -6,7 +6,7 @@ class CsvReader ## note: uses a class for now - change to module - why? why no
6
6
  module Version
7
7
  MAJOR = 1 ## todo: namespace inside version or something - why? why not??
8
8
  MINOR = 2
9
- PATCH = 2
9
+ PATCH = 3
10
10
 
11
11
  ## self.to_s - why? why not?
12
12
  end
@@ -13,7 +13,7 @@ require 'csvreader'
13
13
  ## add test_data_dir helper
14
14
  class CsvReader
15
15
  def self.test_data_dir
16
- "#{root}/test/data"
16
+ "#{root}/datasets"
17
17
  end
18
18
  end
19
19
 
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csvreader
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-19 00:00:00.000000000 Z
11
+ date: 2018-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tabreader
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: csvyaml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: csvjson
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: rdoc
15
57
  requirement: !ruby/object:Gem::Requirement
@@ -54,6 +96,16 @@ files:
54
96
  - Manifest.txt
55
97
  - README.md
56
98
  - Rakefile
99
+ - datasets/beer.csv
100
+ - datasets/beer11.csv
101
+ - datasets/cars11.csv
102
+ - datasets/cities11.csv
103
+ - datasets/customers11.csv
104
+ - datasets/iris.attrib.csv
105
+ - datasets/iris11.csv
106
+ - datasets/lcc.attrib.csv
107
+ - datasets/shakespeare.csv
108
+ - datasets/test.csv
57
109
  - lib/csvreader.rb
58
110
  - lib/csvreader/base.rb
59
111
  - lib/csvreader/buffer.rb
@@ -66,19 +118,10 @@ files:
66
118
  - lib/csvreader/parser_strict.rb
67
119
  - lib/csvreader/parser_tab.rb
68
120
  - lib/csvreader/parser_table.rb
121
+ - lib/csvreader/parser_yaml.rb
69
122
  - lib/csvreader/reader.rb
70
123
  - lib/csvreader/reader_hash.rb
71
124
  - lib/csvreader/version.rb
72
- - test/data/beer.csv
73
- - test/data/beer11.csv
74
- - test/data/cars11.csv
75
- - test/data/cities11.csv
76
- - test/data/customers11.csv
77
- - test/data/iris.attrib.csv
78
- - test/data/iris11.csv
79
- - test/data/lcc.attrib.csv
80
- - test/data/shakespeare.csv
81
- - test/data/test.csv
82
125
  - test/helper.rb
83
126
  - test/test_buffer.rb
84
127
  - test/test_converter.rb