csb 0.7.0 → 0.8.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
  SHA256:
3
- metadata.gz: 6cf72524c9c57bb6b6b8552ff67f34542f791bae8f1e395464a8d887157480ee
4
- data.tar.gz: 3450353def85946d04c04e238082200401b1bf2ee1010fc4ebb3f6478bbdfac1
3
+ metadata.gz: 65631a79f4d83eb7a03b39ec88084daf60fb32249894116d4362c009bee3d9ff
4
+ data.tar.gz: '04825902e66e259ea488c97884f9b0bb4540d0ec1f2b2d58e087fc84b3491516'
5
5
  SHA512:
6
- metadata.gz: 570eb119ec084220bb78abfcc11dd99dfd7427904593b4c229e1e0d825c6b0b69dfdb4053cdaec18725b0ef4569764ca02b90c3d61e342501f52f3bcb44c91f6
7
- data.tar.gz: 1410d02f0dcfd112fc0799e1a2fdfde1edc44aa7a6c4f4bbe64fc7aea171bffc0a55fbea09dc6ff4999712c64d4586a5693c9fa1f1e2451dded04f863326358a
6
+ metadata.gz: 9bed968513f2be918b5c0fcefa1d711bc86858c118fa2561c5b5ec80d36de41460712ff82079ca006338d2ef2ce64c87b66a1252681aea964c80f2bf3b4ea6d6
7
+ data.tar.gz: 567168271617cd1f96665dec7c9d5acd7e9f1dfb4ce017fefd95ceccc4ff40cbb8a94b58ca4fb989af7299d98abe2d1ca5f8ca8c638eb0d86d7a347d4f38c42a
@@ -15,7 +15,7 @@ jobs:
15
15
  strategy:
16
16
  fail-fast: false
17
17
  matrix:
18
- ruby: ["3.0", "3.1", "3.2"]
18
+ ruby: ["3.0", "3.1", "3.2", "3.3"]
19
19
  gemfile: ["rails61", "rails70"]
20
20
  exclude:
21
21
  - ruby: "3.1"
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.8.0
2
+
3
+ - Add `csv_options` as an option to pass to `CSV.generate_line` (#18)
4
+
1
5
  ## 0.7.0
2
6
 
3
7
  - Drop support for ruby 2.7
data/README.md CHANGED
@@ -37,6 +37,7 @@ csv.items = @reports
37
37
 
38
38
  # csv.filename = "reports_#{Time.current.to_i}.csv"
39
39
  # csv.streaming = false
40
+ # csv.csv_options = { col_sep: "\t" }
40
41
 
41
42
  csv.cols.add('Update date') { |r| l(r.updated_at.to_date) }
42
43
  csv.cols.add('Categories') { |r| r.categories.pluck(:name).join(' ') }
@@ -130,6 +131,7 @@ In `config/initializers/csb.rb`, you can configure the following values.
130
131
  Csb.configure do |config|
131
132
  config.utf8_bom = true # default: false
132
133
  config.streaming = false # default: true
134
+ config.csv_options = { col_sep: "\t" } # default: {}
133
135
  config.after_streaming_error = ->(error) do # default: nil
134
136
  Rails.logger.error(error)
135
137
  Bugsnag.notify(error)
data/lib/csb/builder.rb CHANGED
@@ -5,21 +5,22 @@ module Csb
5
5
  class Builder
6
6
  UTF8_BOM = "\xEF\xBB\xBF".freeze
7
7
 
8
- attr_reader :output, :utf8_bom, :items, :cols
8
+ attr_reader :output, :utf8_bom, :items, :cols, :csv_options
9
9
  attr_accessor :items
10
10
 
11
- def initialize(output = '', items: [], utf8_bom: false)
11
+ def initialize(output = '', items: [], utf8_bom: false, csv_options: {})
12
12
  @output = output
13
13
  @utf8_bom = utf8_bom
14
14
  @cols = Cols.new
15
15
  @items = items
16
+ @csv_options = csv_options
16
17
  end
17
18
 
18
19
  def build
19
20
  output << UTF8_BOM if utf8_bom
20
- output << CSV.generate_line(cols.headers)
21
+ output << CSV.generate_line(cols.headers, **csv_options)
21
22
  items.each do |item|
22
- output << CSV.generate_line(cols.values_by_item(item))
23
+ output << CSV.generate_line(cols.values_by_item(item), **csv_options)
23
24
  rescue => error
24
25
  break if Csb.configuration.ignore_class_names.include?(error.class.name)
25
26
 
@@ -1,10 +1,11 @@
1
1
  module Csb
2
2
  class Configuration
3
- attr_accessor :utf8_bom, :streaming, :after_streaming_error, :ignore_class_names
3
+ attr_accessor :utf8_bom, :streaming, :after_streaming_error, :ignore_class_names, :csv_options
4
4
 
5
5
  def initialize
6
6
  @utf8_bom = false
7
7
  @streaming = true
8
+ @csv_options = {}
8
9
  @ignore_class_names = %w[Puma::ConnectionError]
9
10
  end
10
11
  end
data/lib/csb/handler.rb CHANGED
@@ -14,6 +14,7 @@ module Csb
14
14
  csv = ::Csb::Template.new(
15
15
  utf8_bom: ::Csb.configuration.utf8_bom,
16
16
  streaming: ::Csb.configuration.streaming,
17
+ csv_options: ::Csb.configuration.csv_options,
17
18
  )
18
19
  #{source}
19
20
  controller.send(:send_file_headers!, type: 'text/csv', filename: csv.filename)
data/lib/csb/template.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  module Csb
2
2
  class Template
3
- attr_accessor :utf8_bom, :filename, :streaming, :items, :cols
3
+ attr_accessor :utf8_bom, :filename, :streaming, :items, :cols, :csv_options
4
4
 
5
- def initialize(utf8_bom:, streaming:)
5
+ def initialize(utf8_bom:, streaming:, csv_options:)
6
6
  @utf8_bom = utf8_bom
7
7
  @streaming = streaming
8
+ @csv_options = csv_options
8
9
  @cols = Cols.new
9
10
  @items = []
10
11
  end
@@ -20,7 +21,7 @@ module Csb
20
21
  private
21
22
 
22
23
  def build_string
23
- builder = Builder.new(utf8_bom: utf8_bom, items: items)
24
+ builder = Builder.new(utf8_bom: utf8_bom, items: items, csv_options: csv_options)
24
25
  builder.cols.copy!(cols)
25
26
  builder.build
26
27
  end
@@ -28,7 +29,7 @@ module Csb
28
29
  def build_enumerator
29
30
  Enumerator.new do |y|
30
31
  begin
31
- builder = Builder.new(y, utf8_bom: utf8_bom, items: items)
32
+ builder = Builder.new(y, utf8_bom: utf8_bom, items: items, csv_options: csv_options)
32
33
  builder.cols.copy!(cols)
33
34
  builder.build
34
35
  rescue => error
data/lib/csb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Csb
2
- VERSION = '0.7.0'
2
+ VERSION = '0.8.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - aki77
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-13 00:00:00.000000000 Z
11
+ date: 2024-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails