bidi2pdf-rails 0.0.1.pre.alpha → 0.1.1

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/bidi2pdf-rails.iml +68 -84
  3. data/.rubocop.yml +14 -0
  4. data/CHANGELOG.md +54 -0
  5. data/README.md +118 -28
  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 +137 -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 +13 -45
  15. data/lib/bidi2pdf_rails/services/html_renderer.rb +33 -0
  16. data/lib/bidi2pdf_rails/services/html_to_pdf_converter.rb +37 -0
  17. data/lib/bidi2pdf_rails/services/pdf_browser_session.rb +38 -0
  18. data/lib/bidi2pdf_rails/services/pdf_injection.rb +31 -0
  19. data/lib/bidi2pdf_rails/services/pdf_renderer.rb +94 -0
  20. data/lib/bidi2pdf_rails/services/url_to_pdf_converter.rb +91 -0
  21. data/lib/bidi2pdf_rails/version.rb +1 -1
  22. data/lib/bidi2pdf_rails.rb +41 -58
  23. data/lib/generators/bidi2pdf_rails/USAGE +12 -4
  24. data/lib/generators/bidi2pdf_rails/initializer_generator.rb +136 -30
  25. data/lib/generators/bidi2pdf_rails/templates/bidi2pdf_rails.rb.tt +25 -79
  26. data/spec/acceptance/user_can_download_report_pdf_spec.rb +133 -0
  27. data/spec/acceptance/user_can_generate_pdf_from_protected_remote_url_spec.rb +173 -0
  28. data/spec/acceptance/user_can_inject_css_before_pdf_printing_spec.rb +132 -0
  29. data/spec/acceptance/user_can_inject_js_before_pdf_printing_spec.rb +158 -0
  30. data/spec/dummy/app/assets/javascripts/simple.js +12 -0
  31. data/spec/dummy/app/assets/stylesheets/simple.css +3 -0
  32. data/spec/dummy/app/controllers/reports_controller.rb +47 -0
  33. data/spec/dummy/app/controllers/secure_controller.rb +52 -0
  34. data/spec/dummy/app/views/layouts/simple.html.erb +17 -0
  35. data/spec/dummy/app/views/reports/simple.html.erb +6 -0
  36. data/spec/dummy/app/views/secure/show.html.erb +10 -0
  37. data/spec/dummy/config/environments/production.rb +1 -1
  38. data/spec/dummy/config/initializers/bidi2pdf_rails.rb +72 -54
  39. data/spec/dummy/config/initializers/cors.rb +1 -1
  40. data/spec/dummy/config/routes.rb +14 -0
  41. data/spec/dummy/log/development.log +18331 -158
  42. data/spec/dummy/log/test.log +87874 -0
  43. data/spec/dummy/tmp/pids/server.pid +1 -1
  44. data/spec/integration/generators/bidi2pdf_rails/initializer_generator_spec.rb +64 -0
  45. data/spec/rails_helper.rb +8 -1
  46. data/spec/spec_helper.rb +47 -5
  47. data/spec/support/default_dirs_helper.rb +32 -0
  48. data/spec/support/pdf_helper.rb +12 -0
  49. data/spec/support/render_setting_helpers.rb +47 -0
  50. data/spec/support/request_server_bootstrap.rb +44 -0
  51. data/spec/{bidi2pdf_rails → unit/bidi2pdf_rails}/bidi2pdf_rails_spec.rb +1 -1
  52. data/spec/unit/bidi2pdf_rails/configurable/base_nested_config_spec.rb +133 -0
  53. data/tasks/changelog.rake +29 -0
  54. data/tasks/coverage.rake +23 -0
  55. metadata +108 -27
  56. data/lib/bidi2pdf_rails/log_subscriber.rb +0 -13
  57. data/spec/dummy/spec/helpers/reports_helper_spec.rb +0 -15
  58. data/spec/dummy/spec/requests/reports_spec.rb +0 -10
  59. data/spec/dummy/spec/views/reports/show.html.erb_spec.rb +0 -5
  60. data/spec/generator/bidie2pdf_rails_initializer_generator_spec.rb +0 -5
  61. data/spec/generator/initializer_generator_spec.rb +0 -5
  62. 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.1
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-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '0'
39
+ version: 0.1.8
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '0'
46
+ version: 0.1.8
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rubocop-rake
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -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,35 +178,56 @@ 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_injection.rb
199
+ - lib/bidi2pdf_rails/services/pdf_renderer.rb
200
+ - lib/bidi2pdf_rails/services/url_to_pdf_converter.rb
144
201
  - lib/bidi2pdf_rails/version.rb
