Peter Szinek wrote:
> Hello,
>
> I guess the subject is silly - but since I need something like Java's
> "package private" I have used a similar name.
>
> What I would need is an additional access modifier, something like this:
>
> Module Foo
>   class Bar
>     #public methods
>     baz()
>     fluff()
>   module_private
>     ork()
>   private
>     crap()
>   end
> end
>
> baz() and fluff() are public as normally, crap() is private as normally.
> ork() is "module private" which means it is visible to the caller only
> if the caller is *also* in the module Foo - otherwise not.
>
> Can this behavior achieved somehow easily?

"local methods". they've been discussed before, so for more details you
can do a search for them. but ruby doesn't support them.

I'm don't think it can be achieved from the "defining end" (w/o
changien ruby itself)  but something like it is possible from the
calling end by using Facets' as(Foo).ork, eg.
foo.instance_method(:ork).bind(self).call. Alternatively you could
define a local lambda, but to call it you have to use define_method:

  ork = lambda { ...

  define_method(:foo) do
    ork[]
  end

if state is not an issue (eg instance variable access) then you can
always make a module method:

  def self.ork
    ...

hth,
t.