csb 0.2.3 → 0.5.0

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
  SHA256:
3
- metadata.gz: 3ff19feed336a0df9dc6426e5afa90af371db81b44cac91c7d19c1c6ae6d2ea0
4
- data.tar.gz: afcd571ef70b7bf55fca807e4013d2a8bf765b1739c7cb21c79e6633e0ae2ca1
3
+ metadata.gz: 518693b4dfa9ef958beb05143afa99c8bc37a8a61fa8b86ea5619140b4898c66
4
+ data.tar.gz: a155dc1d962466e7d0ed1421910b4dd964de3e55a79ca1092cbe63e3a82591c0
5
5
  SHA512:
6
- metadata.gz: 0eee7bfb6c29045cbc98b92e28de678309450213bc0bb089fbffee484c94ebd5c89efacac09c092feb0380a2c1b3a01b6810c1d9b0ff3aea9064d16f19156ab4
7
- data.tar.gz: 18c7f6d86ec92c3ff5e39414772b75a4f370f57de0c43e90a7d97396546e1df275d83b4bd04e43409986ea3431d4efbf83126ef83ca001ed9bd99a0808fa0274
6
+ metadata.gz: 61fff01a75f9ada5135fc20b1cce96949150e4ec88d60862e373f3460f5421e04190315199892163ff9a45e6e15190ba305b315f5b8d014944b0786b27bb9698
7
+ data.tar.gz: 6cc80f9bbff9d15f844de89ca35429b529fb1054a655246de2f1cfebc55e8769d1560aa6b1f53bedeaac831901f54354fa768cc9d5879526c7fdeba3f060447d
@@ -0,0 +1,47 @@
1
+ name: Build
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+
8
+ jobs:
9
+ rspec:
10
+
11
+ runs-on: ubuntu-latest
12
+ env:
13
+ BUNDLE_JOBS: 4
14
+ BUNDLE_RETRY: 3
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ ruby: [2.6, 2.7]
19
+ gemfile: [
20
+ "gemfiles/rails52.gemfile",
21
+ "gemfiles/rails60.gemfile",
22
+ ]
23
+ steps:
24
+ - name: Install packages
25
+ run: |
26
+ sudo apt update -y
27
+ sudo apt install -y libsqlite3-dev
28
+ - uses: actions/checkout@v2
29
+ - uses: actions/cache@v1
30
+ with:
31
+ path: /home/runner/bundle
32
+ key: bundle-${{ matrix.ruby }}-${{ matrix.gemfile }}-${{ hashFiles(matrix.gemfile) }}-${{ hashFiles('**/*.gemspec') }}
33
+ restore-keys: |
34
+ bundle-${{ matrix.ruby }}-${{ matrix.gemfile }}-
35
+ - name: Set up Ruby
36
+ uses: ruby/setup-ruby@v1
37
+ with:
38
+ ruby-version: ${{ matrix.ruby }}
39
+ - name: Install dependencies
40
+ run: |
41
+ bundle config path /home/runner/bundle
42
+ bundle config --global gemfile ${{ matrix.gemfile }}
43
+ bundle install
44
+ bundle update
45
+ bundle clean
46
+ - name: Run rspec
47
+ run: bundle exec rspec
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  Gemfile.lock
13
+ /vendor/bundle
@@ -1,3 +1,24 @@
1
+ ## 0.5.0
2
+
3
+ - Add `as_table` testing helper
4
+
5
+ ## 0.4.0
6
+
7
+ - Csb::Cols#initialize supports block arguments
8
+ - Add Testing Helper
9
+
10
+ ## 0.3.1
11
+
12
+ - Refactor
13
+
14
+ ## 0.3.0
15
+
16
+ - Add ignore_class_names config
17
+
18
+ ## 0.2.4
19
+
20
+ - Clean up rack@2.2.x monkey patch.
21
+
1
22
  ## 0.2.3
2
23
 
3
24
  - Fix rack@2.2.x bug https://github.com/rack/rack/issues/1619
