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