Is there a simple way to include a module such that all the included methods
are private?
Thanks,
T.
Is there a simple way to include a module such that all the included methods
are private?
Thanks,
T.
Is there a simple way to include a module such that all the included methods
are private?
If you can change the module definition itself, just add ``private''
before defining any methods.
If not, perhaps this would work:
class Module
def privately_include(mod)
self.class_eval {include(mod)}
mod.instance_methods.each do |m|
self.class_eval {private m.to_sym}
end
nil
end
end
An example:
irb(main):001:0> module Foo; def bar() end end
=> nil
irb(main):002:0> class Baz; privately_include Foo end
=> nil
irb(main):003:0> Baz.new.bar
NoMethodError: private method `bar' called for #<Baz:0x402d4610>
from (irb):3
Note that this won't make future public methods defined in the module
private in the including class.
Thanks,
T.
Sam
On Mon, 29 Nov 2004 07:56:27 +0900, trans. (T. Onoma) <transami@runbox.com> wrote:
If not, perhaps this would work:
Sorry, that was pretty ugly. Make that:
class Module
private
def privately_include(mod)
self.class_eval do
include mod
private *mod.instance_methods
end
end
end
Sam
On Sun, 28 Nov 2004 17:26:43 -0600, Sam Stephenson <sstephenson@gmail.com> wrote:
> Is there a simple way to include a module such that all the included
> methods are private?If you can change the module definition itself, just add ``private''
before defining any methods.
Nope. It's FileUtils that I want to include.
If not, perhaps this would work:
> class Module
> def privately_include(mod)
> self.class_eval {include(mod)}
> mod.instance_methods.each do |m|
> self.class_eval {private m.to_sym}
> end
> nil
> end
> end
Thanks.
Note that this won't make future public methods defined in the module
private in the including class.
Right. Hmm... Module#method_added could do it.
T.
On Sunday 28 November 2004 06:26 pm, Sam Stephenson wrote:
On Mon, 29 Nov 2004 07:56:27 +0900, trans. (T. Onoma) > > <transami@runbox.com> wrote: