koine-csv 0.1.0 → 0.2.0

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: 8ef578ceebc4473da0325750a733eb259d42a6bb
4
- data.tar.gz: 9f5db34956ac39d00fd0ef395ac5725d6bba4020
3
+ metadata.gz: 61750f55f1fbec9a7047d25dbf2501dae41ae5c5
4
+ data.tar.gz: 00a991aa589665470d1bb0d19d1bf2494d53419c
5
5
  SHA512:
6
- metadata.gz: b5e6690bc9d3ca97fa71029d602bdd5b79bbd11f198570dbf694beeb1adc15a00861eb5ef70e3df1ddc5557ce776e70f2d1fff026371442f83851efa8ac513f8
7
- data.tar.gz: 9144d1e5a69a8ff8e64e2f345fdb3803889820e8ba7c152419777689bce7b607f4535ebc934f4a04826406e6cf1784ffa880dd0565b31abc91d967a6bbb15bf9
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
  [![Build Status](https://travis-ci.org/mjacobus/koine-csv.svg)](https://travis-ci.org/mjacobus/koine-csv)
6
- [![Code Coverage](https://scrutinizer-ci.com/g/mjacobus/koine-csv/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/mjacobus/koine-csv/?branch=master)
6
+ [![Coverage Status](https://coveralls.io/repos/github/mjacobus/koine-csv/badge.svg?branch=master)](https://coveralls.io/github/mjacobus/koine-csv?branch=master)
7
7
  [![Code Climate](https://codeclimate.com/github/mjacobus/koine-csv/badges/gpa.svg)](https://codeclimate.com/github/mjacobus/koine-csv)
8
8
  [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/mjacobus/koine-csv/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/mjacobus/koine-csv/?branch=master)
9
- [![Dependency Status](https://gemnasium.com/mjacobus/koine-csv.svg)](https://gemnasium.com/mjacobus/koine-csv)
9
+ [![Build Status](https://travis-ci.org/mjacobus/koine-csv.svg?branch=master)](https://travis-ci.org/mjacobus/koine-csv)
10
10
  [![Gem Version](https://badge.fury.io/rb/koine-csv.svg)](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
- content = "a;b\nc;d\n"
33
+ contents = "a;b\nc;d\n"
34
34
 
35
- result = parser.parse(content)
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
@@ -3,5 +3,7 @@ require "koine/csv/version"
3
3
  module Koine
4
4
  module Csv
5
5
  autoload :CsvParser, 'koine/csv/csv_parser'
6
+ autoload :MappedColumnsParser, 'koine/csv/mapped_columns_parser'
7
+ autoload :NamedColumnsParser, 'koine/csv/named_columns_parser'
6
8
  end
7
9
  end
@@ -3,15 +3,23 @@ require "csv"
3
3
  module Koine
4
4
  module Csv
5
5
  class CsvParser
6
- def initialize(column_separator = ";")
7
- @options = { col_sep: column_separator }
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, options, &block)
13
+ CSV.parse(contents, parser_options, &block)
12
14
  end
13
15
 
14
- attr_reader :options
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
@@ -1,5 +1,5 @@
1
1
  module Koine
2
2
  module Csv
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
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.1.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: 2016-11-26 00:00:00.000000000 Z
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.4.8
140
+ rubygems_version: 2.6.11
111
141
  signing_key:
112
142
  specification_version: 4
113
143
  summary: Csv parsing classes