ruby-changes:4208
From: ko1@a...
Date: Thu, 6 Mar 2008 00:36:55 +0900 (JST)
Subject: [ruby-changes:4208] seki - Ruby:r15698 (ruby_1_8): lib/erb.rb: update RDoc. Thanks Makoto Kuwata
seki 2008-03-06 00:36:44 +0900 (Thu, 06 Mar 2008) New Revision: 15698 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/lib/erb.rb Log: lib/erb.rb: update RDoc. Thanks Makoto Kuwata [ruby-dev:33702] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=15698&r2=15697&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/erb.rb?r1=15698&r2=15697&diff_format=u Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 15697) +++ ruby_1_8/ChangeLog (revision 15698) @@ -1,3 +1,7 @@ +Thu Mar 6 00:34:11 2008 Masatoshi SEKI <m_seki@m...> + + * lib/erb.rb: update RDoc. Thanks Makoto Kuwata [ruby-dev:33702] + Mon Mar 3 23:28:34 2008 GOTOU Yuuzou <gotoyuzo@n...> * lib/webrick/httpservlet/filehandler.rb: should normalize path Index: ruby_1_8/lib/erb.rb =================================================================== --- ruby_1_8/lib/erb.rb (revision 15697) +++ ruby_1_8/lib/erb.rb (revision 15698) @@ -744,19 +744,49 @@ end end - def def_method(mod, methodname, fname='(ERB)') # :nodoc: + # Define _methodname_ as instance method of _mod_ from compiled ruby source. + # + # example: + # filename = 'example.rhtml' # 'arg1' and 'arg2' are used in example.rhtml + # erb = ERB.new(File.read(filename)) + # erb.def_method(MyClass, 'render(arg1, arg2)', filename) + # print MyClass.new.render('foo', 123) + def def_method(mod, methodname, fname='(ERB)') mod.module_eval("def #{methodname}\n" + self.src + "\nend\n", fname, 0) end - def def_module(methodname='erb') # :nodoc: + # Create unnamed module, define _methodname_ as instance method of it, and return it. + # + # example: + # filename = 'example.rhtml' # 'arg1' and 'arg2' are used in example.rhtml + # erb = ERB.new(File.read(filename)) + # erb.filename = filename + # MyModule = erb.def_module('render(arg1, arg2)') + # class MyClass + # include MyModule + # end + def def_module(methodname='erb') mod = Module.new - def_method(mod, methodname) + def_method(mod, methodname, @filename || '(ERB)') mod end - def def_class(superklass=Object, methodname='result') # :nodoc: + # Define unnamed class which has _methodname_ as instance method, and return it. + # + # example: + # class MyClass_ + # def initialize(arg1, arg2) + # @arg1 = arg1; @arg2 = arg2 + # end + # end + # filename = 'example.rhtml' # @arg1 and @arg2 are used in example.rhtml + # erb = ERB.new(File.read(filename)) + # erb.filename = filename + # MyClass = erb.def_class(MyClass_, 'render()') + # print MyClass.new('foo', 123).render() + def def_class(superklass=Object, methodname='result') cls = Class.new(superklass) - def_method(cls, methodname) + def_method(cls, methodname, @filename || '(ERB)') cls end end @@ -810,15 +840,45 @@ #-- # ERB::DefMethod class ERB - module DefMethod # :nodoc: + # Utility module to define eRuby script as instance method. + # + # === Example + # + # example.rhtml: + # <% for item in @items %> + # <b><%= item %></b> + # <% end %> + # + # example.rb: + # require 'erb' + # class MyClass + # extend ERB::DefMethod + # def_erb_method('render()', 'example.rhtml') + # def initialize(items) + # @items = items + # end + # end + # print MyClass.new([10,20,30]).render() + # + # result: + # + # <b>10</b> + # + # <b>20</b> + # + # <b>30</b> + # + module DefMethod public - def def_erb_method(methodname, erb) - if erb.kind_of? String - fname = erb - File.open(fname) {|f| erb = ERB.new(f.read) } - erb.def_method(self, methodname, fname) + # define _methodname_ as instance method of current module, using ERB object or eRuby file + def def_erb_method(methodname, erb_or_fname) + if erb_or_fname.kind_of? String + fname = erb_or_fname + erb = ERB.new(File.read(fname)) + erb.def_method(self, methodname, fname) else - erb.def_method(self, methodname) + erb = erb_or_fname + erb.def_method(self, methodname, erb.filename || '(ERB)') end end module_function :def_erb_method -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/