koine-csv 0.1.0 → 0.2.0
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 +4 -4
- data/README.md +43 -8
- data/koine-csv.gemspec +2 -0
- data/lib/koine/csv.rb +2 -0
- data/lib/koine/csv/csv_parser.rb +12 -4
- data/lib/koine/csv/mapped_columns_parser.rb +32 -0
- data/lib/koine/csv/named_columns_parser.rb +21 -0
- data/lib/koine/csv/version.rb +1 -1
- metadata +33 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61750f55f1fbec9a7047d25dbf2501dae41ae5c5
|
4
|
+
data.tar.gz: 00a991aa589665470d1bb0d19d1bf2494d53419c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b38bf2bb5a637b24ef2ebff7e8fc911291b26ea4ac3df76f2fe70a40fea2c12c72ff61a0c71dcff7ddb2defb45cf99994f3f9dd400fe8276a0b6793c6381f92
|
7
|
+
data.tar.gz: da11db9c6c6e33daf5ca58c80ac4705149520e5932ad0ea7e43ed976eade7b956b0563e4537363f9c11195449cc5919a5db0a6ed7ab6263e89db95c21b3adc3a
|
data/README.md
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
Just another CSV parser
|
4
4
|
|
5
5
|
[](https://travis-ci.org/mjacobus/koine-csv)
|
6
|
-
[](https://coveralls.io/github/mjacobus/koine-csv?branch=master)
|
7
7
|
[](https://codeclimate.com/github/mjacobus/koine-csv)
|
8
8
|
[](https://scrutinizer-ci.com/g/mjacobus/koine-csv/?branch=master)
|
9
|
-
[](https://travis-ci.org/mjacobus/koine-csv)
|
10
10
|
[](https://badge.fury.io/rb/koine-csv)
|
11
11
|
|
12
12
|
## Installation
|
@@ -30,14 +30,49 @@ Or install it yourself as:
|
|
30
30
|
```ruby
|
31
31
|
parser = Koine::Csv::CsvParser.new(column_separator: ";")
|
32
32
|
|
33
|
-
|
33
|
+
contents = "a;b\nc;d\n"
|
34
34
|
|
35
|
-
result = parser.parse(
|
35
|
+
result = parser.parse(contents)
|
36
|
+
|
37
|
+
# result = [
|
38
|
+
# ['a', 'b'],
|
39
|
+
# ['c', 'd'],
|
40
|
+
# ]
|
41
|
+
```
|
42
|
+
|
43
|
+
### Mapped Columns
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
parser = MappedColumnsParser.new({
|
47
|
+
column_names: [:name, :last_name]
|
48
|
+
})
|
49
|
+
|
50
|
+
contents = "jon;doe\njohn;travolta\n"
|
51
|
+
|
52
|
+
result = parser.parse(contents)
|
53
|
+
|
54
|
+
# result = [
|
55
|
+
# { name: 'jon', last_name: 'doe'},
|
56
|
+
# { name: 'john', last_name: 'travolta'},
|
57
|
+
# ]
|
58
|
+
```
|
59
|
+
|
60
|
+
### Named Columns
|
61
|
+
|
62
|
+
When the CSV already comes with titles
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
parser = NamedColumnsParser.new
|
66
|
+
|
67
|
+
contents = "jon;doe\njohn;travolta\n"
|
68
|
+
|
69
|
+
result = parser.parse(contents)
|
70
|
+
|
71
|
+
# result = [
|
72
|
+
# { 'name' => 'jon', 'last_name' => 'doe'},
|
73
|
+
# { 'name' => 'john', 'last_name' => 'travolta'},
|
74
|
+
# ]
|
36
75
|
|
37
|
-
# result = [
|
38
|
-
# ['a', 'b'],
|
39
|
-
# ['c', 'd'],
|
40
|
-
# ]
|
41
76
|
```
|
42
77
|
|
43
78
|
## Development
|
data/koine-csv.gemspec
CHANGED
@@ -34,4 +34,6 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_development_dependency "rake", "~> 10.0"
|
35
35
|
spec.add_development_dependency "minitest", "~> 5.0"
|
36
36
|
spec.add_development_dependency "minitest-reporters"
|
37
|
+
spec.add_development_dependency "coveralls"
|
38
|
+
spec.add_development_dependency "simplecov"
|
37
39
|
end
|
data/lib/koine/csv.rb
CHANGED
data/lib/koine/csv/csv_parser.rb
CHANGED
@@ -3,15 +3,23 @@ require "csv"
|
|
3
3
|
module Koine
|
4
4
|
module Csv
|
5
5
|
class CsvParser
|
6
|
-
def initialize(
|
7
|
-
|
6
|
+
def initialize(options = {})
|
7
|
+
defaults = { column_separator: ";" }
|
8
|
+
options = defaults.merge(options)
|
9
|
+
@parser_options = { col_sep: options[:column_separator] }
|
8
10
|
end
|
9
11
|
|
10
12
|
def parse(contents, &block)
|
11
|
-
CSV.parse(contents,
|
13
|
+
CSV.parse(contents, parser_options, &block)
|
12
14
|
end
|
13
15
|
|
14
|
-
|
16
|
+
protected
|
17
|
+
|
18
|
+
def column_separator
|
19
|
+
parser_options[:col_sep]
|
20
|
+
end
|
21
|
+
|
22
|
+
attr_reader :parser_options
|
15
23
|
end
|
16
24
|
end
|
17
25
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "csv"
|
2
|
+
|
3
|
+
module Koine
|
4
|
+
module Csv
|
5
|
+
class MappedColumnsParser < CsvParser
|
6
|
+
attr_reader :column_names
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
super(options)
|
10
|
+
@column_names = options.fetch(:column_names)
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse(contents, &block)
|
14
|
+
mapped = []
|
15
|
+
CSV.parse(contents, parser_options) do |row|
|
16
|
+
new_row = {}
|
17
|
+
row.each_with_index do |value, index|
|
18
|
+
new_row[column_name(index)] = value
|
19
|
+
end
|
20
|
+
mapped << new_row
|
21
|
+
end
|
22
|
+
block_given? ? mapped.each(&block) : mapped
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def column_name(index)
|
28
|
+
column_names.fetch(index)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "csv"
|
2
|
+
|
3
|
+
module Koine
|
4
|
+
module Csv
|
5
|
+
class NamedColumnsParser < CsvParser
|
6
|
+
def parse(contents, &block)
|
7
|
+
contents = contents.split("\n")
|
8
|
+
titles = contents.shift
|
9
|
+
column_names = CSV.parse(titles, col_sep: column_separator).first
|
10
|
+
|
11
|
+
options = {
|
12
|
+
column_names: column_names,
|
13
|
+
column_separator: column_separator
|
14
|
+
}
|
15
|
+
|
16
|
+
contents = contents.join("\n")
|
17
|
+
MappedColumnsParser.new(options).parse(contents, &block)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/koine/csv/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: koine-csv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcelo Jacobus
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: coveralls
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
description: Csv parsing classes
|
70
98
|
email:
|
71
99
|
- marcelo.jacobus@gmail.com
|
@@ -85,6 +113,8 @@ files:
|
|
85
113
|
- koine-csv.gemspec
|
86
114
|
- lib/koine/csv.rb
|
87
115
|
- lib/koine/csv/csv_parser.rb
|
116
|
+
- lib/koine/csv/mapped_columns_parser.rb
|
117
|
+
- lib/koine/csv/named_columns_parser.rb
|
88
118
|
- lib/koine/csv/version.rb
|
89
119
|
homepage: https://github.com/mjacobus/koine-csv
|
90
120
|
licenses:
|
@@ -107,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
137
|
version: '0'
|
108
138
|
requirements: []
|
109
139
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
140
|
+
rubygems_version: 2.6.11
|
111
141
|
signing_key:
|
112
142
|
specification_version: 4
|
113
143
|
summary: Csv parsing classes
|