Acts_as_paranoid, aliasing and nested scopes in Rails 1.1

I have a real problem with the acts_as_paranoid plugin. The aliasing of
find and so the nested scope does not seem to work at all, when
combining it with similar plugins.

The description:
I made a copy of ‘acts_as_paranoid’ in the plugin directory, renamed it
to ‘acts_as_very_new’(just a nonsense plugin for testing), and
simplified the code (original code of acts_as_paranoid can be found
here:
http://svn.techno-weenie.net/projects/plugins/acts_as_paranoid/lib/caboose/acts/paranoid.rb):

#--------------------------------------------------------------BEGIN
module VeryNew
#…
module ClassMethods
def acts_as_very_new
unless is_very_new?
class << self
alias_method :find_with_old, :find
end
end
include InstanceMethods
end
#…
end

module InstanceMethods #:nodoc:
#…

 module ClassMethods
   def find(*args)
     with_very_new_scope { find_with_old(*args) }
   end

   protected
     def with_very_new_scope(&block)
       with_scope({:find => {:conditions => 

["#{table_name}.updated_at > ?", (Time.new - 3.days)]} }, :merge,
&block)
end
end

end
end
#--------------------------------------------------------------END

As you can see, there’s no change in structure, it’s the same as the
original ‘acts_as_paranoid’ only with a different find-condition. Next I
added following code to a model:

#--------------------------------------------------------------BEGIN
class Book < ActiveRecord::Base
acts_as_paranoid
acts_as_very_new
#…
end
#--------------------------------------------------------------END

In a controller I did the following calls:

Book.find(:all)

SQL: SELECT * FROM books WHERE ((books.updated_at > '2006-05-08

11:38:33’) AND (books.deleted_at IS NULL))

Book.find_with_old(:all)

SQL: SELECT * FROM books WHERE (books.deleted_at IS NULL)

Book.find_with_deleted(:all)

SQL: SELECT * FROM books

Isn’t is strange? Shouldn’t “Book.find_with_deleted(:all)” generate a
“WHERE (books.updated_at > ‘2006-05-08 11:38:33’)” condition? The
problem seems to be in aliasing of find. When I switch the call order of
“acts_as_paranoid” and “acts_as_very_new” in the model, I get:

Book.find(:all)

SQL: SELECT * FROM books WHERE ((books.updated_at > '2006-05-08

11:38:33’) AND (books.deleted_at IS NULL))

Book.find_with_old(:all)

SQL: SELECT * FROM books

Book.find_with_deleted(:all)

SQL: SELECT * FROM books WHERE (books.updated_at > '2006-05-08

11:38:33’)

Has anyone an idea how to fix it?
Thanks in advance,
Dave

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs