Method: EZML::Util#unescape_interpolation

Defined in:
lib/ezml/util.rb

#unescape_interpolation(str, escape_html = nil) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/ezml/util.rb', line 105

def unescape_interpolation(str, escape_html = nil)
  res = ''.dup
  rest = Haml::Util.handle_interpolation str.dump do |scan|
    escapes = (scan[2].size - 1) / 2
    char = scan[3] # '{', '@' or '$'
    res << scan.matched[0...-3 - escapes]
    if escapes % 2 == 1
      res << "\##{char}"
    else
      interpolated = if char == '{'
        balance(scan, ?{, ?}, 1)[0][0...-1]
      else
        scan.scan(/\w+/)
      end
      content = eval("\"#{interpolated}\"")
      content.prepend(char) if char == '@' || char == '$'
      content = "Haml::Helpers.html_escape((#{content}))" if escape_html

      res << "\#{#{content}}"
    end
  end
  res + rest
end