csvreader 1.2.2 → 1.2.3

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: 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