This patch extends _is and _is_not to support multiple values, just like
ActiveRecord's find.

     names = %w{tablatom solars grayeed prh}
     User.name_is(names)

     User.state_is_not([:al, :la, :mi])

It's not pretty and it's not exhaustively tested but it does make my app a
little nicer.

ALSO, it doesn't support, transport_is(:train, :ship, :airplane).  You must
write that as transport_is([:train, :ship, :airplane]).  Fixing this means
making some deeper changes.

Is this patch good enough to go in?  Maybe someone would want to fix that
last item and make User.name_is("Alice", "Bob") work?

    - Scott



diff --git a/vendor/plugins/hobo/hobo/lib/hobo/scopes/automatic_scopes.rb
b/vendor/plugins/hobo/hobo/lib/hobo/scopes/automatic_scopes.rb
index 99ee76c..5eabb1f 100644
--- a/vendor/plugins/hobo/hobo/lib/hobo/scopes/automatic_scopes.rb
+++ b/vendor/plugins/hobo/hobo/lib/hobo/scopes/automatic_scopes.rb
@@ -84,12 +84,18 @@ module Hobo
           if refl.options[:polymorphic]
             def_scope do |record|
               record = find_if_named(refl, record)
-              { :conditions => ["#{foreign_key_column refl} = ? AND
#{$1}_type = ?", record, record.class.name] }
+              { :conditions => record.kind_of?(Enumerable) ?
+                ["#{foreign_key_column refl} IN (?) AND #{$1}_type = ?",
record, record.class.name] :
+                ["#{foreign_key_column refl} = ? AND #{$1}_type = ?",
record, record.class.name]
+              }
             end
           else
             def_scope do |record|
               record = find_if_named(refl, record)
-              { :conditions => ["#{foreign_key_column refl} = ?", record] }
+              { :conditions => record.kind_of?(Enumerable) ?
+                ["#{foreign_key_column refl} IN (?)", record] :
+                ["#{foreign_key_column refl} = ?", record]
+              }
             end
           end

@@ -99,12 +105,18 @@ module Hobo
           if refl.options[:polymorphic]
             def_scope do |record|
               record = find_if_named(refl, record)
-              { :conditions => ["#{foreign_key_column refl} <> ? OR
#{name}_type <> ?", record, record.class.name] }
+              { :conditions => record.kind_of?(Enumerable) ?
+                ["#{foreign_key_column refl} NOT IN (?) OR #{name}_type <>
?", record, record.class.name] :
+                ["#{foreign_key_column refl} <> ? OR #{name}_type <> ?",
record, record.class.name]
+              }
             end
           else
             def_scope do |record|
               record = find_if_named(refl, record)
-              { :conditions => ["#{foreign_key_column refl} <> ?", record]
}
+              { :conditions => record.kind_of?(Enumerable) ?
+                ["#{foreign_key_column refl} NOT IN (?)", record] :
+                ["#{foreign_key_column refl} <> ?", record]
+              }
             end
           end

@@ -114,15 +126,21 @@ module Hobo
         # name_is(str)
         elsif name =~ /^(.*)_is$/ && (col = column($1))

-          def_scope do |str|
-            { :conditions => ["#{column_sql(col)} = ?", str] }
+          def_scope do |key|
+            { :conditions => key.kind_of?(Enumerable) ?
+             ["#{column_sql(col)} IN (?)", key] :
+             ["#{column_sql(col)} = ?", key]
+            }
           end

         # name_is_not(str)
         elsif name =~ /^(.*)_is_not$/ && (col = column($1))

-          def_scope do |str|
-            { :conditions => ["#{column_sql(col)} <> ?", str] }
+          def_scope do |key|
+            { :conditions => key.kind_of?(Enumerable) ?
+              ["#{column_sql(col)} NOT IN (?)", key] :
+              ["#{column_sql(col)} <> ?", key]
+            }
           end

         # name_contains(str)
@@ -213,13 +231,19 @@ module Hobo
         elsif name == "is"

           def_scope do |record|
-            { :conditions => ["#[email protected]_name}.#{@klass.primary_key} =
?", record] }
+            { :conditions => record.kind_of?(Enumerable) ?
+              ["#[email protected]_name}.#{@klass.primary_key} IN (?)", record]
:
+              ["#[email protected]_name}.#{@klass.primary_key} = ?", record]
+            }
           end

         elsif name == "is_not"

           def_scope do |record|
-            { :conditions => ["#[email protected]_name}.#{@klass.primary_key}
<> ?", record] }
+            { :conditions => record.kind_of?(Enumerable) ?
+              ["#[email protected]_name}.#{@klass.primary_key} NOT IN (?)",
record] :
+              ["#[email protected]_name}.#{@klass.primary_key} <> ?", record]
+            }
           end

         else

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Hobo 
Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/hobousers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to