Howto: Add my own functionality to a plugin?

Max Williams
Mon, 14 Sep 2009 09:33:37 -0000

The plugin in this case is acts_as_taggable_on_steroid, which has
classes Tag, Tagging and TagList, and a module
ActiveRecord::Acts::Taggable which adds the acts_as_taggable method to
all classes (so that when the call it they have some other modules
included at the class and instance level, giving them the acts as
taggable methods).

I have some extra methods i want to add to the Tag class and also to to
taggable classes.  But, i can''t work out how to set this up in such a
way as my additional Tag methods sit on top of the exisiting Tag
methods, for example.

There must be a standard procedure for this situation - can anyone help
me out?  (i''m guessing the best practise isn''t to physically
add my own
methods into the plugin''s classes/modules)

Thanks
max

The plugin has this structure for the acts_as_taggable methods -

module ActiveRecord #:nodoc:
  module Acts #:nodoc:
    module Taggable #:nodoc:
      def self.included(base)
        base.extend(ClassMethods)
      end

      module ClassMethods
        def acts_as_taggable
          has_many :taggings, :as => :taggable, :dependent => :destroy,
:include => :tag
          has_many :tags, :through => :taggings

          before_save :save_cached_tag_list

          after_create :save_tags
          after_update :save_tags

          include ActiveRecord::Acts::Taggable::InstanceMethods
          extend ActiveRecord::Acts::Taggable::SingletonMethods

          alias_method_chain :reload, :tag_list
        end

        ...
      end

      module SingletonMethods
        ...
      end

      module InstanceMethods
        ...
      end
    end
  end
end

ActiveRecord::Base.send(:include, ActiveRecord::Acts::Taggable)
--
Posted via http://www.ruby-forum.com/.