Skip to content
Browse files

Support reversal of ARel orderings in reverse_sql_order

  • Loading branch information...
1 parent eb3e523 commit c26c273761d12e1b42cc490cd8db0622772aab3b @ernie ernie committed with tenderlove Jun 20, 2011
View
15 activerecord/lib/active_record/relation/query_methods.rb
@@ -305,9 +305,18 @@ def apply_modules(modules)
def reverse_sql_order(order_query)
order_query = ["#{quoted_table_name}.#{quoted_primary_key} ASC"] if order_query.empty?
- order_query.join(', ').split(',').collect do |s|
- s.gsub!(/\sasc\Z/i, ' DESC') || s.gsub!(/\sdesc\Z/i, ' ASC') || s.concat(' DESC')
- end
+ order_query.map do |o|
+ case o
+ when Arel::Nodes::Ordering
+ o.reverse
+ when String, Symbol
+ o.to_s.split(',').collect do |s|
+ s.gsub!(/\sasc\Z/i, ' DESC') || s.gsub!(/\sdesc\Z/i, ' ASC') || s.concat(' DESC')
+ end
+ else
+ o
+ end
+ end.flatten
end
def array_of_strings?(o)
View
12 activerecord/test/cases/relations_test.rb
@@ -145,6 +145,18 @@ def test_finding_with_order
assert_equal topics(:first).title, topics.first.title
end
+
+ def test_finding_with_arel_order
+ topics = Topic.order(Topic.arel_table[:id].asc)
+ assert_equal 4, topics.to_a.size
+ assert_equal topics(:first).title, topics.first.title
+ end
+
+ def test_finding_last_with_arel_order
+ topics = Topic.order(Topic.arel_table[:id].asc)
+ assert_equal topics(:fourth).title, topics.last.title
+ end
+
def test_finding_with_order_concatenated
topics = Topic.order('author_name').order('title')
assert_equal 4, topics.to_a.size

0 comments on commit c26c273

Please sign in to comment.
Something went wrong with that request. Please try again.