summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormakoto kuwata <kwa@kuwata-lab.com>2008-05-03 13:22:03 +0000
committermakoto kuwata <kwa@kuwata-lab.com>2008-05-03 13:22:03 +0000
commite194cb070291d94612edf393c8f968c2e33ddeee (patch)
tree085aeb3d092c7fab25a315ecf42171f917d7f536
parent5c0477bfd60ae2035ccd73c79831f35afcb0a8f8 (diff)
downloaderubis-e194cb070291d94612edf393c8f968c2e33ddeee.tar.gz
- [enhance] rails_helper.rb: improved Rails 2.0.2 support
-rw-r--r--CHANGES.txt59
-rw-r--r--ChangeLog.txt3
-rw-r--r--lib/erubis/helpers/rails_form_helper.rb21
-rw-r--r--lib/erubis/helpers/rails_helper.rb141
4 files changed, 147 insertions, 77 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 5468714..59aa481 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -3,6 +3,65 @@
# $Copyright$
+- release: 2.6.0
+ date:
+ enhancements:
+
+ - |
+ '<%% %>' and '<%%= %>' are converted into '<% %>' and '<%= %>' respectively.
+ This is for compatibility with ERB.
+
+ ex1.rhtml
+ <ul>
+ <%% for item in @list %>
+ <li><%%= item %></li>
+ <%% end %>
+ </ul>
+
+ result:
+ $ erubis ex1.rhtml
+ <ul>
+ <% for item in @list %>
+ <li><%= item %></li>
+ <% end %>
+ </ul>
+
+ - |
+ '<%= -%>' removes tailing spaces and newlines.
+ This is for compatibiliy with ERB (and trim mode '-').
+ '<%= =%>' also removes tailing spaces and newlines, and this is
+ Erubis-original enhancement (it is cooler than '<%= -%>', isn't it?).
+
+ ex2.rhtml
+ <div>
+ <%= @var -%> # or <%= @var =%>
+ </div>
+
+ result (version 2.6.0):
+ $ erubis -c '{var: "AAA\n"}' ex2.rhtml
+ <div>
+ AAA
+ </div>
+
+ result (version 2.5.0):
+ $ erubis -c '{var: "AAA\n"}' ex2.rhtml
+ <div>
+ AAA
+
+ </div>
+
+ - |
+ Erubis::Eruby.load_file() now allows you to change cache filename.
+
+ eruby = Erubis::Eruby.load_file("ex3.rhtml",
+ :cachename=>'ex3.rhtml.cache')
+
+
+ - |
+ Support of Ruby on Rails 2.0.2 improved.
+
+
+
- release: 2.5.0
date: 2008-01-30
enhancements:
diff --git a/ChangeLog.txt b/ChangeLog.txt
index cdae9e3..902c701 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -2,6 +2,9 @@
.?lastupdate: $Date$
.?version: $Rev$
+: Rev.105 (2008-05-03)
+ .- [enhance] rails_helper.rb: improved Rails 2.0.2 support
+
: Rev.104 (2008-04-29)
.- [enhance] Conerter#convert_input(): convert '<%% %>' into '<% %>'
.- [enhance] test-erubis.rb: add 'doublepercent1' test
diff --git a/lib/erubis/helpers/rails_form_helper.rb b/lib/erubis/helpers/rails_form_helper.rb
index bc1520e..211f441 100644
--- a/lib/erubis/helpers/rails_form_helper.rb
+++ b/lib/erubis/helpers/rails_form_helper.rb
@@ -15,24 +15,29 @@ end
module Erubis::Helpers::RailsFormHelper
+if ActionPack::VERSION::MAJOR == 1 ### Rails 1.X
+ def pp_template_filename(basename)
+ return "#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.html.erb"
+ end
+else ### Rails 2.X
def pp_template_filename(basename)
return "#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.rhtml"
end
+end
def pp_render_partial(basename)
basename = "_#{basename}" unless basename[0] == ?_
filename = pp_template_filename(basename)
- klass = Erubis::Helpers::RailsHelper::PreprocessingEruby
- eruby = klass.new(File.read(filename))
- return eruby.evaluate(self)
+ preprocessor = Erubis::::PreprocessingEruby.new(File.read(filename), :escape=>true)
+ return preprocessor.evaluate(self)
end
- def pp_error_on(object_name, method, &block)
+ def pp_error_on(object_name, method)
s = ''
- s << "<% _stag, _etag = _pp_error_tags(@#{object_name}.errors.on('#{method}'))%>"
- s << "<%=_stag%>"
+ s << "<% _stag, _etag = _pp_error_tags(@#{object_name}.errors.on('#{method}')) %>"
+ s << "<%= _stag %>"
s << yield(object_name, method)
- s << "<%=_etag%>"
+ s << "<%= _etag %>"
return s
end
@@ -52,7 +57,7 @@ module Erubis::Helpers::RailsFormHelper
unless options.key?(:value) || options.key?('value')
options['value'] = _?("h @#{object_name}.#{method}")
end
- $stderr.puts "*** debug: pp_tag_helper(): options=#{options.inspect}"
+ #$stderr.puts "*** debug: pp_tag_helper(): options=#{options.inspect}"
return pp_error_on(object_name, method) {
s = __send__(helper, object_name, method, options)
_pp_remove_error_div(s)
diff --git a/lib/erubis/helpers/rails_helper.rb b/lib/erubis/helpers/rails_helper.rb
index 9deb4bf..9c81437 100644
--- a/lib/erubis/helpers/rails_helper.rb
+++ b/lib/erubis/helpers/rails_helper.rb
@@ -43,35 +43,29 @@ module Erubis
module RailsHelper
#cattr_accessor :init_properties
- @@engine_class = Erubis::Eruby
- #@@engine_class = Erubis::FastEruby
-
+ @@engine_class = ::Erubis::Eruby
+ #@@engine_class = ::Erubis::FastEruby
def self.engine_class
@@engine_class
end
-
def self.engine_class=(klass)
@@engine_class = klass
end
#cattr_accessor :init_properties
@@init_properties = {}
-
def self.init_properties
@@init_properties
end
-
def self.init_properties=(hash)
@@init_properties = hash
end
#cattr_accessor :show_src
@@show_src = nil
-
def self.show_src
@@show_src
end
-
def self.show_src=(flag)
@@show_src = flag
end
@@ -85,6 +79,27 @@ module Erubis
@@preprocessing = flag
end
+ ## covert eRuby string into ruby code
+ def self._convert_template(template) # :nodoc:
+ #src = ::Erubis::Eruby.new(template).src
+ klass = ::Erubis::Helpers::RailsHelper.engine_class
+ properties = ::Erubis::Helpers::RailsHelper.init_properties
+ show_src = ::Erubis::Helpers::RailsHelper.show_src
+ show_src = ENV['RAILS_ENV'] == 'development' if show_src.nil?
+ ## preprocessing
+ if ::Erubis::Helpers::RailsHelper.preprocessing
+ preprocessor = ::Erubis::PreprocessingEruby.new(template, :escape=>true)
+ #template = self.instance_eval(preprocessor.src)
+ template = preprocessor.evaluate(self)
+ logger.debug "** Erubis: preprocessed==<<'END'\n#{template}END\n" if show_src
+ end
+ ## convert into ruby code
+ src = klass.new(template, properties).src
+ #src.insert(0, '_erbout = ')
+ logger.debug "** Erubis: src==<<'END'\n#{src}END\n" if show_src
+ src
+ end
+
end
end
@@ -92,27 +107,38 @@ module Erubis
end
-method_name = 'convert_template_into_ruby_code'
-unless ActionView::Base.private_instance_methods.include?(method_name) ||
- ActionView::Base.instance_methods.include?(method_name)
+class ActionView::Base # :nodoc:
+ private
+ # convert template into ruby code
+ def convert_template_into_ruby_code(template)
+ #ERB.new(template, nil, @@erb_trim_mode).src
+ return ::Erubis::Helpers::RailsHelper._convert_template(template)
+ end
+end
- require 'action_pack/version'
- module ActionView # :nodoc:
+require 'action_pack/version'
- class Base # :nodoc:
- private
+if ActionPack::VERSION::MAJOR >= 2 ### Rails 2.X
- # convert template into ruby code
- def convert_template_into_ruby_code(template)
- ERB.new(template, nil, @@erb_trim_mode).src
- end
+ if ActionPack::VERSION::MINOR > 0 || ActionPack::VERSION::TINY >= 2 ### Rails 2.0.2 or higher
-if ActionPack::VERSION::MAJOR >= 2 ### Rails 2.X
+ class ActionView::TemplateHandlers::Erubis
+ def compile(template)
+ return ::Erubis::Helpers::RailsHelper._convert_template(template)
+ end
+ end
+ class ActionView::Base # :nodoc:
+ register_default_template_handler :erb, TemplateHandlers::Erubis
+ register_template_handler :rhtml, TemplateHandlers::Erubis
+ end
+ else ### Rails 2.0.0 or 2.0.1
+ class ActionView::Base # :nodoc:
+ private
# Method to create the source code for a given template.
def create_template_source(extension, template, render_symbol, locals)
if template_requires_setup?(extension)
@@ -131,23 +157,30 @@ if ActionPack::VERSION::MAJOR >= 2 ### Rails 2.X
#body = ERB.new(template, nil, @@erb_trim_mode).src
body = convert_template_into_ruby_code(template)
end
-
+ #
@@template_args[render_symbol] ||= {}
locals_keys = @@template_args[render_symbol].keys | locals
@@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
-
+ #
locals_code = ""
locals_keys.each do |key|
locals_code << "#{key} = local_assigns[:#{key}]\n"
end
-
+ #
"def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
end
+ end
+ end #if
-elsif ActionPack::VERSION::MINOR > 12 ### Rails 1.2
+else ### Rails 1.X
+
+ if ActionPack::VERSION::MINOR > 12 ### Rails 1.2
+
+ class ActionView::Base # :nodoc:
+ private
# Create source code for given template
def create_template_source(extension, template, render_symbol, locals)
if template_requires_setup?(extension)
@@ -164,23 +197,24 @@ elsif ActionPack::VERSION::MINOR > 12 ### Rails 1.2
#body = ERB.new(template, nil, @@erb_trim_mode).src
body = convert_template_into_ruby_code(template)
end
-
+ #
@@template_args[render_symbol] ||= {}
locals_keys = @@template_args[render_symbol].keys | locals
@@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
-
+ #
locals_code = ""
locals_keys.each do |key|
locals_code << "#{key} = local_assigns[:#{key}]\n"
end
-
+ #
"def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
end
+ end
+ else ### Rails 1.1
-elsif ActionPack::VERSION::MINOR <= 12 ### Rails 1.1
-
-
+ class ActionView::Base # :nodoc:
+ private
# Create source code for given template
def create_template_source(extension, template, render_symbol, locals)
if template_requires_setup?(extension)
@@ -197,61 +231,30 @@ elsif ActionPack::VERSION::MINOR <= 12 ### Rails 1.1
#body = ERB.new(template, nil, @@erb_trim_mode).src
body = convert_template_into_ruby_code(template)
end
-
+ #
@@template_args[render_symbol] ||= {}
locals_keys = @@template_args[render_symbol].keys | locals
@@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
-
+ #
locals_code = ""
locals_keys.each do |key|
locals_code << "#{key} = local_assigns[:#{key}] if local_assigns.has_key?(:#{key})\n"
end
-
+ #
"def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
end
-
-
-end ###
-
-
end
- end
-
-end
-
+ end #if
-## set Erubis as eRuby compiler in Ruby on Rails instead of ERB
-class ActionView::Base # :nodoc:
- include Erubis::PreprocessingHelper
- private
- def convert_template_into_ruby_code(template)
- #src = Erubis::Eruby.new(template).src
- klass = Erubis::Helpers::RailsHelper.engine_class
- properties = Erubis::Helpers::RailsHelper.init_properties
- show_src = Erubis::Helpers::RailsHelper.show_src
- show_src = ENV['RAILS_ENV'] == 'development' if show_src.nil?
- ##----- preprocessing -------------------
- if Erubis::Helpers::RailsHelper.preprocessing
- preprocessor = Erubis::Helpers::RailsHelper::PreprocessingEruby.new(template, :escape=>true)
- #template = self.instance_eval(preprocessor.src)
- template = preprocessor.evaluate(self)
- logger.debug "** Erubis: preprocessed==<<'END'\n#{template}END\n" if show_src
- end
- ##----------------------------------------
- src = klass.new(template, properties).src
- #src.insert(0, '_erbout = ')
- logger.debug "** Erubis: src==<<'END'\n#{src}END\n" if show_src
- src
- end
-end
+end ###
## make h() method faster
module ERB::Util # :nodoc:
ESCAPE_TABLE = { '&'=>'&amp;', '<'=>'&lt;', '>'=>'&gt;', '"'=>'&quot;', "'"=>'&#039;', }
def h(value)
- value.to_s.gsub(/[&<>"]/) { |s| ESCAPE_TABLE[s] }
+ value.to_s.gsub(/[&<>"]/) {|s| ESCAPE_TABLE[s] }
end
module_function :h
end
@@ -259,5 +262,5 @@ end
## finish
ac = ActionController::Base.new
-ac.logger.info "** Erubis #{Erubis::VERSION}"
-#$stdout.puts "** Erubis #{Erubis::VERSION}"
+ac.logger.info "** Erubis #{::Erubis::VERSION}"
+#$stdout.puts "** Erubis #{::Erubis::VERSION}"