csv_generator 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/csv_generator.gemspec +1 -0
- data/lib/csv_generator/version.rb +1 -1
- data/lib/csv_generator.rb +33 -15
- data/spec/csv_generator_spec.rb +48 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d9a9aab0ef93184107fb29217cd482102a8b8ab
|
4
|
+
data.tar.gz: ec424aba1eb32cba378f3815bb529e18723f4693
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9e9c3ea8d1884d2778661b02d0464503304867f0dda0fe7671d3daba33d9bce50d300259b58d1b6f91dab6119fec99eae939da32bd3e277aa97f6327402fa79
|
7
|
+
data.tar.gz: 387487571fc882d52747affd8178e3a4e9e9bdfdcb7201a32ef2fb09eab9bad7d6589e28f58ec5c664554d0189a8f6ccca7b8c3a7fdccbbd6934728c7dc80115
|
data/.rubocop.yml
CHANGED
data/csv_generator.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
22
|
+
spec.add_development_dependency 'fakefs', '~> 0.6'
|
22
23
|
spec.add_development_dependency 'pry'
|
23
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
24
25
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
data/lib/csv_generator.rb
CHANGED
@@ -9,20 +9,21 @@ class CsvGenerator
|
|
9
9
|
permission = options[:permission] || 0644
|
10
10
|
|
11
11
|
File.open(path, mode, permission) do |io|
|
12
|
-
with io, &block
|
12
|
+
with io, options, &block
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def with(io)
|
17
|
-
generator = new(io)
|
16
|
+
def with(io, options = {})
|
17
|
+
generator = new(io, options)
|
18
18
|
|
19
19
|
yield generator if block_given?
|
20
20
|
generator
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def initialize(io)
|
24
|
+
def initialize(io, options = {})
|
25
25
|
@io = io
|
26
|
+
@options = options
|
26
27
|
end
|
27
28
|
|
28
29
|
def <<(row_values)
|
@@ -32,32 +33,49 @@ class CsvGenerator
|
|
32
33
|
private
|
33
34
|
|
34
35
|
def row_generator
|
35
|
-
@row_generator ||= RowGenerator.new
|
36
|
+
@row_generator ||= RowGenerator.new(@options)
|
36
37
|
end
|
37
38
|
|
38
39
|
class RowGenerator
|
39
|
-
|
40
|
-
|
40
|
+
KNOWN_OPTIONS = %i(line_separator field_separator quote_charactor).freeze
|
41
|
+
|
42
|
+
attr_reader(*KNOWN_OPTIONS)
|
43
|
+
attr_reader :escaped_quote
|
44
|
+
|
45
|
+
def initialize(options = {})
|
46
|
+
default_config.merge(filter_options options).each do |k, v|
|
47
|
+
instance_variable_set :"@#{k}", v
|
48
|
+
end
|
49
|
+
|
50
|
+
@escaped_quote = quote_charactor * 2
|
41
51
|
end
|
42
52
|
|
43
53
|
private
|
44
54
|
|
45
|
-
def
|
46
|
-
|
55
|
+
def filter_options(hash)
|
56
|
+
hash.select { |k, _| KNOWN_OPTIONS.include? k }
|
47
57
|
end
|
48
58
|
|
49
|
-
def
|
50
|
-
|
59
|
+
def default_config
|
60
|
+
{
|
61
|
+
line_separator: "\r\n",
|
62
|
+
field_separator: ',',
|
63
|
+
quote_charactor: '"',
|
64
|
+
}
|
51
65
|
end
|
52
66
|
|
53
|
-
def
|
54
|
-
|
67
|
+
def escape_quote_character(c)
|
68
|
+
c * 2
|
55
69
|
end
|
56
70
|
|
57
|
-
|
58
|
-
|
71
|
+
public
|
72
|
+
|
73
|
+
def generate(row_values)
|
74
|
+
row_values.map { |value| stringify value }.join(field_separator) + line_separator
|
59
75
|
end
|
60
76
|
|
77
|
+
private
|
78
|
+
|
61
79
|
def stringify(value)
|
62
80
|
case value
|
63
81
|
when nil
|
data/spec/csv_generator_spec.rb
CHANGED
@@ -1,4 +1,52 @@
|
|
1
|
+
require 'fakefs/spec_helpers'
|
2
|
+
|
1
3
|
describe CsvGenerator do
|
4
|
+
describe '.generate' do
|
5
|
+
context 'given only a file name' do
|
6
|
+
include FakeFS::SpecHelpers
|
7
|
+
|
8
|
+
specify do
|
9
|
+
CsvGenerator.generate('test.csv') do |csv|
|
10
|
+
csv << ['test', 123]
|
11
|
+
end
|
12
|
+
|
13
|
+
expect(File.read('test.csv')).to eq %("test",123\r\n)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'given the name of an existing file' do
|
18
|
+
include FakeFS::SpecHelpers
|
19
|
+
|
20
|
+
specify do
|
21
|
+
File.open('test.csv', 'w') do |file|
|
22
|
+
file.write(%("existing line",987\r\n))
|
23
|
+
end
|
24
|
+
|
25
|
+
CsvGenerator.generate('test.csv') do |csv|
|
26
|
+
csv << ['test', 123]
|
27
|
+
end
|
28
|
+
|
29
|
+
expect(File.read('test.csv')).to eq %("test",123\r\n)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'given "a" as mode' do
|
34
|
+
include FakeFS::SpecHelpers
|
35
|
+
|
36
|
+
specify do
|
37
|
+
File.open('test.csv', 'w') do |file|
|
38
|
+
file.write(%("existing line",987\r\n))
|
39
|
+
end
|
40
|
+
|
41
|
+
CsvGenerator.generate('test.csv', mode: 'a') do |csv|
|
42
|
+
csv << ['test', 123]
|
43
|
+
end
|
44
|
+
|
45
|
+
expect(File.read('test.csv')).to eq %("existing line",987\r\n"test",123\r\n)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
2
50
|
describe '#<<' do
|
3
51
|
let(:io) { StringIO.new }
|
4
52
|
let(:csv) { CsvGenerator.new(io) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csv_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SAWADA Tadashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: fakefs
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.6'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: pry
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|