Forum: Ruby Module that includes both class and instance methods?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B483dea19c00b3d952f4958d67ea4bd1?d=identicon&s=25 Steve Midgley (stevemidgley)
on 2007-02-19 06:21
(Received via mailing list)
Hello,

I'm trying to create a module that will have class and instance methods
that are made available to any object that includes it. I can do the
job with two lines of code but would prefer to do it with one line of
code if possible (to make sure no one tries to foolishly use only one
half of the functionality - it should be all or nothing). Here's what I
have so far:

[code starts]
module Models
   module Ver
     def Ver.is_versioned(object)
       include Models::VersionsTables::InstanceMethods
       object.extend Models::VersionsTables::ClassMethods
     end
   end
   module VersionsTables
     module InstanceMethods
       def instance_test
         "instance test"
       end
     end
     module ClassMethods
       def class_test
         "class_test"
       end
     end
   end
end


class Live
   Models::Ver::is_versioned(self)
   #include Models::VersionsTables::InstanceMethods
   #extend Models::VersionsTables::ClassMethods
end
puts "::"+Live.class_test
live = Live.new
puts live.instance_test

[code ends]

My code can get the class methods fine - "object.extend" works like a
charm: I can't figure out what the equivalent is for an instance
method.

Or perhaps there's a wonderful way to do this using entirely different
syntax? I'd love to be able to say: "extend Modules::Ver" or something
like that and have it work - but it seems that no code gets executed
that's left open in the Ver module when that module is included or
extended?

Any thoughts or ideas?

Thank you for any help!

Steve
-
The law is an envious monster.
   - Rex Stout
31ab75f7ddda241830659630746cdd3a?d=identicon&s=25 Austin Ziegler (austin)
on 2007-02-19 15:42
(Received via mailing list)
On 2/19/07, Steve Midgley <public@misuse.org> wrote:
> Hello,

> I'm trying to create a module that will have class and instance methods
> that are made available to any object that includes it. I can do the
> job with two lines of code but would prefer to do it with one line of
> code if possible (to make sure no one tries to foolishly use only one
> half of the functionality - it should be all or nothing). Here's what I
> have so far:

Please dig through the archives for this. It has been discussed many
different times with at least a half dozen different solutions.

And at least as many people (myself included) wondering why one would
ever want to consider tightly coupling something like this.

-austin
This topic is locked and can not be replied to.