bidi2pdf-rails 0.0.1.pre.alpha → 0.1.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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/bidi2pdf-rails.iml +55 -9
  3. data/.rubocop.yml +14 -0
  4. data/CHANGELOG.md +33 -0
  5. data/README.md +117 -27
  6. data/Rakefile +2 -0
  7. data/cliff.toml +126 -0
  8. data/lib/bidi2pdf_rails/browser_console_log_subscriber.rb +24 -0
  9. data/lib/bidi2pdf_rails/chromedriver_manager_singleton.rb +11 -11
  10. data/lib/bidi2pdf_rails/config.rb +133 -0
  11. data/lib/bidi2pdf_rails/configurable.rb +106 -0
  12. data/lib/bidi2pdf_rails/main_log_subscriber.rb +33 -0
  13. data/lib/bidi2pdf_rails/network_log_subscriber.rb +20 -0
  14. data/lib/bidi2pdf_rails/railtie.rb +12 -45
  15. data/lib/bidi2pdf_rails/services/html_renderer.rb +33 -0
  16. data/lib/bidi2pdf_rails/services/html_to_pdf_converter.rb +28 -0
  17. data/lib/bidi2pdf_rails/services/pdf_browser_session.rb +39 -0
  18. data/lib/bidi2pdf_rails/services/pdf_renderer.rb +82 -0
  19. data/lib/bidi2pdf_rails/services/url_to_pdf_converter.rb +82 -0
  20. data/lib/bidi2pdf_rails/version.rb +1 -1
  21. data/lib/bidi2pdf_rails.rb +41 -58
  22. data/lib/generators/bidi2pdf_rails/USAGE +12 -4
  23. data/lib/generators/bidi2pdf_rails/initializer_generator.rb +136 -30
  24. data/lib/generators/bidi2pdf_rails/templates/bidi2pdf_rails.rb.tt +25 -79
  25. data/spec/acceptance/user_can_download_report_pdf_spec.rb +133 -0
  26. data/spec/acceptance/user_can_generate_pdf_from_protected_remote_url_spec.rb +173 -0
  27. data/spec/dummy/app/controllers/reports_controller.rb +37 -0
  28. data/spec/dummy/app/controllers/secure_controller.rb +52 -0
  29. data/spec/dummy/app/views/layouts/simple.html.erb +17 -0
  30. data/spec/dummy/app/views/secure/show.html.erb +10 -0
  31. data/spec/dummy/config/environments/production.rb +1 -1
  32. data/spec/dummy/config/initializers/bidi2pdf_rails.rb +68 -54
  33. data/spec/dummy/config/initializers/cors.rb +1 -1
  34. data/spec/dummy/config/routes.rb +10 -0
  35. data/spec/dummy/log/development.log +16567 -156
  36. data/spec/dummy/log/test.log +53046 -0
  37. data/spec/dummy/tmp/pids/server.pid +1 -1
  38. data/spec/integration/generators/bidi2pdf_rails/initializer_generator_spec.rb +64 -0
  39. data/spec/rails_helper.rb +8 -1
  40. data/spec/spec_helper.rb +47 -5
  41. data/spec/support/default_dirs_helper.rb +32 -0
  42. data/spec/support/pdf_helper.rb +12 -0
  43. data/spec/support/render_setting_helpers.rb +28 -0
  44. data/spec/support/request_server_bootstrap.rb +44 -0
  45. data/spec/{bidi2pdf_rails → unit/bidi2pdf_rails}/bidi2pdf_rails_spec.rb +1 -1
  46. data/spec/unit/bidi2pdf_rails/configurable/base_nested_config_spec.rb +133 -0
  47. data/tasks/changelog.rake +29 -0
  48. data/tasks/coverage.rake +23 -0
  49. metadata +95 -25
  50. data/lib/bidi2pdf_rails/log_subscriber.rb +0 -13
  51. data/spec/dummy/spec/helpers/reports_helper_spec.rb +0 -15
  52. data/spec/dummy/spec/requests/reports_spec.rb +0 -10
  53. data/spec/dummy/spec/views/reports/show.html.erb_spec.rb +0 -5
  54. data/spec/generator/bidie2pdf_rails_initializer_generator_spec.rb +0 -5
  55. data/spec/generator/initializer_generator_spec.rb +0 -5
  56. data/spec/requests/reports_spec.rb +0 -17
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bidi2pdf-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre.alpha
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dieter S.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-16 00:00:00.000000000 Z
11
+ date: 2025-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -114,9 +114,54 @@ dependencies:
114
114
  - - ">="
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
- description: 'Bidi2pdf Rails is a powerful PDF generation tool.
118
-
119
- '
117
+ - !ruby/object:Gem::Dependency
118
+ name: websocket-native
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: pdf-reader
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '2.14'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '2.14'
145
+ - !ruby/object:Gem::Dependency
146
+ name: unicode_utils
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '1.4'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '1.4'
159
+ description: "Bidi2pdf Rails provides a seamless integration between Rails and the
160
+ Bidi2pdf gem for \ngenerating high-quality PDFs using Chrome/Chromium's headless
161
+ browser. It supports \nrendering PDFs from controller actions, remote URLs, or HTML
162
+ strings with configurable \noptions for orientation, margins, page size, and more.
163
+ The gem handles browser lifecycle \nmanagement and provides a clean API for PDF
164
+ generation with proper asset handling.\n"
120
165
  email:
121
166
  - 101627195+dieter-medium@users.noreply.github.com
122
167
  executables: []
@@ -133,19 +178,31 @@ files:
133
178
  - ".rubocop.yml"
134
179
  - ".ruby-gemset"
135
180
  - ".ruby-version"
181
+ - CHANGELOG.md
136
182
  - MIT-LICENSE
137
183
  - README.md
138
184
  - Rakefile
185
+ - cliff.toml
139
186
  - lib/bidi2pdf-rails.rb
140
187
  - lib/bidi2pdf_rails.rb
188
+ - lib/bidi2pdf_rails/browser_console_log_subscriber.rb
141
189
  - lib/bidi2pdf_rails/chromedriver_manager_singleton.rb
142
- - lib/bidi2pdf_rails/log_subscriber.rb
190
+ - lib/bidi2pdf_rails/config.rb
191
+ - lib/bidi2pdf_rails/configurable.rb
192
+ - lib/bidi2pdf_rails/main_log_subscriber.rb
193
+ - lib/bidi2pdf_rails/network_log_subscriber.rb
143
194
  - lib/bidi2pdf_rails/railtie.rb
195
+ - lib/bidi2pdf_rails/services/html_renderer.rb
196
+ - lib/bidi2pdf_rails/services/html_to_pdf_converter.rb
197
+ - lib/bidi2pdf_rails/services/pdf_browser_session.rb
198
+ - lib/bidi2pdf_rails/services/pdf_renderer.rb
199
+ - lib/bidi2pdf_rails/services/url_to_pdf_converter.rb
144
200
  - lib/bidi2pdf_rails/version.rb
145
201
  - lib/generators/bidi2pdf_rails/USAGE
146
202
  - lib/generators/bidi2pdf_rails/initializer_generator.rb
147
203
  - lib/generators/bidi2pdf_rails/templates/bidi2pdf_rails.rb.tt
148
- - spec/bidi2pdf_rails/bidi2pdf_rails_spec.rb
204
+ - spec/acceptance/user_can_download_report_pdf_spec.rb
205
+ - spec/acceptance/user_can_generate_pdf_from_protected_remote_url_spec.rb
149
206
  - spec/dummy/Rakefile
150
207
  - spec/dummy/app/assets/images/img.jpg
151
208
  - spec/dummy/app/assets/javascripts/paged.polyfill-4.3.js
@@ -155,13 +212,16 @@ files:
155
212
  - spec/dummy/app/assets/stylesheets/screen.css
156
213
  - spec/dummy/app/controllers/application_controller.rb
157
214
  - spec/dummy/app/controllers/reports_controller.rb
215
+ - spec/dummy/app/controllers/secure_controller.rb
158
216
  - spec/dummy/app/helpers/application_helper.rb
159
217
  - spec/dummy/app/helpers/reports_helper.rb
160
218
  - spec/dummy/app/views/layouts/application.html.erb
161
219
  - spec/dummy/app/views/layouts/pdf.html.erb
220
+ - spec/dummy/app/views/layouts/simple.html.erb
162
221
  - spec/dummy/app/views/pwa/manifest.json.erb
163
222
  - spec/dummy/app/views/pwa/service-worker.js
164
223
  - spec/dummy/app/views/reports/show.html.erb
224
+ - spec/dummy/app/views/secure/show.html.erb
165
225
  - spec/dummy/bin/rails
166
226
  - spec/dummy/bin/rake
167
227
  - spec/dummy/bin/setup
@@ -182,34 +242,38 @@ files:
182
242
  - spec/dummy/config/puma.rb
