Merge pull request #14634 from laurocaetano/fix_reorder

Build the reverse_order on its proper method.
This commit is contained in:
Rafael Mendonça França 2014-04-07 16:31:14 -05:00
commit 3f5eb59f7a
4 changed files with 26 additions and 7 deletions

@ -139,7 +139,6 @@ def merge_multi_values
def merge_single_values
relation.from_value = values[:from] unless relation.from_value
relation.lock_value = values[:lock] unless relation.lock_value
relation.reverse_order_value = values[:reverse_order]
unless values[:create_with].blank?
relation.create_with_value = (relation.create_with_value || {}).merge(values[:create_with])

@ -825,7 +825,9 @@ def reverse_order
end
def reverse_order! # :nodoc:
self.reverse_order_value = !reverse_order_value
orders = order_values.uniq
orders.reject!(&:blank?)
self.order_values = reverse_sql_order(orders)
self
end
@ -871,7 +873,6 @@ def symbol_unscoping(scope)
case scope
when :order
self.reverse_order_value = false
result = []
else
result = [] unless single_val_method
@ -1031,7 +1032,6 @@ def array_of_strings?(o)
def build_order(arel)
orders = order_values.uniq
orders.reject!(&:blank?)
orders = reverse_sql_order(orders) if reverse_order_value
arel.order(*orders) unless orders.empty?
end

@ -107,10 +107,18 @@ def relation
end
test 'reverse_order!' do
assert relation.reverse_order!.equal?(relation)
assert relation.reverse_order_value
relation = Post.order('title ASC, comments_count DESC')
relation.reverse_order!
assert !relation.reverse_order_value
assert_equal 'title DESC', relation.order_values.first
assert_equal 'comments_count ASC', relation.order_values.last
relation.reverse_order!
assert_equal 'title ASC', relation.order_values.first
assert_equal 'comments_count DESC', relation.order_values.last
end
test 'create_with!' do

@ -1424,6 +1424,18 @@ def test_automatically_added_reorder_references
assert_equal [], scope.references_values
end
def test_order_with_reorder_nil_removes_the_order
relation = Post.order(:title).reorder(nil)
assert_nil relation.order_values.first
end
def test_reverse_order_with_reorder_nil_removes_the_order
relation = Post.order(:title).reverse_order.reorder(nil)
assert_nil relation.order_values.first
end
def test_presence
topics = Topic.all