csv_shaper 1.1.0 → 1.3.2
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 +5 -5
- data/.ruby-version +1 -1
- data/.tool-versions +1 -0
- data/.travis.yml +3 -3
- data/README.md +7 -1
- data/lib/csv_shaper.rb +1 -1
- data/lib/csv_shaper/encoder.rb +5 -1
- data/lib/csv_shaper/shaper.rb +6 -2
- data/lib/csv_shaper/version.rb +1 -1
- data/lib/csv_shaper_handler.rb +27 -0
- data/lib/csv_shaper_template.rb +2 -24
- data/spec/config_spec.rb +14 -0
- data/spec/csv_shaper_template_spec.rb +42 -0
- data/spec/encoder_spec.rb +6 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c06a84401d676f513ab8f089bfcea8cb244d806aabf77f4656e44ecc8d9a4f6e
|
4
|
+
data.tar.gz: 9e227b8653d95f8ab32b5d330fa7b14045c4e67db35e53f20406bb17a4e195fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9b10a4737247def56c00ddd6897b96d3547dafca91c041a93c50a2270efb5b2b215adaf8cda876b111fa59a637441e92f542a2c63f7f8d1cbe0140871b250d6
|
7
|
+
data.tar.gz: 2ad0ae7d740549839707e44273a6577ef5db6227e69198234d6cad784909c65055302d57dcad8413a096ca87febef1d9c5cb739cb9949e0346db0149eba52a21
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1
|
1
|
+
2.3.1
|
data/.tool-versions
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby 2.7.0
|
data/.travis.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
rvm:
|
2
|
-
-
|
3
|
-
- 2.
|
4
|
-
- 2.
|
2
|
+
- 2.7.1
|
3
|
+
- 2.6.6
|
4
|
+
- 2.5.8
|
data/README.md
CHANGED
@@ -27,7 +27,7 @@ end
|
|
27
27
|
|
28
28
|
### Install
|
29
29
|
|
30
|
-
**Requires Ruby
|
30
|
+
**Requires Ruby 2.2+**
|
31
31
|
|
32
32
|
Install using Rubygems
|
33
33
|
|
@@ -264,6 +264,12 @@ CsvShaper.encode(col_sep: "\t") do |csv|
|
|
264
264
|
end
|
265
265
|
```
|
266
266
|
|
267
|
+
To configure Rails template-specific CSV output, use the `config` method on the `csv` object:
|
268
|
+
|
269
|
+
```ruby
|
270
|
+
csv.config.col_sep = "\t"
|
271
|
+
```
|
272
|
+
|
267
273
|
### Contributing
|
268
274
|
|
269
275
|
1. Fork it
|
data/lib/csv_shaper.rb
CHANGED
data/lib/csv_shaper/encoder.rb
CHANGED
@@ -27,9 +27,13 @@ module CsvShaper
|
|
27
27
|
CSV::Row.new(@header.mapped_columns, data, false)
|
28
28
|
end
|
29
29
|
|
30
|
+
if csv_options[:write_headers] && rows.empty?
|
31
|
+
rows << CSV::Row.new(@header.mapped_columns, [], true)
|
32
|
+
end
|
33
|
+
|
30
34
|
table = CSV::Table.new(rows)
|
31
35
|
csv_options.except!(*custom_options.keys)
|
32
|
-
table.to_csv(csv_options)
|
36
|
+
table.to_csv(**csv_options)
|
33
37
|
end
|
34
38
|
|
35
39
|
private
|
data/lib/csv_shaper/shaper.rb
CHANGED
data/lib/csv_shaper/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'csv_shaper_template'
|
2
|
+
|
3
|
+
# CsvShaperHandler
|
4
|
+
# Template handler for Rails
|
5
|
+
class CsvShaperHandler
|
6
|
+
cattr_accessor :default_format
|
7
|
+
self.default_format = Mime[:csv]
|
8
|
+
|
9
|
+
# Expected `call` class method
|
10
|
+
# Set response headers with filename
|
11
|
+
# Primarily calls CsvShaperTemplate.encode, passing through the context (self)
|
12
|
+
def self.call(template, source = nil)
|
13
|
+
%{
|
14
|
+
if ( controller.present? ) && !( defined?(ActionMailer) && defined?(ActionMailer::Base) && controller.is_a?(ActionMailer::Base) )
|
15
|
+
@filename ||= "\#{controller.action_name}.csv"
|
16
|
+
controller.response.headers["Content-Type"] ||= 'text/csv'
|
17
|
+
controller.response.headers['Content-Disposition'] = "attachment; filename=\\\"\#{@filename}\\\""
|
18
|
+
end
|
19
|
+
|
20
|
+
CsvShaperTemplate.encode(self) do |csv|
|
21
|
+
#{source || template.source}
|
22
|
+
end
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
ActionView::Template.register_template_handler :shaper, CsvShaperHandler
|
data/lib/csv_shaper_template.rb
CHANGED
@@ -11,30 +11,8 @@ class CsvShaperTemplate < CsvShaper::Shaper
|
|
11
11
|
@context = context
|
12
12
|
super()
|
13
13
|
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# CsvShaperHandler
|
17
|
-
# Template handler for Rails
|
18
|
-
class CsvShaperHandler
|
19
|
-
cattr_accessor :default_format
|
20
|
-
self.default_format = Mime::CSV
|
21
14
|
|
22
|
-
|
23
|
-
|
24
|
-
# Primarily calls CsvShaperTemplate.encode, passing through the context (self)
|
25
|
-
def self.call(template)
|
26
|
-
%{
|
27
|
-
if ( controller.present? ) && !( defined?(ActionMailer) && defined?(ActionMailer::Base) && controller.is_a?(ActionMailer::Base) )
|
28
|
-
@filename ||= "\#{controller.action_name}.csv"
|
29
|
-
controller.response.headers["Content-Type"] ||= 'text/csv'
|
30
|
-
controller.response.headers['Content-Disposition'] = "attachment; filename=\\\"\#{@filename}\\\""
|
31
|
-
end
|
32
|
-
|
33
|
-
CsvShaperTemplate.encode(self) do |csv|
|
34
|
-
#{template.source}
|
35
|
-
end
|
36
|
-
}
|
15
|
+
def config
|
16
|
+
@local_config
|
37
17
|
end
|
38
18
|
end
|
39
|
-
|
40
|
-
ActionView::Template.register_template_handler :shaper, CsvShaperHandler
|
data/spec/config_spec.rb
CHANGED
@@ -13,6 +13,20 @@ describe CsvShaper::Config do
|
|
13
13
|
expect(config.options).to eq({ write_headers: false, col_sep: "\t", header_inflector: :titleize })
|
14
14
|
end
|
15
15
|
|
16
|
+
it "does not require setting up the config before generating a CSV file" do
|
17
|
+
shaper = CsvShaper::Shaper.new do |csv|
|
18
|
+
csv.headers :name, :age, :gender
|
19
|
+
|
20
|
+
csv.row do |csv|
|
21
|
+
csv.cell :name, 'Paul'
|
22
|
+
csv.cell :age, '27'
|
23
|
+
csv.cell :gender, 'Male'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
expect(shaper.to_csv).to eq "Name,Age,Gender\nPaul,27,Male\n"
|
28
|
+
end
|
29
|
+
|
16
30
|
it "should exclude the headers if specified" do
|
17
31
|
CsvShaper::Shaper.config = config
|
18
32
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "csv_shaper_template"
|
3
|
+
|
4
|
+
describe CsvShaperTemplate do
|
5
|
+
it "should allow configuration via #config method" do
|
6
|
+
csv_string = CsvShaperTemplate.encode(double('context')) do |csv|
|
7
|
+
csv.config.write_headers = false
|
8
|
+
csv.config.col_sep = ';'
|
9
|
+
|
10
|
+
csv.headers :name, :age, :gender
|
11
|
+
|
12
|
+
csv.row do |csv|
|
13
|
+
csv.cell :name, 'Paul'
|
14
|
+
csv.cell :age, '27'
|
15
|
+
csv.cell :gender, 'Male'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
expect(csv_string).to eq "Paul;27;Male\n"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should override global configuration with local configuration" do
|
23
|
+
CsvShaper::Shaper.config = CsvShaper::Config.new do |c|
|
24
|
+
c.write_headers = false
|
25
|
+
c.col_sep = "\t"
|
26
|
+
end
|
27
|
+
|
28
|
+
csv_string = CsvShaperTemplate.encode(double('context')) do |csv|
|
29
|
+
csv.config.col_sep = ','
|
30
|
+
|
31
|
+
csv.headers :name, :age, :gender
|
32
|
+
|
33
|
+
csv.row do |csv|
|
34
|
+
csv.cell :name, 'Paul'
|
35
|
+
csv.cell :age, '27'
|
36
|
+
csv.cell :gender, 'Male'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
expect(csv_string).to eq "Paul,27,Male\n"
|
41
|
+
end
|
42
|
+
end
|
data/spec/encoder_spec.rb
CHANGED
@@ -40,4 +40,10 @@ describe CsvShaper::Encoder do
|
|
40
40
|
encoder = CsvShaper::Encoder.new(csv.header, csv.rows)
|
41
41
|
expect(encoder.to_csv).to eq("Full name,Sex,Age\nPaul,Male,27\nBob,Male,31\nJane,Female,23\n,,81\n")
|
42
42
|
end
|
43
|
+
|
44
|
+
it "should encode a Shaper instance with no rows to a CSV string" do
|
45
|
+
CsvShaper::Shaper.config = config
|
46
|
+
encoder = CsvShaper::Encoder.new(csv.header, [])
|
47
|
+
expect(encoder.to_csv).to eq("Full name,Sex,Age\n")
|
48
|
+
end
|
43
49
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csv_shaper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Springett
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- ".groc.json"
|
67
67
|
- ".rspec"
|
68
68
|
- ".ruby-version"
|
69
|
+
- ".tool-versions"
|
69
70
|
- ".travis.yml"
|
70
71
|
- Gemfile
|
71
72
|
- LICENSE
|
@@ -79,9 +80,11 @@ files:
|
|
79
80
|
- lib/csv_shaper/row.rb
|
80
81
|
- lib/csv_shaper/shaper.rb
|
81
82
|
- lib/csv_shaper/version.rb
|
83
|
+
- lib/csv_shaper_handler.rb
|
82
84
|
- lib/csv_shaper_template.rb
|
83
85
|
- spec/config_spec.rb
|
84
86
|
- spec/csv_shaper_spec.rb
|
87
|
+
- spec/csv_shaper_template_spec.rb
|
85
88
|
- spec/encoder_spec.rb
|
86
89
|
- spec/fixtures/user.rb
|
87
90
|
- spec/header_spec.rb
|
@@ -106,14 +109,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
109
|
- !ruby/object:Gem::Version
|
107
110
|
version: '0'
|
108
111
|
requirements: []
|
109
|
-
|
110
|
-
rubygems_version: 2.2.2
|
112
|
+
rubygems_version: 3.1.2
|
111
113
|
signing_key:
|
112
114
|
specification_version: 4
|
113
115
|
summary: Beautiful DSL for creating CSV output in Ruby & Rails
|
114
116
|
test_files:
|
115
117
|
- spec/config_spec.rb
|
116
118
|
- spec/csv_shaper_spec.rb
|
119
|
+
- spec/csv_shaper_template_spec.rb
|
117
120
|
- spec/encoder_spec.rb
|
118
121
|
- spec/fixtures/user.rb
|
119
122
|
- spec/header_spec.rb
|