183
243
  - spec/dummy/config/routes.rb
184
244
  - spec/dummy/log/development.log
245
+ - spec/dummy/log/test.log
185
246
  - spec/dummy/public/404.html
186
247
  - spec/dummy/public/406-unsupported-browser.html
187
248
  - spec/dummy/public/422.html
188
249
  - spec/dummy/public/500.html
189
250
  - spec/dummy/public/icon.png
190
251
  - spec/dummy/public/icon.svg
191
- - spec/dummy/spec/helpers/reports_helper_spec.rb
192
- - spec/dummy/spec/requests/reports_spec.rb
193
- - spec/dummy/spec/views/reports/show.html.erb_spec.rb
194
252
  - spec/dummy/storage/test.sqlite3
195
253
  - spec/dummy/tmp/README.md
196
254
  - spec/dummy/tmp/local_secret.txt
197
255
  - spec/dummy/tmp/pids/server.pid
198
256
  - spec/dummy/tmp/restart.txt
199
- - spec/generator/bidie2pdf_rails_initializer_generator_spec.rb
200
- - spec/generator/initializer_generator_spec.rb
257
+ - spec/integration/generators/bidi2pdf_rails/initializer_generator_spec.rb
201
258
  - spec/rails_helper.rb
202
- - spec/requests/reports_spec.rb
203
259
  - spec/spec_helper.rb
260
+ - spec/support/default_dirs_helper.rb
261
+ - spec/support/pdf_helper.rb
262
+ - spec/support/render_setting_helpers.rb
263
+ - spec/support/request_server_bootstrap.rb
264
+ - spec/unit/bidi2pdf_rails/bidi2pdf_rails_spec.rb
265
+ - spec/unit/bidi2pdf_rails/configurable/base_nested_config_spec.rb
204
266
  - tasks/bidi2pdf_rails_tasks.rake
205
- homepage: https://github.com/dieter-medium/bidi2pdf
267
+ - tasks/changelog.rake
268
+ - tasks/coverage.rake
269
+ homepage: https://github.com/dieter-medium/bidi2pdf-rails
206
270
  licenses:
207
271
  - MIT
208
272
  metadata:
209
273
  allowed_push_host: https://rubygems.org
210
- homepage_uri: https://github.com/dieter-medium/bidi2pdf
211
- source_code_uri: https://github.com/dieter-medium/bidi2pdf
212
- changelog_uri: https://github.com/dieter-medium/bidi2pdf/blob/master/CHANGELOG.md
274
+ homepage_uri: https://github.com/dieter-medium/bidi2pdf-rails
275
+ source_code_uri: https://github.com/dieter-medium/bidi2pdf-rails
276
+ changelog_uri: https://github.com/dieter-medium/bidi2pdf-rails/blob/master/CHANGELOG.md
213
277
  rubygems_mfa_required: 'true'
214
278
  post_install_message:
215
279
  rdoc_options: []
@@ -229,9 +293,10 @@ requirements: []
229
293
  rubygems_version: 3.5.11
230
294
  signing_key:
231
295
  specification_version: 4
232
- summary: A Ruby gem that generates PDF
296
+ summary: Rails integration for PDF generation using Chrome/Chromium headless browser
233
297
  test_files:
234
- - spec/bidi2pdf_rails/bidi2pdf_rails_spec.rb
298
+ - spec/acceptance/user_can_download_report_pdf_spec.rb
299
+ - spec/acceptance/user_can_generate_pdf_from_protected_remote_url_spec.rb
235
300
  - spec/dummy/Rakefile
236
301
  - spec/dummy/app/assets/images/img.jpg
237
302
  - spec/dummy/app/assets/javascripts/paged.polyfill-4.3.js
@@ -241,13 +306,16 @@ test_files:
241
306
  - spec/dummy/app/assets/stylesheets/screen.css
242
307
  - spec/dummy/app/controllers/application_controller.rb
243
308
  - spec/dummy/app/controllers/reports_controller.rb
309
+ - spec/dummy/app/controllers/secure_controller.rb
244
310
  - spec/dummy/app/helpers/application_helper.rb
245
311
  - spec/dummy/app/helpers/reports_helper.rb
246
312
  - spec/dummy/app/views/layouts/application.html.erb
247
313
  - spec/dummy/app/views/layouts/pdf.html.erb
314
+ - spec/dummy/app/views/layouts/simple.html.erb
248
315
  - spec/dummy/app/views/pwa/manifest.json.erb
249
316
  - spec/dummy/app/views/pwa/service-worker.js
250
317
  - spec/dummy/app/views/reports/show.html.erb
318
+ - spec/dummy/app/views/secure/show.html.erb
251
319
  - spec/dummy/bin/rails
252
320
  - spec/dummy/bin/rake
253
321
  - spec/dummy/bin/setup
@@ -268,22 +336,24 @@ test_files:
268
336
  - spec/dummy/config/routes.rb
269
337
  - spec/dummy/config.ru
270
338
  - spec/dummy/log/development.log
339
+ - spec/dummy/log/test.log
271
340
  - spec/dummy/public/404.html
272
341
  - spec/dummy/public/406-unsupported-browser.html
273
342
  - spec/dummy/public/422.html
274
343
  - spec/dummy/public/500.html
275
344
  - spec/dummy/public/icon.png
276
345
  - spec/dummy/public/icon.svg
277
- - spec/dummy/spec/helpers/reports_helper_spec.rb
278
- - spec/dummy/spec/requests/reports_spec.rb
279
- - spec/dummy/spec/views/reports/show.html.erb_spec.rb
280
346
  - spec/dummy/storage/test.sqlite3
281
347
  - spec/dummy/tmp/README.md
282
348
  - spec/dummy/tmp/local_secret.txt
283
349
  - spec/dummy/tmp/pids/server.pid
284
350
  - spec/dummy/tmp/restart.txt
285
- - spec/generator/bidie2pdf_rails_initializer_generator_spec.rb
286
- - spec/generator/initializer_generator_spec.rb
351
+ - spec/integration/generators/bidi2pdf_rails/initializer_generator_spec.rb
287
352
  - spec/rails_helper.rb
288
- - spec/requests/reports_spec.rb
289
353
  - spec/spec_helper.rb
354
+ - spec/support/default_dirs_helper.rb
355
+ - spec/support/pdf_helper.rb
356
+ - spec/support/render_setting_helpers.rb
357
+ - spec/support/request_server_bootstrap.rb
358
+ - spec/unit/bidi2pdf_rails/bidi2pdf_rails_spec.rb
359
+ - spec/unit/bidi2pdf_rails/configurable/base_nested_config_spec.rb
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bidi2pdfRails
4
- class LogSubscriber < ActiveSupport::LogSubscriber
5
- include Bidi2pdf::Notifications::LoggingSubscriberActions
6
-
7
- def logger
8
- Bidi2pdf::VerboseLogger.new(super.tagged("bidi2pdf_rails"), Bidi2pdfRails.verbosity)
9
- end
10
- end
11
- end
12
-
13
- Bidi2pdfRails::LogSubscriber.attach_to "bidi2pdf", inherit_all: true
@@ -1,15 +0,0 @@
1
- require 'rails_helper'
2
-
3
- # Specs in this file have access to a helper object that includes
4
- # the ReportsHelper. For example:
5
- #
6
- # describe ReportsHelper do
7
- # describe "string concat" do
8
- # it "concats two strings with spaces" do
9
- # expect(helper.concat_strings("this","that")).to eq("this that")
10
- # end
11
- # end
12
- # end
13
- RSpec.describe ReportsHelper, type: :helper do
14
- pending "add some examples to (or delete) #{__FILE__}"
15
- end
@@ -1,10 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe "Reports", type: :request do
4
- describe "GET /show" do
5
- it "returns http success" do
6
- get "/reports/show"
7
- expect(response).to have_http_status(:success)
8
- end
9
- end
10
- end
@@ -1,5 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe "reports/show.html.erb", type: :view do
4
- pending "add some examples to (or delete) #{__FILE__}"
5
- end
@@ -1,5 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe "InitializerGenerator", type: :generator do
4
- pending "add some scenarios (or delete) #{__FILE__}"
5
- end
@@ -1,5 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe "InitializerGenerator", type: :generator do
4
- pending "add some scenarios (or delete) #{__FILE__}"
5
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../rails_helper'
4
-
5
- RSpec.describe "Reports", type: :request do
6
- describe "GET /reports/:id.pdf" do
7
- it "responds with PDF content" do
8
- get "/reports/1.pdf"
9
-
10
- expect(response).to have_http_status(:ok)
11
- # expect(response.content_type).to eq("application/pdf")
12
-
13
- # Optional: make sure it returns *some* PDF-ish data
14
- # expect(response.body[0..3]).to eq("%PDF") # all PDFs start with %PDF
15
- end
16
- end
17
- end