roadie 5.0.1 → 5.1.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: 7ac28a4d983148b5e8c799804e754b81d9d7a04b4ef97f97bcc6592d37a74bed
4
- data.tar.gz: 9dbeb2fb1d41e301bf7d7c4049e476da22604bfc70047f6dc843ab6c1a489048
3
+ metadata.gz: 39c01590157057fcedad04740a1594a45f18150d74c7e8fe071dd3aea6908e1f
4
+ data.tar.gz: 490cc578b42057ca635ce613d8e50b05401b0a07597761f70423467aa99aa673
5
5
  SHA512:
6
- metadata.gz: 5146cfb6152aad59b410670b792788bc84af5a9064c353628fae6cc1a1b2a2854703872990c47788c9369fef4469ee15b0040f192aeda1e32dcd8eef934e6327
7
- data.tar.gz: 80418199d7ea29608e7997ee4ccfb591dbe8bd1eb3c609b59e8fc857b0d056103fcc9e74fafab6cd32f041ea8051870c41a5e6807b24d4c233e46803ab498750
6
+ metadata.gz: d71f85f1aba91c711351972b65074835f690f62d0cd4a0feb663f67df89a86d8acddc855fe7be4e23601fe3b0508c1558f6c18cc260c69c1ad5b1b1857ad04e2
7
+ data.tar.gz: 1d708c10a62800d44efbe825601546a8713b953f81a2549d91a23e74e26048839adc418d38c38bbd08bd885bc6504a3a07c5cca46f94d3ad147d347f3086ffaa
@@ -41,3 +41,6 @@ jobs:
41
41
  env:
42
42
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
43
43
  uses: amoeba/standardrb-action@v2
44
+ permissions:
45
+ checks: write
46
+ contents: read
data/Changelog.md CHANGED
@@ -1,8 +1,13 @@
1
1
  ### dev
2
2
 
3
- [full changelog](https://github.com/Mange/roadie/compare/v5.0.1...master)
3
+ [full changelog](https://github.com/Mange/roadie/compare/v5.1.0...master)
4
4
 
5
- Nothing yet.
5
+ ### 5.1.0
6
+
7
+ [full changelog](https://github.com/Mange/roadie/compare/v5.0.1...v5.1.0)
8
+
9
+ * Support passing serialization options to Nokogiri with `serialization_options=` method -
10
+ [Dmytro Savochkin](https://github.com/dmytro-savochkin). (#171)
6
11
 
7
12
  ### 5.0.1
8
13
 
data/README.md CHANGED
@@ -94,6 +94,8 @@ Your document instance can be configured with several options:
94
94
  * `external_asset_providers` - A list of asset providers that are invoked when absolute CSS URLs are referenced. See below.
95
95
  * `before_transformation` - A callback run before transformation starts.
96
96
  * `after_transformation` - A callback run after transformation is completed.
97
+ * `serialization_options` - An integer bitmap of options passed along to Nokogiri during serialization.
98
+ By default it's `Nokogiri::XML::Node::SaveOptions::NO_DECLARATION | Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS`.
97
99
 
98
100
  ### Making URLs absolute ###
99
101
 
@@ -42,6 +42,10 @@ module Roadie
42
42
  # which would change the styling on the page
43
43
  attr_accessor :merge_media_queries
44
44
 
45
+ # Integer representing a bitmap set of options used by Nokogiri during serialization.
46
+ # For the complete set of available options look into +Nokogiri::XML::Node::SaveOptions+.
47
+ attr_reader :serialization_options
48
+
45
49
  # The mode to generate markup in. Valid values are `:html` (default) and `:xhtml`.
46
50
  attr_reader :mode
47
51
 
@@ -49,6 +53,9 @@ module Roadie
49
53
  def initialize(html)
50
54
  @keep_uninlinable_css = true
51
55
  @merge_media_queries = true
56
+ @serialization_options =
57
+ Nokogiri::XML::Node::SaveOptions::NO_DECLARATION |
58
+ Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS
52
59
  @html = html
53
60
  @asset_providers = ProviderList.wrap(FilesystemProvider.new)
54
61
  @external_asset_providers = ProviderList.empty
@@ -137,6 +144,13 @@ module Roadie
137
144
  @external_asset_providers = ProviderList.wrap(list)
138
145
  end
139
146
 
147
+ # Integer representing a bitmap set of options used by Nokogiri during serialization.
148
+ # For the complete set of available options look into +Nokogiri::XML::Node::SaveOptions+.
149
+ # (To change the mode in which the document is generated use {#mode=} however.)
150
+ def serialization_options=(options)
151
+ @serialization_options = options || 0
152
+ end
153
+
140
154
  # Change the mode. The mode affects how the resulting markup is generated.
141
155
  #
142
156
  # Valid modes:
@@ -187,13 +201,7 @@ module Roadie
187
201
  xml: save_options::AS_XML
188
202
  }.fetch(mode)
189
203
 
190
- dom.dup.to_html(
191
- save_with: (
192
- save_options::NO_DECLARATION |
193
- save_options::NO_EMPTY_TAGS |
194
- format
195
- )
196
- )
204
+ dom.dup.to_html(save_with: (serialization_options | format))
197
205
  end
198
206
 
199
207
  def make_url_rewriter
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Roadie
4
- VERSION = "5.0.1"
4
+ VERSION = "5.1.0"
5
5
  end
@@ -398,6 +398,38 @@ describe "Roadie functionality" do
398
398
  expect(actual_result).to eq(expected_result)
399
399
  end
400
400
 
401
+ it "adds XML declaration into XHTML with no serialization options prohibiting it" do
402
+ document = Roadie::Document.new <<-HTML
403
+ <html>
404
+ <head>
405
+ <title>Greetings</title>
406
+ </head>
407
+ </html>
408
+ HTML
409
+
410
+ document.mode = :xhtml
411
+ document.serialization_options = 0
412
+ result = document.transform
413
+
414
+ expect(result).to match(/\A<\?xml[^>]*?>/i)
415
+ end
416
+
417
+ it "does not add XML declaration into XHTML with serialization options prohibiting it" do
418
+ document = Roadie::Document.new <<-HTML
419
+ <html>
420
+ <head>
421
+ <title>Greetings</title>
422
+ </head>
423
+ </html>
424
+ HTML
425
+
426
+ document.mode = :xhtml
427
+ document.serialization_options = Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
428
+ result = document.transform
429
+
430
+ expect(result).not_to match(/\A<\?xml[^>]*?>/i)
431
+ end
432
+
401
433
  describe "if merge_media_queries is set to false" do
402
434
  it "doesn't group non-inlineable media queries in the head" do
403
435
  document = Roadie::Document.new <<-HTML
@@ -17,6 +17,16 @@ module Roadie
17
17
  expect(document.url_options).to eq({host: "foo.bar"})
18
18
  end
19
19
 
20
+ it "has an accessor for serialization options" do
21
+ serialization_options = Nokogiri::XML::Node::SaveOptions::FORMAT |
22
+ Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS
23
+ document.serialization_options = serialization_options
24
+ expect(document.serialization_options).to eq(serialization_options)
25
+
26
+ document.serialization_options = nil
27
+ expect(document.serialization_options).to eq(0)
28
+ end
29
+
20
30
  it "has a setting for keeping uninlinable styles" do
21
31
  expect(document.keep_uninlinable_css).to be true
22
32
  document.keep_uninlinable_css = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roadie
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Magnus Bergmark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-11 00:00:00.000000000 Z
11
+ date: 2022-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -197,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
197
  - !ruby/object:Gem::Version
198
198
  version: '0'
199
199
  requirements: []
200
- rubygems_version: 3.0.9
200
+ rubygems_version: 3.3.7
201
201
  signing_key:
202
202
  specification_version: 4
203
203
  summary: Making HTML emails comfortable for the Ruby rockstars