lib/searchlogic/named_scopes/association_ordering.rb in kazjote-searchlogic-2.1.9.3 vs lib/searchlogic/named_scopes/association_ordering.rb in kazjote-searchlogic-2.3.4
- old
+ new
@@ -1,27 +1,43 @@
module Searchlogic
module NamedScopes
- # Handles dynamically creating named scopes for associations.
+ # Handles dynamically creating order named scopes for associations:
+ #
+ # User.has_many :orders
+ # Order.has_many :line_items
+ # LineItem
+ #
+ # User.ascend_by_orders_line_items_id
+ #
+ # See the README for a more detailed explanation.
module AssociationOrdering
+ def condition?(name) # :nodoc:
+ super || association_ordering_condition?(name)
+ end
+
private
+ def association_ordering_condition?(name)
+ !association_ordering_condition_details(name).nil?
+ end
+
def method_missing(name, *args, &block)
if details = association_ordering_condition_details(name)
- create_association_ordering_condition(details[:association], details[:order_as], details[:column], args)
+ create_association_ordering_condition(details[:association], details[:order_as], details[:condition], args)
send(name, *args)
else
super
end
end
def association_ordering_condition_details(name)
associations = reflect_on_all_associations.collect { |assoc| assoc.name }
- if !local_condition?(name) && name.to_s =~ /^(ascend|descend)_by_(#{associations.join("|")})_(\w+)$/
- {:order_as => $1, :association => $2, :column => $3}
+ if name.to_s =~ /^(ascend|descend)_by_(#{associations.join("|")})_(\w+)$/
+ {:order_as => $1, :association => $2, :condition => $3}
end
end
- def create_association_ordering_condition(association_name, order_as, column, args)
- named_scope("#{order_as}_by_#{association_name}_#{column}", association_condition_options(association_name, "#{order_as}_by_#{column}", args))
+ def create_association_ordering_condition(association, order_as, condition, args)
+ named_scope("#{order_as}_by_#{association}_#{condition}", association_condition_options(association, "#{order_as}_by_#{condition}", args))
end
end
end
end
\ No newline at end of file