From 574896a0ce99ab00676aa5ff2fabd3dcf8d49154 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Fri, 25 Nov 2022 21:32:20 -0800 Subject: [PATCH] [ruby/erb] Define ERB::Escape module (https://github.com/ruby/erb/pull/38) Close #32 --- ext/erb/escape/escape.c | 6 +++--- lib/erb/util.rb | 22 +++++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/ext/erb/escape/escape.c b/ext/erb/escape/escape.c index 862c7e7a39a2f0..67b2d1ef34d2d7 100644 --- a/ext/erb/escape/escape.c +++ b/ext/erb/escape/escape.c @@ -1,7 +1,7 @@ #include "ruby.h" #include "ruby/encoding.h" -static VALUE rb_cERB, rb_mUtil, rb_cCGI; +static VALUE rb_cERB, rb_mEscape, rb_cCGI; static ID id_escapeHTML; #define HTML_ESCAPE_MAX_LEN 6 @@ -87,8 +87,8 @@ void Init_escape(void) { rb_cERB = rb_define_class("ERB", rb_cObject); - rb_mUtil = rb_define_module_under(rb_cERB, "Util"); - rb_define_module_function(rb_mUtil, "html_escape", erb_escape_html, 1); + rb_mEscape = rb_define_module_under(rb_cERB, "Escape"); + rb_define_module_function(rb_mEscape, "html_escape", erb_escape_html, 1); rb_cCGI = rb_define_class("CGI", rb_cObject); id_escapeHTML = rb_intern("escapeHTML"); diff --git a/lib/erb/util.rb b/lib/erb/util.rb index 97f5abbba0f583..c24a175199f390 100644 --- a/lib/erb/util.rb +++ b/lib/erb/util.rb @@ -1,8 +1,20 @@ +#-- +# ERB::Escape +# +# A subset of ERB::Util. Unlike ERB::Util#html_escape, we expect/hope +# Rails will not monkey-patch ERB::Escape#html_escape. begin - # ERB::Util.html_escape require 'erb/escape' rescue LoadError # JRuby can't load .so end +unless defined?(ERB::Escape) # JRuby + module ERB::Escape + def html_escape(s) + CGI.escapeHTML(s.to_s) + end + module_function :html_escape + end +end #-- # ERB::Util @@ -21,12 +33,8 @@ module ERB::Util # # is a > 0 & a < 10? # - unless defined?(ERB::Util.html_escape) # for JRuby - def html_escape(s) - CGI.escapeHTML(s.to_s) - end - module_function :html_escape - end + include ERB::Escape # html_escape + module_function :html_escape alias h html_escape module_function :h