Skip to content

Commit 42f73a6

Browse files
committed
Merge pull request rails#13 from tanordheim/default_scope_fix
Support default_scope ordering by calling .unscoped
2 parents 819c37d + f233643 commit 42f73a6

File tree

2 files changed

+93
-1
lines changed

2 files changed

+93
-1
lines changed

lib/acts_as_list/active_record/acts/list.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ def bottom_position_in_list(except = nil)
222222
def bottom_item(except = nil)
223223
conditions = scope_condition
224224
conditions = "#{conditions} AND #{self.class.primary_key} != #{except.id}" if except
225-
acts_as_list_class.find(:first, :conditions => conditions, :order => "#{position_column} DESC")
225+
acts_as_list_class.unscoped.find(:first, :conditions => conditions, :order => "#{position_column} DESC")
226226
end
227227

228228
# Forces item to assume the bottom position in the list.

test/test_list.rb

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ class ZeroBasedMixin < ActiveRecord::Base
7171
def self.table_name() "mixins" end
7272
end
7373

74+
class DefaultScopedMixin < ActiveRecord::Base
75+
set_table_name 'mixins'
76+
acts_as_list :column => "pos"
77+
default_scope order('pos ASC')
78+
end
79+
7480
class ZeroBasedTest < Test::Unit::TestCase
7581
def setup
7682
setup_db
@@ -1248,3 +1254,89 @@ def test_remove_before_destroy_does_not_shift_lower_items_twice
12481254
end
12491255

12501256
end
1257+
1258+
class DefaultScopedTest < Test::Unit::TestCase
1259+
def setup
1260+
setup_db
1261+
(1..4).each { |counter| DefaultScopedMixin.create! :pos => counter }
1262+
end
1263+
1264+
def teardown
1265+
teardown_db
1266+
end
1267+
1268+
def test_insert
1269+
new = DefaultScopedMixin.create
1270+
assert_equal 5, new.pos
1271+
assert !new.first?
1272+
assert new.last?
1273+
1274+
new = DefaultScopedMixin.create
1275+
assert_equal 6, new.pos
1276+
assert !new.first?
1277+
assert new.last?
1278+
1279+
new = DefaultScopedMixin.create
1280+
assert_equal 7, new.pos
1281+
assert !new.first?
1282+
assert new.last?
1283+
end
1284+
1285+
def test_reordering
1286+
assert_equal [1, 2, 3, 4], DefaultScopedMixin.find(:all).map(&:id)
1287+
1288+
DefaultScopedMixin.find(2).move_lower
1289+
assert_equal [1, 3, 2, 4], DefaultScopedMixin.find(:all).map(&:id)
1290+
1291+
DefaultScopedMixin.find(2).move_higher
1292+
assert_equal [1, 2, 3, 4], DefaultScopedMixin.find(:all).map(&:id)
1293+
1294+
DefaultScopedMixin.find(1).move_to_bottom
1295+
assert_equal [2, 3, 4, 1], DefaultScopedMixin.find(:all).map(&:id)
1296+
1297+
DefaultScopedMixin.find(1).move_to_top
1298+
assert_equal [1, 2, 3, 4], DefaultScopedMixin.find(:all).map(&:id)
1299+
1300+
DefaultScopedMixin.find(2).move_to_bottom
1301+
assert_equal [1, 3, 4, 2], DefaultScopedMixin.find(:all).map(&:id)
1302+
1303+
DefaultScopedMixin.find(4).move_to_top
1304+
assert_equal [4, 1, 3, 2], DefaultScopedMixin.find(:all).map(&:id)
1305+
end
1306+
1307+
def test_insert_at
1308+
new = DefaultScopedMixin.create
1309+
assert_equal 5, new.pos
1310+
1311+
new = DefaultScopedMixin.create
1312+
assert_equal 6, new.pos
1313+
1314+
new = DefaultScopedMixin.create
1315+
assert_equal 7, new.pos
1316+
1317+
new4 = DefaultScopedMixin.create
1318+
assert_equal 8, new4.pos
1319+
1320+
new4.insert_at(2)
1321+
assert_equal 2, new4.pos
1322+
1323+
new.reload
1324+
assert_equal 8, new.pos
1325+
1326+
new.insert_at(2)
1327+
assert_equal 2, new.pos
1328+
1329+
new4.reload
1330+
assert_equal 3, new4.pos
1331+
1332+
new5 = DefaultScopedMixin.create
1333+
assert_equal 9, new5.pos
1334+
1335+
new5.insert_at(1)
1336+
assert_equal 1, new5.pos
1337+
1338+
new4.reload
1339+
assert_equal 4, new4.pos
1340+
end
1341+
1342+
end

0 commit comments

Comments
 (0)