rails-excel-reporter 0.1.0 → 0.3.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 +4 -4
- data/Gemfile.lock +3 -3
- data/README.md +39 -39
- data/lib/rails_excel_reporter/version.rb +1 -1
- data/rails_excel_reporter.gemspec +2 -2
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 980f4f3ce34363580563962788c6d6066d88bca4c156d11bfc6a4305a9f23e03
|
4
|
+
data.tar.gz: 218cff5d4b639629b76e48262e17ec3ffe180c773c83b3ec7cd558a822129d1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16418a929a485fd2e1215280024b0a366b6cefc65a08b9df506a5fff40cb255473ab6ae52fd28406cd19699e2ce44a0f8b1ac098e8691f201006ea7d31c5be24
|
7
|
+
data.tar.gz: 4acfa9b21a2f59426b7a19abb3471f960c4042f51eac7fb4fd4dd74356ed3f86ed28a3cbbf8dd5d9376bfe91e06b83dc161ed29feba7018cae4939a94b2581b8
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Rails Excel Reporter
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/rails-excel-reporter)
|
4
|
-
[](https://github.com/EliSebastian/rails-excel-reporter/actions)
|
5
5
|
|
6
6
|
A Ruby gem that integrates seamlessly with Ruby on Rails to generate Excel reports (.xlsx format) using a simple DSL. Features include streaming for large datasets, custom styling, callbacks, and Rails helpers.
|
7
7
|
|
@@ -45,7 +45,7 @@ Create a report in `app/reports/`:
|
|
45
45
|
```ruby
|
46
46
|
class UserReport < RailsExcelReporter::Base
|
47
47
|
attributes :id, :name, :email, :created_at
|
48
|
-
|
48
|
+
|
49
49
|
def created_at
|
50
50
|
object.created_at.strftime("%Y-%m-%d")
|
51
51
|
end
|
@@ -80,10 +80,10 @@ This creates `app/reports/user_report.rb` with the basic structure.
|
|
80
80
|
class ProductReport < RailsExcelReporter::Base
|
81
81
|
# Simple attributes
|
82
82
|
attributes :id, :name, :price
|
83
|
-
|
83
|
+
|
84
84
|
# Custom headers
|
85
85
|
attributes :id, { name: :product_name, header: "Product Name" }, :price
|
86
|
-
|
86
|
+
|
87
87
|
# Or use individual attribute method
|
88
88
|
attribute :sku, header: "SKU Code"
|
89
89
|
end
|
@@ -96,15 +96,15 @@ Override attribute methods to customize output:
|
|
96
96
|
```ruby
|
97
97
|
class OrderReport < RailsExcelReporter::Base
|
98
98
|
attributes :id, :customer_name, :total, :status
|
99
|
-
|
99
|
+
|
100
100
|
def customer_name
|
101
101
|
"#{object.customer.first_name} #{object.customer.last_name}"
|
102
102
|
end
|
103
|
-
|
103
|
+
|
104
104
|
def total
|
105
105
|
"$#{object.total.round(2)}"
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
def status
|
109
109
|
object.status.upcase
|
110
110
|
end
|
@@ -139,7 +139,7 @@ Automatically handles large datasets with streaming:
|
|
139
139
|
```ruby
|
140
140
|
class LargeDataReport < RailsExcelReporter::Base
|
141
141
|
attributes :id, :name, :data
|
142
|
-
|
142
|
+
|
143
143
|
# Customize streaming threshold (default: 1000)
|
144
144
|
self.streaming_threshold = 5000
|
145
145
|
end
|
@@ -157,7 +157,7 @@ Apply custom styles to headers and columns:
|
|
157
157
|
```ruby
|
158
158
|
class StyledReport < RailsExcelReporter::Base
|
159
159
|
attributes :id, :name, :email, :status
|
160
|
-
|
160
|
+
|
161
161
|
# Header styling
|
162
162
|
style :header, {
|
163
163
|
bg_color: "4472C4",
|
@@ -165,13 +165,13 @@ class StyledReport < RailsExcelReporter::Base
|
|
165
165
|
bold: true,
|
166
166
|
font_size: 12
|
167
167
|
}
|
168
|
-
|
168
|
+
|
169
169
|
# Column-specific styling
|
170
170
|
style :id, {
|
171
171
|
alignment: { horizontal: :center },
|
172
172
|
font_size: 10
|
173
173
|
}
|
174
|
-
|
174
|
+
|
175
175
|
style :status, {
|
176
176
|
bold: true,
|
177
177
|
bg_color: "E7E6E6"
|
@@ -186,19 +186,19 @@ Hook into the generation process:
|
|
186
186
|
```ruby
|
187
187
|
class CallbackReport < RailsExcelReporter::Base
|
188
188
|
attributes :id, :name, :email
|
189
|
-
|
189
|
+
|
190
190
|
def before_render
|
191
191
|
Rails.logger.info "Starting report generation at #{Time.current}"
|
192
192
|
end
|
193
|
-
|
193
|
+
|
194
194
|
def after_render
|
195
195
|
Rails.logger.info "Report generated successfully"
|
196
196
|
end
|
197
|
-
|
197
|
+
|
198
198
|
def before_row(object)
|
199
199
|
# Called before each row is processed
|
200
200
|
end
|
201
|
-
|
201
|
+
|
202
202
|
def after_row(object)
|
203
203
|
# Called after each row is processed
|
204
204
|
end
|
@@ -215,16 +215,16 @@ The gem provides several helper methods for controllers:
|
|
215
215
|
class ReportsController < ApplicationController
|
216
216
|
def download_users
|
217
217
|
report = UserReport.new(User.all)
|
218
|
-
|
218
|
+
|
219
219
|
# Simple download
|
220
220
|
send_excel_report(report)
|
221
|
-
|
221
|
+
|
222
222
|
# With custom filename
|
223
223
|
send_excel_report(report, filename: "users_#{Date.current}.xlsx")
|
224
|
-
|
224
|
+
|
225
225
|
# Stream large reports
|
226
226
|
stream_excel_report(report)
|
227
|
-
|
227
|
+
|
228
228
|
# Automatic streaming based on size
|
229
229
|
excel_report_response(report)
|
230
230
|
end
|
@@ -289,7 +289,7 @@ RailsExcelReporter.configure do |config|
|
|
289
289
|
border: { style: :thin, color: "CCCCCC" }
|
290
290
|
}
|
291
291
|
}
|
292
|
-
|
292
|
+
|
293
293
|
config.date_format = "%d/%m/%Y"
|
294
294
|
config.streaming_threshold = 2000
|
295
295
|
config.temp_directory = Rails.root.join("tmp", "reports")
|
@@ -344,7 +344,7 @@ The gem includes test helpers for easier testing:
|
|
344
344
|
RSpec.describe UserReport do
|
345
345
|
let(:users) { create_list(:user, 3) }
|
346
346
|
let(:report) { UserReport.new(users) }
|
347
|
-
|
347
|
+
|
348
348
|
describe "#to_xlsx" do
|
349
349
|
it "generates Excel file" do
|
350
350
|
xlsx_data = report.to_xlsx
|
@@ -352,7 +352,7 @@ RSpec.describe UserReport do
|
|
352
352
|
expect(xlsx_data[0, 4]).to eq("PK\x03\x04") # ZIP signature
|
353
353
|
end
|
354
354
|
end
|
355
|
-
|
355
|
+
|
356
356
|
describe "#filename" do
|
357
357
|
it "generates appropriate filename" do
|
358
358
|
expect(report.filename).to match(/user_report_\d{4}_\d{2}_\d{2}\.xlsx/)
|
@@ -381,11 +381,11 @@ bundle exec rspec --format documentation
|
|
381
381
|
```ruby
|
382
382
|
class ProductReport < RailsExcelReporter::Base
|
383
383
|
attributes :id, :name, :price, :category
|
384
|
-
|
384
|
+
|
385
385
|
def price
|
386
386
|
"$#{object.price.round(2)}"
|
387
387
|
end
|
388
|
-
|
388
|
+
|
389
389
|
def category
|
390
390
|
object.category.name
|
391
391
|
end
|
@@ -402,40 +402,40 @@ report.save_to("products.xlsx")
|
|
402
402
|
```ruby
|
403
403
|
class SalesReport < RailsExcelReporter::Base
|
404
404
|
attributes :date, :product, :quantity, :revenue, :profit
|
405
|
-
|
405
|
+
|
406
406
|
style :header, {
|
407
407
|
bg_color: "1F4E79",
|
408
408
|
fg_color: "FFFFFF",
|
409
409
|
bold: true,
|
410
410
|
font_size: 14
|
411
411
|
}
|
412
|
-
|
412
|
+
|
413
413
|
style :revenue, {
|
414
414
|
bg_color: "E2EFDA",
|
415
415
|
alignment: { horizontal: :right }
|
416
416
|
}
|
417
|
-
|
417
|
+
|
418
418
|
style :profit, {
|
419
419
|
bg_color: "FCE4D6",
|
420
420
|
alignment: { horizontal: :right }
|
421
421
|
}
|
422
|
-
|
422
|
+
|
423
423
|
def date
|
424
424
|
object.created_at.strftime("%Y-%m-%d")
|
425
425
|
end
|
426
|
-
|
426
|
+
|
427
427
|
def product
|
428
428
|
object.product.name
|
429
429
|
end
|
430
|
-
|
430
|
+
|
431
431
|
def revenue
|
432
432
|
"$#{object.revenue.round(2)}"
|
433
433
|
end
|
434
|
-
|
434
|
+
|
435
435
|
def profit
|
436
436
|
"$#{object.profit.round(2)}"
|
437
437
|
end
|
438
|
-
|
438
|
+
|
439
439
|
def before_render
|
440
440
|
Rails.logger.info "Generating sales report for #{collection.count} records"
|
441
441
|
end
|
@@ -447,9 +447,9 @@ end
|
|
447
447
|
```ruby
|
448
448
|
class MassiveDataReport < RailsExcelReporter::Base
|
449
449
|
attributes :id, :data, :processed_at
|
450
|
-
|
450
|
+
|
451
451
|
self.streaming_threshold = 10000
|
452
|
-
|
452
|
+
|
453
453
|
def processed_at
|
454
454
|
object.processed_at.strftime("%Y-%m-%d %H:%M:%S")
|
455
455
|
end
|
@@ -464,7 +464,7 @@ end
|
|
464
464
|
## Requirements
|
465
465
|
|
466
466
|
- Ruby 2.7+
|
467
|
-
- Rails
|
467
|
+
- Rails 7.0+
|
468
468
|
- caxlsx ~> 4.0
|
469
469
|
|
470
470
|
## Contributing
|
@@ -479,7 +479,7 @@ end
|
|
479
479
|
|
480
480
|
```bash
|
481
481
|
# Clone the repository
|
482
|
-
git clone https://github.com/
|
482
|
+
git clone https://github.com/EliSebastian/rails-excel-reporter.git
|
483
483
|
cd rails-excel-reporter
|
484
484
|
|
485
485
|
# Install dependencies
|
@@ -501,6 +501,6 @@ This gem is available as open source under the terms of the [MIT License](https:
|
|
501
501
|
|
502
502
|
## Support
|
503
503
|
|
504
|
-
- **Issues**: [GitHub Issues](https://github.com/
|
505
|
-
- **Documentation**: [GitHub Wiki](https://github.com/
|
506
|
-
- **Changelog**: [CHANGELOG.md](https://github.com/
|
504
|
+
- **Issues**: [GitHub Issues](https://github.com/EliSebastian/rails-excel-reporter/issues)
|
505
|
+
- **Documentation**: [GitHub Wiki](https://github.com/EliSebastian/rails-excel-reporter/wiki)
|
506
|
+
- **Changelog**: [CHANGELOG.md](https://github.com/EliSebastian/rails-excel-reporter/blob/main/CHANGELOG.md)
|
@@ -22,9 +22,9 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ['lib']
|
24
24
|
|
25
|
-
spec.add_dependency 'activesupport', '
|
25
|
+
spec.add_dependency 'activesupport', '>= 7.0'
|
26
26
|
spec.add_dependency 'caxlsx', '~> 4.0'
|
27
|
-
spec.add_dependency 'rails', '
|
27
|
+
spec.add_dependency 'rails', '>= 7.0'
|
28
28
|
|
29
29
|
spec.add_development_dependency 'pry', '~> 0.14'
|
30
30
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-excel-reporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elí Sebastian Herrera Aguilar
|
@@ -14,16 +14,16 @@ dependencies:
|
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '7.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '7.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: caxlsx
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '7.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '7.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|