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/