data/README.md CHANGED
@@ -1,7 +1,17 @@
1
+ [![Gem Version](https://badge.fury.io/rb/csb.svg)](https://rubygems.org/gems/csb)
2
+ [![Build](https://github.com/aki77/csb/workflows/Build/badge.svg)](https://github.com/aki77/csb/actions)
3
+
1
4
  # Csb
2
5
 
3
6
  A simple and streaming support CSV template engine for Ruby on Rails.
4
7
 
8
+ ## Features
9
+
10
+ - Support for streaming downloads
11
+ - Output in UTF-8 with BOM
12
+ - Readable code
13
+ - High testability
14
+
5
15
  ## Usage
6
16
 
7
17
  ### Template handler
@@ -18,9 +28,13 @@ In app/views/reports/index.csv.csb:
18
28
 
19
29
  ```ruby
20
30
  csv.items = @reports
31
+
21
32
  # When there are many records
22
33
  # csv.items = @reports.find_each
23
34
 
35
+ # When there are many records with decorator
36
+ # csv.items = @reports.find_each.lazy.map(&:decorate)
37
+
24
38
  # csv.filename = "reports_#{Time.current.to_i}.csv"
25
39
  # csv.streaming = false
26
40
 
@@ -56,6 +70,38 @@ csv.build
56
70
  # 2019/06/02,category3,content2,,dummy
57
71
  ```
58
72
 
73
+ ### Testing
74
+
75
+ ```ruby
76
+ # Your view
77
+ csv.items = @articles
78
+ csv.cols = Article.csb_cols
79
+
80
+ # Your Model
81
+ def self.csb_cols
82
+ Csb::Cols.new do |cols|
83
+ cols.add('Update date') { |r| I18n.l(r.updated_at.to_date) }
84
+ cols.add('Categories') { |r| r.categories.pluck(:name).join(' ') }
85
+ cols.add('Title', :title)
86
+ end
87
+ end
88
+
89
+ # Your test
90
+ require 'csb/testing'
91
+
92
+ expect(Article.csb_cols.col_pairs(article)).to eq [
93
+ ['Update date', '2020-01-01'],
94
+ ['Categories', 'test rspec'],
95
+ ['Title', 'Testing'],
96
+ ]
97
+
98
+ expect(Article.csb_cols.as_table(articles)).to eq [
99
+ ['Update date', 'Categories', 'Title'],
100
+ ['2020-01-01', 'test rspec', 'Testing'],
101
+ ['2020-02-01', 'rails gem', 'Rails 6.2'],
102
+ ]
103
+ ```
104
+
59
105
  ## Installation
60
106
 
61
107
  Add this line to your application's Gemfile:
@@ -26,6 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency "csv"
27
27
 
28
28
  spec.add_development_dependency "bundler", "~> 2.0"
29
- spec.add_development_dependency "rake", ">= 12.3.3"
30
- spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency "rake"
30
+ spec.add_development_dependency "rspec"
31
31
  end
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rails', '5.2.4.3'
4
+
5
+ gemspec path: '../'
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rails', '6.0.3.1'
4
+
5
+ gemspec path: '../'
@@ -20,6 +20,10 @@ module Csb
20
20
  output << CSV.generate_line(cols.headers)
21
21
  items.each do |item|
22
22
  output << CSV.generate_line(cols.values_by_item(item))
23
+ rescue => error
24
+ break if Csb.configuration.ignore_class_names.include?(error.class.name)
25
+
26
+ raise error
23
27
  end
24
28
  output
25
29
  end
@@ -9,6 +9,7 @@ module Csb
9
9
 
10
10
  def initialize
11
11
  @cols = []
12
+ yield(self) if block_given?
12
13
  end
13
14
 
14
15
  def copy!(other)
@@ -32,5 +33,6 @@ module Csb
32
33
  col.value_by_item(item)
33
34
  end
34
35
  end
36
+ alias_method :values, :values_by_item
35
37
  end
36
38
  end
@@ -1,10 +1,11 @@
1
1
  module Csb
2
2
  class Configuration
3
- attr_accessor :utf8_bom, :streaming, :after_streaming_error
3
+ attr_accessor :utf8_bom, :streaming, :after_streaming_error, :ignore_class_names
4
4
 
5
5
  def initialize
6
6
  @utf8_bom = false
7
7
  @streaming = true
8
+ @ignore_class_names = %w[Puma::ConnectionError]
8
9
  end
9
10
  end
10
11
  end
@@ -21,7 +21,9 @@ module Csb
21
21
  response.headers['Cache-Control'] = 'no-cache'
22
22
  response.headers['X-Accel-Buffering'] = 'no'
23
23
  # SEE: https://github.com/rack/rack/issues/1619
24
- response.headers['Last-Modified'] = '0'
24
+ if Gem::Version.new('2.2.0') <= Gem::Version.new(Rack::RELEASE)
25
+ response.headers['Last-Modified'] = '0'
26
+ end
25
27
  end
26
28
  csv.build
27
29
  RUBY
@@ -1,7 +1,6 @@
1
1
  module Csb
2
- class Template < Builder
3
- attr_accessor :utf8_bom, :filename, :streaming, :items
4
- attr_reader :cols
2
+ class Template
3
+ attr_accessor :utf8_bom, :filename, :streaming, :items, :cols
5
4
 
6
5
  def initialize(utf8_bom:, streaming:)
7
6
  @utf8_bom = utf8_bom
@@ -0,0 +1,11 @@
1
+ module Csb
2
+ class Cols
3
+ def col_pairs(item)
4
+ headers.zip(values(item))
5
+ end
6
+
7
+ def as_table(items)
8
+ [headers] + items.map { |item| values(item) }
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Csb
2
- VERSION = "0.2.3"
2
+ VERSION = '0.5.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.2.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - aki77
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-27 00:00:00.000000000 Z
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -58,28 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 12.3.3
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 12.3.3
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '3.0'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '3.0'
82
+ version: '0'
83
83
  description: A simple and streaming support CSV template engine for Ruby on Rails.
84
84
  email:
85
85
  - aki77@users.noreply.github.com
@@ -87,6 +87,7 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
+ - ".github/workflows/rspec.yml"
90
91
  - ".gitignore"
91
92
  - ".rspec"
92
93
  - ".travis.yml"
@@ -99,6 +100,8 @@ files:
99
100
  - bin/console
100
101
  - bin/setup
101
102
  - csb.gemspec
103
+ - gemfiles/rails52.gemfile
104
+ - gemfiles/rails60.gemfile
102
105
  - lib/csb.rb
103
106
  - lib/csb/builder.rb
104
107
  - lib/csb/col.rb
@@ -107,6 +110,7 @@ files:
107
110
  - lib/csb/handler.rb
108
111
  - lib/csb/railtie.rb
109
112
  - lib/csb/template.rb
113
+ - lib/csb/testing.rb
110
114
  - lib/csb/version.rb
111
115
  homepage: https://github.com/aki77/csb
112
116
  licenses:
@@ -127,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
131
  - !ruby/object:Gem::Version
128
132
  version: '0'
129
133
  requirements: []
130
- rubygems_version: 3.0.3
134
+ rubygems_version: 3.1.2
131
135
  signing_key:
132
136
  specification_version: 4
133
137
  summary: A simple and streaming support CSV template engine for Ruby on Rails.