diff options
author | makoto kuwata <kwa@kuwata-lab.com> | 2008-05-03 13:22:03 +0000 |
---|---|---|
committer | makoto kuwata <kwa@kuwata-lab.com> | 2008-05-03 13:22:03 +0000 |
commit | e194cb070291d94612edf393c8f968c2e33ddeee (patch) | |
tree | 085aeb3d092c7fab25a315ecf42171f917d7f536 | |
parent | 5c0477bfd60ae2035ccd73c79831f35afcb0a8f8 (diff) | |
download | erubis-e194cb070291d94612edf393c8f968c2e33ddeee.tar.gz |
- [enhance] rails_helper.rb: improved Rails 2.0.2 support
-rw-r--r-- | CHANGES.txt | 59 | ||||
-rw-r--r-- | ChangeLog.txt | 3 | ||||
-rw-r--r-- | lib/erubis/helpers/rails_form_helper.rb | 21 | ||||
-rw-r--r-- | lib/erubis/helpers/rails_helper.rb | 141 |
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 = { '&'=>'&', '<'=>'<', '>'=>'>', '"'=>'"', "'"=>''', } 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}" |