##// END OF EJS Templates
Merged r9781 from trunk....
Jean-Philippe Lang -
r9610:f9ee57f2c18c
parent child
Show More
@@ -131,6 +131,15 module ActiveRecord
131 when 'lowest'
131 when 'lowest'
132 move_to_bottom
132 move_to_bottom
133 end
133 end
134 reset_positions_in_list
135 end
136
137 def reset_positions_in_list
138 acts_as_list_class.where(scope_condition).reorder("#{position_column} ASC, id ASC").each_with_index do |item, i|
139 unless item.send(position_column) == (i + 1)
140 acts_as_list_class.update_all({position_column => (i + 1)}, {:id => item.id})
141 end
142 end
134 end
143 end
135
144
136 # Removes the item from the list.
145 # Removes the item from the list.
@@ -209,7 +218,7 module ActiveRecord
209 def bottom_item(except = nil)
218 def bottom_item(except = nil)
210 conditions = scope_condition
219 conditions = scope_condition
211 conditions = "#{conditions} AND #{self.class.primary_key} != #{except.id}" if except
220 conditions = "#{conditions} AND #{self.class.primary_key} != #{except.id}" if except
212 acts_as_list_class.find(:first, :conditions => conditions, :order => "#{position_column} DESC")
221 acts_as_list_class.where(conditions).reorder("#{position_column} DESC").first
213 end
222 end
214
223
215 # Forces item to assume the bottom position in the list.
224 # Forces item to assume the bottom position in the list.
@@ -34,5 +34,30 class IssuePriorityTest < ActiveSupport::TestCase
34 def test_option_name
34 def test_option_name
35 assert_equal :enumeration_issue_priorities, IssuePriority.new.option_name
35 assert_equal :enumeration_issue_priorities, IssuePriority.new.option_name
36 end
36 end
37 end
38
37
38 def test_should_be_created_at_last_position
39 IssuePriority.delete_all
40
41 priorities = [1, 2, 3].map {|i| IssuePriority.create!(:name => "P#{i}")}
42 assert_equal [1, 2, 3], priorities.map(&:position)
43 end
44
45 def test_reset_positions_in_list_should_set_sequential_positions
46 IssuePriority.delete_all
47
48 priorities = [1, 2, 3].map {|i| IssuePriority.create!(:name => "P#{i}")}
49 priorities[0].update_attribute :position, 4
50 priorities[1].update_attribute :position, 2
51 priorities[2].update_attribute :position, 7
52 assert_equal [4, 2, 7], priorities.map(&:reload).map(&:position)
53
54 priorities[0].reset_positions_in_list
55 assert_equal [2, 1, 3], priorities.map(&:reload).map(&:position)
56 end
57
58 def test_moving_in_list_should_reset_positions
59 priority = IssuePriority.first
60 priority.expects(:reset_positions_in_list).once
61 priority.move_to = 'higher'
62 end
63 end
General Comments 0
You need to be logged in to leave comments. Login now