@@ -80,12 +80,13 module SortHelper | |||||
80 | @criteria.collect {|k,o| k + (o ? '' : ':desc')}.join(',') |
|
80 | @criteria.collect {|k,o| k + (o ? '' : ':desc')}.join(',') | |
81 | end |
|
81 | end | |
82 |
|
82 | |||
|
83 | # Returns an array of SQL fragments used to sort the list | |||
83 | def to_sql |
|
84 | def to_sql | |
84 | sql = @criteria.collect do |k,o| |
|
85 | sql = @criteria.collect do |k,o| | |
85 | if s = @available_criteria[k] |
|
86 | if s = @available_criteria[k] | |
86 |
(o ? s.to_a : s.to_a.collect {|c| append_desc(c)}) |
|
87 | (o ? s.to_a : s.to_a.collect {|c| append_desc(c)}) | |
87 | end |
|
88 | end | |
88 |
end.compact |
|
89 | end.flatten.compact | |
89 | sql.blank? ? nil : sql |
|
90 | sql.blank? ? nil : sql | |
90 | end |
|
91 | end | |
91 |
|
92 |
@@ -270,14 +270,13 class IssueQuery < Query | |||||
270 | # Returns the issues |
|
270 | # Returns the issues | |
271 | # Valid options are :order, :offset, :limit, :include, :conditions |
|
271 | # Valid options are :order, :offset, :limit, :include, :conditions | |
272 | def issues(options={}) |
|
272 | def issues(options={}) | |
273 |
order_option = [group_by_sort_order, options[:order]].reject |
|
273 | order_option = [group_by_sort_order, options[:order]].flatten.reject(&:blank?) | |
274 | order_option = nil if order_option.blank? |
|
|||
275 |
|
274 | |||
276 | issues = Issue.visible.where(options[:conditions]).all( |
|
275 | issues = Issue.visible.where(options[:conditions]).all( | |
277 | :include => ([:status, :project] + (options[:include] || [])).uniq, |
|
276 | :include => ([:status, :project] + (options[:include] || [])).uniq, | |
278 | :conditions => statement, |
|
277 | :conditions => statement, | |
279 | :order => order_option, |
|
278 | :order => order_option, | |
280 | :joins => joins_for_order_statement(order_option), |
|
279 | :joins => joins_for_order_statement(order_option.join(',')), | |
281 | :limit => options[:limit], |
|
280 | :limit => options[:limit], | |
282 | :offset => options[:offset] |
|
281 | :offset => options[:offset] | |
283 | ) |
|
282 | ) | |
@@ -295,13 +294,12 class IssueQuery < Query | |||||
295 |
|
294 | |||
296 | # Returns the issues ids |
|
295 | # Returns the issues ids | |
297 | def issue_ids(options={}) |
|
296 | def issue_ids(options={}) | |
298 |
order_option = [group_by_sort_order, options[:order]].reject |
|
297 | order_option = [group_by_sort_order, options[:order]].flatten.reject(&:blank?) | |
299 | order_option = nil if order_option.blank? |
|
|||
300 |
|
298 | |||
301 | Issue.visible.scoped(:conditions => options[:conditions]).scoped(:include => ([:status, :project] + (options[:include] || [])).uniq, |
|
299 | Issue.visible.scoped(:conditions => options[:conditions]).scoped(:include => ([:status, :project] + (options[:include] || [])).uniq, | |
302 | :conditions => statement, |
|
300 | :conditions => statement, | |
303 | :order => order_option, |
|
301 | :order => order_option, | |
304 | :joins => joins_for_order_statement(order_option), |
|
302 | :joins => joins_for_order_statement(order_option.join(',')), | |
305 | :limit => options[:limit], |
|
303 | :limit => options[:limit], | |
306 | :offset => options[:offset]).find_ids |
|
304 | :offset => options[:offset]).find_ids | |
307 | rescue ::ActiveRecord::StatementInvalid => e |
|
305 | rescue ::ActiveRecord::StatementInvalid => e |
@@ -30,21 +30,21 class SortHelperTest < ActionView::TestCase | |||||
30 | sort_init 'attr1', 'desc' |
|
30 | sort_init 'attr1', 'desc' | |
31 | sort_update(['attr1', 'attr2']) |
|
31 | sort_update(['attr1', 'attr2']) | |
32 |
|
32 | |||
33 | assert_equal 'attr1 DESC', sort_clause |
|
33 | assert_equal ['attr1 DESC'], sort_clause | |
34 | end |
|
34 | end | |
35 |
|
35 | |||
36 | def test_default_sort_clause_with_hash |
|
36 | def test_default_sort_clause_with_hash | |
37 | sort_init 'attr1', 'desc' |
|
37 | sort_init 'attr1', 'desc' | |
38 | sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'}) |
|
38 | sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'}) | |
39 |
|
39 | |||
40 | assert_equal 'table1.attr1 DESC', sort_clause |
|
40 | assert_equal ['table1.attr1 DESC'], sort_clause | |
41 | end |
|
41 | end | |
42 |
|
42 | |||
43 | def test_default_sort_clause_with_multiple_columns |
|
43 | def test_default_sort_clause_with_multiple_columns | |
44 | sort_init 'attr1', 'desc' |
|
44 | sort_init 'attr1', 'desc' | |
45 | sort_update({'attr1' => ['table1.attr1', 'table1.attr2'], 'attr2' => 'table2.attr2'}) |
|
45 | sort_update({'attr1' => ['table1.attr1', 'table1.attr2'], 'attr2' => 'table2.attr2'}) | |
46 |
|
46 | |||
47 | assert_equal 'table1.attr1 DESC, table1.attr2 DESC', sort_clause |
|
47 | assert_equal ['table1.attr1 DESC', 'table1.attr2 DESC'], sort_clause | |
48 | end |
|
48 | end | |
49 |
|
49 | |||
50 | def test_params_sort |
|
50 | def test_params_sort | |
@@ -53,7 +53,7 class SortHelperTest < ActionView::TestCase | |||||
53 | sort_init 'attr1', 'desc' |
|
53 | sort_init 'attr1', 'desc' | |
54 | sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'}) |
|
54 | sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'}) | |
55 |
|
55 | |||
56 | assert_equal 'table1.attr1, table2.attr2 DESC', sort_clause |
|
56 | assert_equal ['table1.attr1', 'table2.attr2 DESC'], sort_clause | |
57 | assert_equal 'attr1,attr2:desc', @session['foo_bar_sort'] |
|
57 | assert_equal 'attr1,attr2:desc', @session['foo_bar_sort'] | |
58 | end |
|
58 | end | |
59 |
|
59 | |||
@@ -63,7 +63,7 class SortHelperTest < ActionView::TestCase | |||||
63 | sort_init 'attr1', 'desc' |
|
63 | sort_init 'attr1', 'desc' | |
64 | sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'}) |
|
64 | sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'}) | |
65 |
|
65 | |||
66 | assert_equal 'table1.attr1 DESC', sort_clause |
|
66 | assert_equal ['table1.attr1 DESC'], sort_clause | |
67 | assert_equal 'attr1:desc', @session['foo_bar_sort'] |
|
67 | assert_equal 'attr1:desc', @session['foo_bar_sort'] | |
68 | end |
|
68 | end | |
69 |
|
69 | |||
@@ -73,7 +73,7 class SortHelperTest < ActionView::TestCase | |||||
73 | sort_init 'attr1', 'desc' |
|
73 | sort_init 'attr1', 'desc' | |
74 | sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'}) |
|
74 | sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'}) | |
75 |
|
75 | |||
76 | assert_equal 'table1.attr1, table2.attr2', sort_clause |
|
76 | assert_equal ['table1.attr1', 'table2.attr2'], sort_clause | |
77 | assert_equal 'attr1,attr2', @session['foo_bar_sort'] |
|
77 | assert_equal 'attr1,attr2', @session['foo_bar_sort'] | |
78 | end |
|
78 | end | |
79 |
|
79 |
General Comments 0
You need to be logged in to leave comments.
Login now