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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c20b49a067774dc41149f4f521e3ca83e7738042
4
- data.tar.gz: 2d2cf08748d4425922834da6127dc7037d43ba2f
3
+ metadata.gz: 9d9a9aab0ef93184107fb29217cd482102a8b8ab
4
+ data.tar.gz: ec424aba1eb32cba378f3815bb529e18723f4693
5
5
  SHA512:
6
- metadata.gz: ecb7f01e9657c66c43ca7377fa7aae3820a5880f21f54cf0c5f04f2fd95b7e883ef97599ea0d652d3cdedeba04f828cd6d08183f59e8d5a795a71b3dbf38697e
7
- data.tar.gz: a182bb3d7f6917a6686e1f0ccd4a8124f83dc4893f23a745f3ee18cdd6b38d78c9a4c6337bbecffb124e59e5cf36be6a398f72f1a38aebaa9ac2769d76a15a1c
6
+ metadata.gz: a9e9c3ea8d1884d2778661b02d0464503304867f0dda0fe7671d3daba33d9bce50d300259b58d1b6f91dab6119fec99eae939da32bd3e277aa97f6327402fa79
7
+ data.tar.gz: 387487571fc882d52747affd8178e3a4e9e9bdfdcb7201a32ef2fb09eab9bad7d6589e28f58ec5c664554d0189a8f6ccca7b8c3a7fdccbbd6934728c7dc80115
data/.rubocop.yml CHANGED
@@ -12,3 +12,6 @@ Style/UnneededPercentQ:
12
12
 
13
13
  Style/WordArray:
14
14
  Enabled: false
15
+
16
+ Style/TrailingComma:
17
+ Enabled: false
@@ -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'
@@ -1,3 +1,3 @@
1
1
  class CsvGenerator
2
- VERSION = '0.5.0'
2
+ VERSION = '0.5.1'
3
3
  end
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
- def generate(row_values)
40
- row_values.map { |value| stringify value }.join(field_separator) + line_separator
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 line_separator
46
- "\r\n"
55
+ def filter_options(hash)
56
+ hash.select { |k, _| KNOWN_OPTIONS.include? k }
47
57
  end
48
58
 
49
- def field_separator
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 quote_charactor
54
- '"'
67
+ def escape_quote_character(c)
68
+ c * 2
55
69
  end
56
70
 
57
- def escaped_quote
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
@@ -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.0
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-02 00:00:00.000000000 Z
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