Module: Ruby3BackwardCompatibility::ERBCompatibility
- Defined in:
- lib/ruby3_backward_compatibility/compatibility/erb.rb
Instance Method Summary collapse
- #initialize(str, safe_level = NOT_GIVEN, legacy_trim_mode = NOT_GIVEN, legacy_eoutvar = NOT_GIVEN, trim_mode: nil, eoutvar: '_erbout') ⇒ Object
-
#src ⇒ Object
Newer erb 6 releases freeze the compiled source that #src returns.
Instance Method Details
#initialize(str, safe_level = NOT_GIVEN, legacy_trim_mode = NOT_GIVEN, legacy_eoutvar = NOT_GIVEN, trim_mode: nil, eoutvar: '_erbout') ⇒ Object
5 6 7 8 9 10 11 12 13 |
# File 'lib/ruby3_backward_compatibility/compatibility/erb.rb', line 5 def initialize(str, safe_level = NOT_GIVEN, legacy_trim_mode = NOT_GIVEN, legacy_eoutvar = NOT_GIVEN, trim_mode: nil, eoutvar: '_erbout') if legacy_trim_mode != NOT_GIVEN trim_mode = legacy_trim_mode end if legacy_eoutvar != NOT_GIVEN eoutvar = legacy_eoutvar end super(str, trim_mode: trim_mode, eoutvar: eoutvar) end |
#src ⇒ Object
Newer erb 6 releases freeze the compiled source that #src returns. Every earlier erb handed back a mutable string, and callers written against those are free to modify it in place, e.g. tilt 1.x.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/ruby3_backward_compatibility/compatibility/erb.rb', line 18 def src original = super return original unless original.frozen? # A frozen ERB cannot hold the memo, and raising FrozenError here would be # a regression: erb itself is happy to return #src from a frozen template, # and Ractor.make_shareable deep-freezes, so anything sharing a compiled # template across Ractors would break. return original.dup if frozen? unless @_ruby3_backward_compatibility_src_of.equal?(original) @_ruby3_backward_compatibility_src_of = original @_ruby3_backward_compatibility_src = original.dup end @_ruby3_backward_compatibility_src end |