haml 6.0.12 → 6.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: 4dfc2f798a71c0128dbbbd06c47d480b24350032d376f6a36ffc555482e4e749
4
- data.tar.gz: 421b21fd205b9ebe320da800acc44df8fb30b446629a29bbd2c46a3c3d0b0387
3
+ metadata.gz: 85f9ebef95ef0ad6c4eece471031137c6ed9fe0eea2d487c66c2aa7416ed6a1f
4
+ data.tar.gz: bfda96ada6de5a9cecb466ddc1cc9246406df4395e6f06e362980e89dfb4b929
5
5
  SHA512:
6
- metadata.gz: 5c158b9e6862a0a83443a375baf329c84a5eae3928709cfa685fe68a80ed3a6e47279ec9a3be015881de78ca1b85c51d2f47a65b99b58b317da2a6e04d2e5c70
7
- data.tar.gz: 2ab0dcc943438c1534132896b754dd671876fef85bf3980a6165181f520f74fe1382365c0b061e49018f2e86c696cf002f597b208de293e50ea292741f1cbbf9
6
+ metadata.gz: 8b2809a903761ad6e2049b77fbe0d7fa56100c3e0b0e0b0a4aa8d56d5970d52cb3b1b1e31c04ba9f75bd55b7140bc6945042e85ac7f328bc197be510b8703233
7
+ data.tar.gz: 13e703e2c67ea7ab3e8846b85b1fa656230b7d2015e8c9f3c08ea83a4e5771c20ced4e8d9ae317c0e3e381a60992ef38cfdc63d3fc1e14caa0d0d0206cc92562
@@ -14,6 +14,7 @@ jobs:
14
14
  test:
15
15
  runs-on: ubuntu-latest
16
16
  strategy:
17
+ fail-fast: false
17
18
  matrix:
18
19
  ruby:
19
20
  - '2.5'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Haml Changelog
2
2
 
