Selective runtime provision of instance methods

J

Julian I. Kamil

I'd like to get some comments and suggestions from anyone who may have
an opinion on this or know of a better way to accomplish this.

I have an object with a lot of methods and variables some of which (but
not all) I'd like to make callable from another object that happens to
be evaluated by ERB. So I did this:

<code>
class LotsOfMethods
# to be made callable
def method1 ... end
def method2 ... end
...

# not callable
def methodX ... end

def delegate
d = OpenStruct.new({
:var1 => var1,
:var2 => var2,
...
})

my = self
d_singleton = class << d; self end
d_singleton.send:)define_method, :method1) { my.method1 }
d_singleton.send:)define_method, :method2) { my.method2 }
...

d
end
end

class Sandbox
def self.env(delegate)
Proc.new {}
end
end

sacred_object = LotsOfMethods.new
output = ERB.new(text).result(Sandbox.env(sacred_object.delegate))
</code>

The idea is that the embedded Ruby code in "text" will be able to
access the specified variables and methods in 'delegate' but not any
others. So, for example:

text = '<%= delegate.method1 %>'

will be allowed; but:

text = '<%= delegate.methodX %>'

will raise an exception.

Does anyone know of a better way to accomplish the same effect?

Best regards,

Julian I. Kamil <[email protected]>
http://pandora.rubyveil.com/ - Pandora Publisher
http://books.rubyveil.com/ - The Ruby Bookshelf
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,772
Messages
2,569,593
Members
45,110
Latest member
OdetteGabb
Top