Maintenance Ruby 3.4 gets fixes, but no new features. Switch to Ruby 4.0 →
instance method
ERB#def_method
(::Module, ::String, ?::String) -> untyped
def_method(mod, methodname, fname='(ERB)')
lib/erb.rb
View on GitHub ↗
# File tmp/rubies/ruby-3.4.1/lib/erb.rb, line 464
def def_method(mod, methodname, fname='(ERB)')
src = self.src.sub(/^(?!#|$)/) {"def #{methodname}\n"} << "\nend\n"
mod.module_eval do
eval(src, binding, fname, -1)
end
end
Define methodname as instance method of mod from compiled Ruby source.
example:
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)