csv_generator 0.5.0 → 0.5.1

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