-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



On May 16, 2008, at 8:55 PM, Adrian wrote:

> Hi
>
> This maybe a pretty obvious question - but I decided to ask anyway.
>
> I am trying to class a method defined within an included module from a
> class level method as below.
>
> Is there a better way to do this? (Assumming that the class level
> method cannot be changed to a instance method.)
>
> class Report
>  include FormatHelper
>
>  self.generate_report
>  ...
>  my_date = self.format_date(...)
>  ...
>  end
> end
>
> module FormatHelper
>
>  self.format_date(date)
>  ...
>  end
> end
>
> Any help welcome
>
> Cheers
> Adrian
>

Hi,

Class Methods of Modules are local to the module.

If you want to extend a Class by the instance Methods of a Module, you  
have to possibilities:

Use "extend" instead of "include":

module A
   def foo
     "foo"
   end
end

class C
   extend A

   def self.bar
     foo
   end
end

include the Methods within the "metaclass":

class D
   class << self
      include A
   end

   def self.bar
      foo
   end
end

If you wish to keep class an instance methods separated, it is  
somewhat popular
to define them in different modules:

module FormatHelper
   module ClassMethods
      def foo
	#####
      end

      #some more methods
   end

   module InstanceMethods
      def foo
	#####
      end

      #some more methods
   end
end

class D
    include FormatHelper::InstanceMethods
    extend FormatHelper::ClassMethods
end

Have a lot of fun.
Florian Gilcher
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)

iEYEARECAAYFAkgt4kgACgkQJA/zY0IIRZahUACfSmUEdASjoZ+6DvQO372+VrHN
27UAnRraICcKvGegxzRb5xWeqargnoKs
=zIpa
-----END PGP SIGNATURE-----