3
+ ## 6.1.0
4
+
5
+ * Optimize away a `to_s` call on `=` scripts
6
+ * Fix escaping for objects that return an `html_safe` string on `to_s` [#1117](https://github.com/haml/haml/issues/1117)
7
+
3
8
  ## 6.0.12
4
9
 
5
10
  * Fix a whitespace removal with `>` and an `if`-`else` statement [#1114](https://github.com/haml/haml/issues/1114)
@@ -98,10 +98,8 @@ module Haml
98
98
  def compile_script_result(result, node)
99
99
  if !node.value[:escape_html] && node.value[:preserve]
100
100
  result = find_and_preserve(result)
101
- else
102
- result = "(#{result}).to_s"
103
101
  end
104
- [:escape, node.value[:escape_html], [:dynamic, result]]
102
+ [:escapeany, node.value[:escape_html], [:dynamic, result]]
105
103
  end
106
104
 
107
105
  def find_and_preserve(code)
data/lib/haml/engine.rb CHANGED
@@ -4,8 +4,9 @@ require 'haml/parser'
4
4
  require 'haml/compiler'
5
5
  require 'haml/html'
6
6
  require 'haml/string_splitter'
7
- require 'haml/escapable'
8
- require 'haml/force_escapable'
7
+ require 'haml/escape'
8
+ require 'haml/escape_any'
9
+ require 'haml/force_escape'
9
10
  require 'haml/dynamic_merger'
10
11
  require 'haml/ambles'
11
12
  require 'haml/whitespace'
@@ -32,8 +33,9 @@ module Haml
32
33
  use HTML
33
34
  use StringSplitter
34
35
  filter :StaticAnalyzer
35
- use Escapable
36
- use ForceEscapable
36
+ use Escape
37
+ use EscapeAny
38
+ use ForceEscape
37
39
  filter :ControlFlow
38
40
  use Ambles
39
41
  filter :MultiFlattener
@@ -2,7 +2,7 @@
2
2
  require 'haml/util'
3
3
 
4
4
  module Haml
5
- class Escapable < Temple::Filters::Escapable
5
+ class Escape < Temple::Filters::Escapable
6
6
  def initialize(opts = {})
7
7
  super
8
8
  @escape_code = options[:escape_code] ||
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ require 'haml/escape'
3
+
4
+ module Haml
5
+ # This module allows Temple::Filter to dispatch :fescape on `#compile`.
6
+ module EscapeanyDispathcer
7
+ def on_escapeany(flag, exp)
8
+ [:escapeany, flag, compile(exp)]
9
+ end
10
+ end
11
+ ::Temple::Filter.include EscapeanyDispathcer
12
+
13
+ # Unlike Haml::Escape, this calls to_s when not escaped.
14
+ class EscapeAny < Escape
15
+ alias_method :on_escapeany, :on_escape
16
+
17
+ def on_dynamic(value)
18
+ [:dynamic, @escape ? @escape_code % value : "(#{value}).to_s"]
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'haml/escapable'
2
+ require 'haml/escape'
3
3
 
4
4
  module Haml
5
5
  # This module allows Temple::Filter to dispatch :fescape on `#compile`.
@@ -10,8 +10,8 @@ module Haml
10
10
  end
11
11
  ::Temple::Filter.include FescapeDispathcer
12
12
 
13
- # Unlike Haml::Escapable, this escapes value even if it's html_safe.
14
- class ForceEscapable < Escapable
13
+ # Unlike Haml::Escape, this escapes value even if it's html_safe.
14
+ class ForceEscape < Escape
15
15
  def initialize(opts = {})
16
16
  super
17
17
  @escape_code = options[:escape_code] || "::Haml::Util.escape_html((%s))"
@@ -20,8 +20,8 @@ module Haml
20
20
 
21
21
  alias_method :on_fescape, :on_escape
22
22
 
23
- # ForceEscapable doesn't touch :escape expression.
24
- # This method is not used if it's inserted after Haml::Escapable.
23
+ # ForceEscape doesn't touch :escape expression.
24
+ # This method is not used if it's inserted after Haml::Escape.
25
25
  def on_escape(flag, exp)
26
26
  [:escape, flag, compile(exp)]
27
27
  end
@@ -52,4 +52,6 @@ end
52
52
 
53
53
  # Haml extends Haml::Helpers in ActionView each time.
54
54
  # It costs much, so Haml includes a compatible module at first.
55
- ActionView::Base.send :include, Haml::RailsHelpers
55
+ ActiveSupport.on_load(:action_view) do
56
+ include Haml::RailsHelpers
57
+ end
data/lib/haml/util.rb CHANGED
@@ -27,6 +27,7 @@ module Haml
27
27
 
28
28
  # TODO: Remove unescape_interpolation's workaround and get rid of `respond_to?`.
29
29
  def self.escape_html_safe(html)
30
+ html = html.to_s
30
31
  (html.respond_to?(:html_safe?) && html.html_safe?) ? html : escape_html(html)
31
32
  end
32
33
 
data/lib/haml/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Haml
3
- VERSION = '6.0.12'
3
+ VERSION = '6.1.0'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.12
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Natalie Weizenbaum
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: exe
14
14
  cert_chain: []
15
- date: 2022-11-27 00:00:00.000000000 Z
15
+ date: 2022-12-10 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: temple
@@ -301,7 +301,8 @@ files:
301
301
  - lib/haml/dynamic_merger.rb
302
302
  - lib/haml/engine.rb
303
303
  - lib/haml/error.rb
304
- - lib/haml/escapable.rb
304
+ - lib/haml/escape.rb
305
+ - lib/haml/escape_any.rb
305
306
  - lib/haml/filters.rb
306
307
  - lib/haml/filters/base.rb
307
308
  - lib/haml/filters/cdata.rb
@@ -319,7 +320,7 @@ files:
319
320
  - lib/haml/filters/scss.rb
320
321
  - lib/haml/filters/text_base.rb
321
322
  - lib/haml/filters/tilt_base.rb
322
- - lib/haml/force_escapable.rb
323
+ - lib/haml/force_escape.rb
323
324
  - lib/haml/helpers.rb
324
325
  - lib/haml/html.rb
325
326
  - lib/haml/identity.rb