1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Do not hard code encoding to UTF8

This commit is contained in:
José Valim 2011-12-20 11:06:37 +01:00
parent fde9af0678
commit 19292a70fb
2 changed files with 54 additions and 48 deletions

View file

@ -173,49 +173,18 @@ module ActionView
@inspect ||= defined?(Rails.root) ? identifier.sub("#{Rails.root}/", '') : identifier
end
protected
# Compile a template. This method ensures a template is compiled
# just once and removes the source after it is compiled.
def compile!(view) #:nodoc:
return if @compiled
if view.is_a?(ActionView::CompiledTemplates)
mod = ActionView::CompiledTemplates
else
mod = view.singleton_class
end
compile(view, mod)
# Just discard the source if we have a virtual path. This
# means we can get the template back.
@source = nil if @virtual_path
@compiled = true
end
# Among other things, this method is responsible for properly setting
# the encoding of the source. Until this point, we assume that the
# source is BINARY data. If no additional information is supplied,
# we assume the encoding is the same as <tt>Encoding.default_external</tt>.
# This method is responsible for properly setting he encoding of the
# source. Until this point, we assume that the source is BINARY data.
# If no additional information is supplied, we assume the encoding is
# the same as <tt>Encoding.default_external</tt>.
#
# The user can also specify the encoding via a comment on the first
# line of the template (# encoding: NAME-OF-ENCODING). This will work
# with any template engine, as we process out the encoding comment
# before passing the source on to the template engine, leaving a
# blank line in its stead.
#
# If the template engine handles encodings, we send the encoded
# String to the engine without further processing. This allows
# the template engine to support additional mechanisms for
# specifying the encoding. For instance, ERB supports <%# encoding: %>
#
# Otherwise, after we figure out the correct encoding, we then
# encode the source into <tt>Encoding.default_internal</tt>.
# In general, this means that templates will be UTF-8 inside of Rails,
# regardless of the original source encoding.
def compile(view, mod) #:nodoc:
method_name = self.method_name
def encode!
return unless source.encoding == Encoding::BINARY
if source.encoding_aware?
# Look for # encoding: *. If we find one, we'll encode the
@ -248,7 +217,44 @@ module ActionView
raise WrongEncodingError.new(source, encoding)
end
end
end
protected
# Compile a template. This method ensures a template is compiled
# just once and removes the source after it is compiled.
def compile!(view) #:nodoc:
return if @compiled
if view.is_a?(ActionView::CompiledTemplates)
mod = ActionView::CompiledTemplates
else
mod = view.singleton_class
end
compile(view, mod)
# Just discard the source if we have a virtual path. This
# means we can get the template back.
@source = nil if @virtual_path
@compiled = true
end
# Among other things, this method is responsible for properly setting
# the encoding of the compiled template.
#
# If the template engine handles encodings, we send the encoded
# String to the engine without further processing. This allows
# the template engine to support additional mechanisms for
# specifying the encoding. For instance, ERB supports <%# encoding: %>
#
# Otherwise, after we figure out the correct encoding, we then
# encode the source into <tt>Encoding.default_internal</tt>.
# In general, this means that templates will be UTF-8 inside of Rails,
# regardless of the original source encoding.
def compile(view, mod) #:nodoc:
encode!
method_name = self.method_name
code = @handler.call(self)
# Make sure that the resulting String to be evalled is in the
@ -297,7 +303,11 @@ module ActionView
raise e
else
assigns = view.respond_to?(:assigns) ? view.assigns : {}
template = @virtual_path ? refresh(view) : self
template = self
unless template.source
template = refresh(view)
template.encode!
end
raise Template::Error.new(template, assigns, e)
end
end

View file

@ -89,14 +89,10 @@ module ActionView
line_counter = start_on_line
return unless source_code = source_code[start_on_line..end_on_line]
extract = source_code.sum do |line|
source_code.sum do |line|
line_counter += 1
"#{indent}#{line_counter}: #{line}\n"
end
extract.force_encoding("UTF-8") if extract.respond_to?(:encode!)
extract
end
def sub_template_of(template_path)