lib/erubi.rb in erubi-1.5.0 vs lib/erubi.rb in erubi-1.6.0

- old
+ new

@@ -1,30 +1,43 @@ # frozen_string_literal: true module Erubi - ESCAPE_TABLE = {'&' => '&amp;'.freeze, '<' => '&lt;'.freeze, '>' => '&gt;'.freeze, '"' => '&quot;'.freeze, "'" => '&#039;'.freeze}.freeze + VERSION = '1.6.0' RANGE_ALL = 0..-1 if RUBY_VERSION >= '1.9' RANGE_FIRST = 0 RANGE_LAST = -1 TEXT_END = RUBY_VERSION >= '2.1' ? "'.freeze;" : "';" - - # Escape the following characters with their HTML/XML - # equivalents. - def self.h(value) - value.to_s.gsub(/[&<>"']/, ESCAPE_TABLE) - end else # :nocov: RANGE_FIRST = 0..0 RANGE_LAST = -1..-1 TEXT_END = "';" + end + begin + require 'cgi/escape' + unless CGI.respond_to?(:escapeHTML) # work around for JRuby 9.1 + CGI = Object.new + CGI.extend(::CGI::Util) + end def self.h(value) - value.to_s.gsub(/[&<>"']/){|s| ESCAPE_TABLE[s]} + CGI.escapeHTML(value.to_s) end - # :nocov: + rescue LoadError + ESCAPE_TABLE = {'&' => '&amp;'.freeze, '<' => '&lt;'.freeze, '>' => '&gt;'.freeze, '"' => '&quot;'.freeze, "'" => '&#39;'.freeze}.freeze + if RUBY_VERSION >= '1.9' + # Escape the following characters with their HTML/XML + # equivalents. + def self.h(value) + value.to_s.gsub(/[&<>"']/, ESCAPE_TABLE) + end + else + def self.h(value) + value.to_s.gsub(/[&<>"']/){|s| ESCAPE_TABLE[s]} + end + end end class Engine # The frozen ruby source code generated from the template, which can be evaled. attr_reader :src