I''m writing my own plugin and all the plugins I''ve seen use class_eval in the method that is called in the including module. For example: http://wiki.rubyonrails.com/rails/pages/HowToWriteAnActsAsFoxPlugin module Foo module Acts #:nodoc: module Fox #:nodoc: def self.included(base) base.extend(ClassMethods) end # declare the class level helper methods which # will load the relevant instance methods # defined below when invoked module ClassMethods def acts_as_fox class_eval do extend Foo::Acts::Fox::SingletonMethods end end ...... Why is the class_eval needed here in acts_as_fox? Here self is the module that called acts_as_fox, which I''ve tested by adding a ''puts self.name'' in acts_as_fox. Isn''t self.class_eval redundant? The code could look like def acts_as_fox extend Foo::Acts::Fox::SingletonMethods end So I don''t see the point of having that there. I see the point of this code which is used to add the plugin into ActiveRecord::Base since self is not ActiveRecord::Base: ActiveRecord::Base.class_eval do include Foo::Acts::Fox end but even here, couldn''t this be used instead? ActiveRecord::Base.include Foo::Acts::Fox Can anybody shed any light on this? Regards, Blair -- Blair Zajac, Ph.D. <blair-szbw9MROnEZWk0Htik3J/w@public.gmane.org> Subversion and Orca training and consulting http://www.orcaware.com/svn/
> I see the point of this code which is used to add the plugin into > ActiveRecord::Base since self is not ActiveRecord::Base: > > ActiveRecord::Base.class_eval do > include Foo::Acts::Fox > end > > but even here, couldn''t this be used instead? > > ActiveRecord::Base.include Foo::Acts::Fox > > Can anybody shed any light on this?#include is private, so you have to do: ActiveRecord::Base.send :include, Foo::Acts::Fox -- rick http://techno-weenie.net
Rick Olson wrote:>>I see the point of this code which is used to add the plugin into >>ActiveRecord::Base since self is not ActiveRecord::Base: >> >>ActiveRecord::Base.class_eval do >> include Foo::Acts::Fox >>end >> >>but even here, couldn''t this be used instead? >> >>ActiveRecord::Base.include Foo::Acts::Fox >> >>Can anybody shed any light on this? > > > #include is private, so you have to do: > > ActiveRecord::Base.send :include, Foo::Acts::FoxOK, thanks. That explains the second use of it, but not the first, right, since it''s the module itself that calls acts_as_fox, so it can call include (or extend) on itself. Regards, Blair -- Blair Zajac, Ph.D. <blair-szbw9MROnEZWk0Htik3J/w@public.gmane.org> Subversion and Orca training and consulting http://www.orcaware.com/svn/
> OK, thanks. > > That explains the second use of it, but not the first, right, since it''s the > module itself that calls acts_as_fox, so it can call include (or extend) on itself.I''m not sure. I don''t think I write my plugins that way. * checks I guess I do! I should try taking those out and see if acts_as_versioned still works. I don''t have my black belt in metaprogramming... -- rick http://techno-weenie.net