145
202
  - lib/generators/bidi2pdf_rails/USAGE
146
203
  - lib/generators/bidi2pdf_rails/initializer_generator.rb
147
204
  - lib/generators/bidi2pdf_rails/templates/bidi2pdf_rails.rb.tt
148
- - spec/bidi2pdf_rails/bidi2pdf_rails_spec.rb
205
+ - spec/acceptance/user_can_download_report_pdf_spec.rb
206
+ - spec/acceptance/user_can_generate_pdf_from_protected_remote_url_spec.rb
207
+ - spec/acceptance/user_can_inject_css_before_pdf_printing_spec.rb
208
+ - spec/acceptance/user_can_inject_js_before_pdf_printing_spec.rb
149
209
  - spec/dummy/Rakefile
150
210
  - spec/dummy/app/assets/images/img.jpg
151
211
  - spec/dummy/app/assets/javascripts/paged.polyfill-4.3.js
212
+ - spec/dummy/app/assets/javascripts/simple.js
152
213
  - spec/dummy/app/assets/stylesheets/application.css
153
214
  - spec/dummy/app/assets/stylesheets/pdf.css
154
215
  - spec/dummy/app/assets/stylesheets/reset.css
155
216
  - spec/dummy/app/assets/stylesheets/screen.css
217
+ - spec/dummy/app/assets/stylesheets/simple.css
156
218
  - spec/dummy/app/controllers/application_controller.rb
157
219
  - spec/dummy/app/controllers/reports_controller.rb
220
+ - spec/dummy/app/controllers/secure_controller.rb
158
221
  - spec/dummy/app/helpers/application_helper.rb
159
222
  - spec/dummy/app/helpers/reports_helper.rb
160
223
  - spec/dummy/app/views/layouts/application.html.erb
161
224
  - spec/dummy/app/views/layouts/pdf.html.erb
225
+ - spec/dummy/app/views/layouts/simple.html.erb
162
226
  - spec/dummy/app/views/pwa/manifest.json.erb
163
227
  - spec/dummy/app/views/pwa/service-worker.js
164
228
  - spec/dummy/app/views/reports/show.html.erb
229
+ - spec/dummy/app/views/reports/simple.html.erb
230
+ - spec/dummy/app/views/secure/show.html.erb
165
231
  - spec/dummy/bin/rails
166
232
  - spec/dummy/bin/rake
167
233
  - spec/dummy/bin/setup
@@ -182,34 +248,38 @@ files:
182
248
  - spec/dummy/config/puma.rb
183
249
  - spec/dummy/config/routes.rb
184
250
  - spec/dummy/log/development.log
251
+ - spec/dummy/log/test.log
185
252
  - spec/dummy/public/404.html
186
253
  - spec/dummy/public/406-unsupported-browser.html
187
254
  - spec/dummy/public/422.html
188
255
  - spec/dummy/public/500.html
189
256
  - spec/dummy/public/icon.png
190
257
  - 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
258
  - spec/dummy/storage/test.sqlite3
195
259
  - spec/dummy/tmp/README.md
196
260
  - spec/dummy/tmp/local_secret.txt
197
261
  - spec/dummy/tmp/pids/server.pid
198
262
  - spec/dummy/tmp/restart.txt
199
- - spec/generator/bidie2pdf_rails_initializer_generator_spec.rb
200
- - spec/generator/initializer_generator_spec.rb
263
+ - spec/integration/generators/bidi2pdf_rails/initializer_generator_spec.rb
201
264
  - spec/rails_helper.rb
202
- - spec/requests/reports_spec.rb
203
265
  - spec/spec_helper.rb
266
+ - spec/support/default_dirs_helper.rb
267
+ - spec/support/pdf_helper.rb
268
+ - spec/support/render_setting_helpers.rb
269
+ - spec/support/request_server_bootstrap.rb
270
+ - spec/unit/bidi2pdf_rails/bidi2pdf_rails_spec.rb
271
+ - spec/unit/bidi2pdf_rails/configurable/base_nested_config_spec.rb
204
272
  - tasks/bidi2pdf_rails_tasks.rake
205
- homepage: https://github.com/dieter-medium/bidi2pdf
273
+ - tasks/changelog.rake
274
+ - tasks/coverage.rake
275
+ homepage: https://github.com/dieter-medium/bidi2pdf-rails
206
276
  licenses:
207
277
  - MIT
208
278
  metadata:
209
279
  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
280
+ homepage_uri: https://github.com/dieter-medium/bidi2pdf-rails
281
+ source_code_uri: https://github.com/dieter-medium/bidi2pdf-rails
282
+ changelog_uri: https://github.com/dieter-medium/bidi2pdf-rails/blob/master/CHANGELOG.md
213
283
  rubygems_mfa_required: 'true'
214
284
  post_install_message:
215
285
  rdoc_options: []
@@ -229,25 +299,34 @@ requirements: []
229
299
  rubygems_version: 3.5.11
230
300
  signing_key:
231
301
  specification_version: 4
232
- summary: A Ruby gem that generates PDF
302
+ summary: Rails integration for PDF generation using Chrome/Chromium headless browser
233
303
  test_files:
234
- - spec/bidi2pdf_rails/bidi2pdf_rails_spec.rb
304
+ - spec/acceptance/user_can_download_report_pdf_spec.rb
305
+ - spec/acceptance/user_can_generate_pdf_from_protected_remote_url_spec.rb
306
+ - spec/acceptance/user_can_inject_css_before_pdf_printing_spec.rb
307
+ - spec/acceptance/user_can_inject_js_before_pdf_printing_spec.rb
235
308
  - spec/dummy/Rakefile
236
309
  - spec/dummy/app/assets/images/img.jpg
237
310
  - spec/dummy/app/assets/javascripts/paged.polyfill-4.3.js
311
+ - spec/dummy/app/assets/javascripts/simple.js
238
312
  - spec/dummy/app/assets/stylesheets/application.css
239
313
  - spec/dummy/app/assets/stylesheets/pdf.css
240
314
  - spec/dummy/app/assets/stylesheets/reset.css
241
315
  - spec/dummy/app/assets/stylesheets/screen.css
316
+ - spec/dummy/app/assets/stylesheets/simple.css
242
317
  - spec/dummy/app/controllers/application_controller.rb
243
318
  - spec/dummy/app/controllers/reports_controller.rb
319
+ - spec/dummy/app/controllers/secure_controller.rb
244
320
  - spec/dummy/app/helpers/application_helper.rb
245
321
  - spec/dummy/app/helpers/reports_helper.rb
246
322
  - spec/dummy/app/views/layouts/application.html.erb
247
323
  - spec/dummy/app/views/layouts/pdf.html.erb
324
+ - spec/dummy/app/views/layouts/simple.html.erb
248
325
  - spec/dummy/app/views/pwa/manifest.json.erb
249
326
  - spec/dummy/app/views/pwa/service-worker.js
250
327
  - spec/dummy/app/views/reports/show.html.erb
328
+ - spec/dummy/app/views/reports/simple.html.erb
329
+ - spec/dummy/app/views/secure/show.html.erb
251
330
  - spec/dummy/bin/rails
252
331
  - spec/dummy/bin/rake
253
332
  - spec/dummy/bin/setup
@@ -268,22 +347,24 @@ test_files:
268
347
  - spec/dummy/config/routes.rb
269
348
  - spec/dummy/config.ru
270
349
  - spec/dummy/log/development.log
350
+ - spec/dummy/log/test.log
271
351
  - spec/dummy/public/404.html
272
352
  - spec/dummy/public/406-unsupported-browser.html
273
353
  - spec/dummy/public/422.html
274
354
  - spec/dummy/public/500.html
275
355
  - spec/dummy/public/icon.png
276
356
  - 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
357
  - spec/dummy/storage/test.sqlite3
281
358
  - spec/dummy/tmp/README.md
282
359
  - spec/dummy/tmp/local_secret.txt
283
360
  - spec/dummy/tmp/pids/server.pid
284
361
  - spec/dummy/tmp/restart.txt
285
- - spec/generator/bidie2pdf_rails_initializer_generator_spec.rb
286
- - spec/generator/initializer_generator_spec.rb
362
+ - spec/integration/generators/bidi2pdf_rails/initializer_generator_spec.rb
287
363
  - spec/rails_helper.rb
288
- - spec/requests/reports_spec.rb
289
364
  - spec/spec_helper.rb
365
+ - spec/support/default_dirs_helper.rb
366
+ - spec/support/pdf_helper.rb
367
+ - spec/support/render_setting_helpers.rb
368
+ - spec/support/request_server_bootstrap.rb
369
+ - spec/unit/bidi2pdf_rails/bidi2pdf_rails_spec.rb
370
+ - 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