Gents, I''m using the acts_as_taggable rails plugin (not gem), and would like to add some additional methods to it. For example, the find_tagged_with methods essentially does a find tag in a list (effectively an OR), while I''d like to implement a find_tagged_with_all method that would implement an AND (so if I specified 4 tags, it would only return items that were tagged with all four inclusively). Is there a proper way to extend a Rails plugin so that problems are minimized downstream when the plugin is upgraded? Or should I just dive right in the plugin code and hack away? FYR, I want to add a method to the following module: =module SingletonMethods def find_tagged_with(list) find_by_sql([ "SELECT #{table_name}.* FROM #{table_name}, tags, taggings " + "WHERE #{table_name}.#{primary_key} = taggings.taggable_id " + "AND taggings.taggable_type = ? " + "AND taggings.tag_id = tags.id AND tags.name IN (?)", acts_as_taggable_options[:taggable_type], list ]) end end = Thanks! B.A. -- B.A. Baracus: I thought you weren''t crazy no more? Murdock: Only on paper. -- Posted with http://DevLists.com. Sign up and save your mailbox.
I put mine in a module, TagExtension (tag_extension.rb) in the /lib folder. Vaguely remember there was something on rails-weenie about it too. HTH BA Baracus wrote:> Gents, > > I''m using the acts_as_taggable rails plugin (not gem), and would like to > add some additional methods to it. For example, the find_tagged_with > methods essentially does a find tag in a list (effectively an OR), while > I''d like to implement a find_tagged_with_all method that would implement > an AND (so if I specified 4 tags, it would only return items that were > tagged with all four inclusively). > > Is there a proper way to extend a Rails plugin so that problems are > minimized downstream when the plugin is upgraded? Or should I just dive > right in the plugin code and hack away? > > FYR, I want to add a method to the following module: > => module SingletonMethods > def find_tagged_with(list) > find_by_sql([ > "SELECT #{table_name}.* FROM #{table_name}, tags, taggings " + > "WHERE #{table_name}.#{primary_key} = taggings.taggable_id " + > "AND taggings.taggable_type = ? " + > "AND taggings.tag_id = tags.id AND tags.name IN (?)", > acts_as_taggable_options[:taggable_type], list > ]) > end > end > => > Thanks! > > B.A. > -- > B.A. Baracus: I thought you weren''t crazy no more? > Murdock: Only on paper. >
On Saturday, May 06, 2006, at 7:32 PM, Chris T wrote:>I put mine in a module, TagExtension (tag_extension.rb) in the /lib >folder. Vaguely remember there was something on rails-weenie about it too. >HTHHmm...ok, so I''ve created my own tag_extension.rb file in /lib, and it follows the same convention as the plugin: module ActiveRecord module Acts #:nodoc: module Taggable #:nodoc: module SingletonMethods #my additional methods here end end end end This operates under the assumption that Ruby modules are open, just as classes are, which based on a few irb tests they seem to be. Now, how can I get my code to see it? The documentation says /lib files are loaded automagically, but this doesn''t see to be appearing in my models that call acts_as_taggable. Thanks very much for your help! B.A. -- Posted with http://DevLists.com. Sign up and save your mailbox.
On Sunday, May 07, 2006, at 7:38 PM, BA Baracus wrote:>Now, how can I get my code to see it? The documentation says /lib files >are loaded automagically, but this doesn''t see to be appearing in my >models that call acts_as_taggable.I''ll answer myself here....turns out that /lib is added a load directory, but the files within /lib aren''t automatically loaded. To do this, I had to require my file in config/environment.rb: # require plugin extension require ''my_extension'' Thanks for the help! B.A. -- B.A. Baracus: I thought you weren''t crazy no more? Murdock: Only on paper. -- Posted with http://DevLists.com. Sign up and save your mailbox.