Skip to content

Commit 3f5a426

Browse files
authored
ERB#def_class, def_module, def_method のサンプルを実行可能に
#2196 を解決します。 この issue は ERB#def_class についてのものですが,def_module, def_method も合わせて修正しました。 修正のポイントは * コピペで実行可能にする * 外部ファイルを使わない * filename を触らない * クラス名は rdoc 版を参考にする といったところです。
1 parent dbf027c commit 3f5a426

1 file changed

Lines changed: 43 additions & 23 deletions

File tree

manual/api/erb.md

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -316,11 +316,23 @@ fname はスクリプトを定義する際のファイル名です。主にエ
316316

317317
例:
318318

319-
`````
320-
require 'erb'
321-
erb = ERB.new(script)
322-
erb.def_method(MyClass, 'foo(bar)', 'foo.erb')
323-
`````
319+
```rb title="例"
320+
require "erb"
321+
322+
class MyClass
323+
end
324+
325+
erb = ERB.new(<<~ERB)
326+
arg1: <%= arg1 %>
327+
arg2: <%= arg2 %>
328+
ERB
329+
330+
erb.def_method(MyClass, "m(arg1, arg2)")
331+
332+
print MyClass.new.m("foo", 123)
333+
# => arg1: foo
334+
# arg2: 123
335+
```
324336

325337
### def def_module(methodname='erb') -> Module
326338

@@ -329,17 +341,22 @@ erb.def_method(MyClass, 'foo(bar)', 'foo.erb')
329341
- **param** `methodname` -- メソッド名
330342

331343
```ruby title="例"
332-
require 'erb'
333-
filename = 'example.rhtml'
334-
erb = ERB.new("test1<%= arg1 %>\ntest2<%= arg2 %>\n")
335-
erb.filename = filename
336-
MyModule = erb.def_module('render(arg1, arg2)')
344+
require "erb"
345+
346+
erb = ERB.new(<<~ERB)
347+
arg1: <%= arg1 %>
348+
arg2: <%= arg2 %>
349+
ERB
350+
351+
MyModule = erb.def_module("render(arg1, arg2)")
352+
337353
class MyClass
338354
include MyModule
339355
end
340-
print MyClass.new.render('foo', 123)
341-
# test1foo
342-
# test2123
356+
357+
print MyClass.new.render("foo", 123)
358+
# => arg1: foo
359+
# arg2: 123
343360
```
344361

345362
### def def_class(superklass=Object, methodname='erb') -> Class
@@ -353,22 +370,25 @@ print MyClass.new.render('foo', 123)
353370
- **param** `methodname` -- メソッド名
354371

355372
```ruby title="例"
356-
require 'erb'
373+
require "erb"
357374

358-
class MyClass_
375+
class MyBaseClass
359376
def initialize(arg1, arg2)
360-
@arg1 = arg1; @arg2 = arg2
377+
@arg1 = arg1
378+
@arg2 = arg2
361379
end
362380
end
363-
filename = 'example.rhtml' # @arg1 と @arg2 が使われている example.rhtml
364381

365-
erb = ERB.new(File.read(filename))
366-
erb.filename = filename
367-
MyClass = erb.def_class(MyClass_, 'render()')
368-
print MyClass.new('foo', 123).render()
382+
erb = ERB.new(<<~ERB)
383+
arg1: <%= @arg1 %>
384+
arg2: <%= @arg2 %>
385+
ERB
386+
387+
MySubClass = erb.def_class(MyBaseClass, :render)
369388

370-
# => test1foo
371-
# test2123
389+
print MySubClass.new("foo", 123).render()
390+
# => arg1: foo
391+
# arg2: 123
372392
```
373393

374394
### def set_eoutvar(compiler, eoutvar = '_erbout') -> Array

0 commit comments

Comments
 (0)