sortifiable 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +9 -0
- data/{README → README.md} +17 -15
- data/Rakefile +0 -1
- data/lib/sortifiable.rb +19 -4
- data/lib/sortifiable/version.rb +1 -1
- data/sortifiable.gemspec +5 -5
- data/test/sortifiable_test.rb +40 -0
- metadata +13 -15
data/CHANGELOG
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
*0.2.2 (May 3rd, 2011)
|
2
|
+
|
3
|
+
* Ensure that callbacks return true when no updates take place
|
4
|
+
|
5
|
+
* Moving first and last items should return true even when no update takes place
|
6
|
+
|
7
|
+
* Loosen gem dependencies so that it will work with Rails edge
|
8
|
+
|
9
|
+
|
1
10
|
*0.2.1 (April 20th, 2011)
|
2
11
|
|
3
12
|
* Add checking for scope changes so items are moved between lists correctly [Manuel Meurer]
|
data/{README → README.md}
RENAMED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
Sortifiable
|
2
|
+
===========
|
2
3
|
|
3
4
|
This gem provides an acts_as_list compatible capability for sorting
|
4
5
|
and reordering a number of objects in a list. The class that has this
|
@@ -8,23 +9,25 @@ the mapped database table.
|
|
8
9
|
This gem requires ActiveRecord 3.0 as it has been refactored to use
|
9
10
|
the scope methods and query interface introduced with Ruby on Rails 3.0
|
10
11
|
|
12
|
+
Example
|
13
|
+
-------
|
11
14
|
|
12
|
-
|
15
|
+
``` ruby
|
16
|
+
class TodoList < ActiveRecord::Base
|
17
|
+
has_many :todo_items, :order => "position"
|
18
|
+
end
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
|
20
|
+
class TodoItem < ActiveRecord::Base
|
21
|
+
belongs_to :todo_list
|
22
|
+
acts_as_list :scope => :todo_list
|
23
|
+
end
|
17
24
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
25
|
+
todo_list.first.move_to_bottom
|
26
|
+
todo_list.last.move_higher
|
27
|
+
```
|
22
28
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
=== Contributions
|
29
|
+
Contributions
|
30
|
+
-------------
|
28
31
|
|
29
32
|
Bug fixes and new feature patches are welcome. Please provide tests and
|
30
33
|
documentation wherever possible - without them it is unlikely your patch
|
@@ -36,5 +39,4 @@ Thanks to the following people for their contributions:
|
|
36
39
|
|
37
40
|
* Manuel Meurer
|
38
41
|
|
39
|
-
|
40
42
|
Copyright (c) 2011 Andrew White, released under the MIT license
|
data/Rakefile
CHANGED
data/lib/sortifiable.rb
CHANGED
@@ -243,6 +243,8 @@ module Sortifiable
|
|
243
243
|
|
244
244
|
set_position current_position - 1
|
245
245
|
list_scope.update_all(sql) > 0
|
246
|
+
else
|
247
|
+
true
|
246
248
|
end
|
247
249
|
end
|
248
250
|
else
|
@@ -269,6 +271,8 @@ module Sortifiable
|
|
269
271
|
|
270
272
|
set_position current_position + 1
|
271
273
|
list_scope.update_all(sql) > 0
|
274
|
+
else
|
275
|
+
true
|
272
276
|
end
|
273
277
|
end
|
274
278
|
else
|
@@ -296,6 +300,8 @@ module Sortifiable
|
|
296
300
|
|
297
301
|
set_position last_position
|
298
302
|
list_scope.update_all(sql) > 0
|
303
|
+
else
|
304
|
+
true
|
299
305
|
end
|
300
306
|
end
|
301
307
|
else
|
@@ -322,6 +328,8 @@ module Sortifiable
|
|
322
328
|
|
323
329
|
set_position 1
|
324
330
|
list_scope.update_all(sql) > 0
|
331
|
+
else
|
332
|
+
true
|
325
333
|
end
|
326
334
|
end
|
327
335
|
else
|
@@ -358,9 +366,13 @@ module Sortifiable
|
|
358
366
|
end
|
359
367
|
|
360
368
|
def decrement_position_on_lower_items #:nodoc:
|
361
|
-
|
362
|
-
|
363
|
-
|
369
|
+
if last?
|
370
|
+
true
|
371
|
+
else
|
372
|
+
update = "#{quoted_position_column} = #{quoted_position_column} - 1"
|
373
|
+
conditions = "#{quoted_position_column} > #{current_position}"
|
374
|
+
list_scope.update_all(update, conditions) > 0
|
375
|
+
end
|
364
376
|
end
|
365
377
|
|
366
378
|
def decrement_position_on_lower_items_in_old_list #:nodoc:
|
@@ -376,10 +388,12 @@ module Sortifiable
|
|
376
388
|
# Set old scope
|
377
389
|
scope_parts.each { |scope_part| send "#{scope_part}=", send("#{scope_part}_was") }
|
378
390
|
|
379
|
-
yield
|
391
|
+
retval = yield
|
380
392
|
|
381
393
|
# Set new scope
|
382
394
|
scope_parts.each_with_index { |scope_part, i| send "#{scope_part}=", new_scope[i] }
|
395
|
+
|
396
|
+
retval
|
383
397
|
end
|
384
398
|
|
385
399
|
def scope_parts_from_string(string) #:nodoc:
|
@@ -401,6 +415,7 @@ module Sortifiable
|
|
401
415
|
|
402
416
|
def set_position(position) #:nodoc:
|
403
417
|
send "#{position_column}=", position
|
418
|
+
true
|
404
419
|
end
|
405
420
|
|
406
421
|
def list_class #:nodoc:
|
data/lib/sortifiable/version.rb
CHANGED
data/sortifiable.gemspec
CHANGED
@@ -24,7 +24,7 @@ EOF
|
|
24
24
|
".gemtest",
|
25
25
|
"CHANGELOG",
|
26
26
|
"LICENSE",
|
27
|
-
"README",
|
27
|
+
"README.md",
|
28
28
|
"Rakefile",
|
29
29
|
"lib/sortifiable.rb",
|
30
30
|
"lib/sortifiable/version.rb",
|
@@ -35,8 +35,8 @@ EOF
|
|
35
35
|
s.test_files = ["test/sortifiable_test.rb"]
|
36
36
|
s.require_paths = ["lib"]
|
37
37
|
|
38
|
-
s.add_dependency "activesupport", "
|
39
|
-
s.add_dependency "activerecord", "
|
40
|
-
s.add_development_dependency "bundler", "
|
41
|
-
s.add_development_dependency "sqlite3", "
|
38
|
+
s.add_dependency "activesupport", ">= 3.0"
|
39
|
+
s.add_dependency "activerecord", ">= 3.0"
|
40
|
+
s.add_development_dependency "bundler", ">= 1.0.10"
|
41
|
+
s.add_development_dependency "sqlite3", ">= 1.3.3"
|
42
42
|
end
|
data/test/sortifiable_test.rb
CHANGED
@@ -336,6 +336,46 @@ class ListTest < Test::Unit::TestCase
|
|
336
336
|
assert_equal [], ListMixin.find(4).lower_items.map(&:id)
|
337
337
|
end
|
338
338
|
|
339
|
+
def test_moving_first_and_last_items_return_true
|
340
|
+
assert_equal [1, 2, 3, 4], ListMixin.where(:parent_id => 5).map(&:id)
|
341
|
+
assert_equal true, ListMixin.find(1).move_to_top
|
342
|
+
assert_equal true, ListMixin.find(1).move_higher
|
343
|
+
assert_equal true, ListMixin.find(4).move_to_bottom
|
344
|
+
assert_equal true, ListMixin.find(4).move_lower
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_add_to_list_should_return_true
|
348
|
+
assert_equal [1, 2, 3, 4], ListMixin.where(:parent_id => 5).map(&:id)
|
349
|
+
|
350
|
+
item = ListMixin.new(:parent_id => 5)
|
351
|
+
assert_equal true, item.new_record?
|
352
|
+
assert_equal false, item.in_list?
|
353
|
+
assert_equal true, item.add_to_list
|
354
|
+
|
355
|
+
item = ListMixin.create(:parent_id => 5)
|
356
|
+
item.remove_from_list
|
357
|
+
assert_equal false, item.new_record?
|
358
|
+
assert_equal false, item.in_list?
|
359
|
+
assert_equal true, item.add_to_list
|
360
|
+
end
|
361
|
+
|
362
|
+
def test_decrement_callbacks_should_return_true
|
363
|
+
assert_equal [1, 2, 3, 4], ListMixin.where(:parent_id => 5).map(&:id)
|
364
|
+
|
365
|
+
item = ListMixin.find(4)
|
366
|
+
assert_equal 4, item.pos
|
367
|
+
assert_equal true, item.send(:decrement_position_on_lower_items)
|
368
|
+
|
369
|
+
assert_equal [1, 2, 3, 4], ListMixin.where(:parent_id => 5).map(&:id)
|
370
|
+
|
371
|
+
item = ListMixin.find(4)
|
372
|
+
item.parent_id = 6
|
373
|
+
|
374
|
+
assert_equal 4, item.pos
|
375
|
+
assert_equal true, item.will_leave_list?
|
376
|
+
assert_equal true, item.send(:decrement_position_on_lower_items_in_old_list)
|
377
|
+
end
|
378
|
+
|
339
379
|
end
|
340
380
|
|
341
381
|
class ListWithStringScopeTest < Test::Unit::TestCase
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sortifiable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andrew White
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-03 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -24,14 +24,13 @@ dependencies:
|
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 7
|
30
30
|
segments:
|
31
31
|
- 3
|
32
32
|
- 0
|
33
|
-
|
34
|
-
version: 3.0.3
|
33
|
+
version: "3.0"
|
35
34
|
type: :runtime
|
36
35
|
version_requirements: *id001
|
37
36
|
- !ruby/object:Gem::Dependency
|
@@ -40,14 +39,13 @@ dependencies:
|
|
40
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
41
|
requirements:
|
43
|
-
- -
|
42
|
+
- - ">="
|
44
43
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
44
|
+
hash: 7
|
46
45
|
segments:
|
47
46
|
- 3
|
48
47
|
- 0
|
49
|
-
|
50
|
-
version: 3.0.3
|
48
|
+
version: "3.0"
|
51
49
|
type: :runtime
|
52
50
|
version_requirements: *id002
|
53
51
|
- !ruby/object:Gem::Dependency
|
@@ -56,7 +54,7 @@ dependencies:
|
|
56
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
55
|
none: false
|
58
56
|
requirements:
|
59
|
-
- -
|
57
|
+
- - ">="
|
60
58
|
- !ruby/object:Gem::Version
|
61
59
|
hash: 3
|
62
60
|
segments:
|
@@ -72,7 +70,7 @@ dependencies:
|
|
72
70
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
71
|
none: false
|
74
72
|
requirements:
|
75
|
-
- -
|
73
|
+
- - ">="
|
76
74
|
- !ruby/object:Gem::Version
|
77
75
|
hash: 29
|
78
76
|
segments:
|
@@ -103,7 +101,7 @@ files:
|
|
103
101
|
- .gemtest
|
104
102
|
- CHANGELOG
|
105
103
|
- LICENSE
|
106
|
-
- README
|
104
|
+
- README.md
|
107
105
|
- Rakefile
|
108
106
|
- lib/sortifiable.rb
|
109
107
|
- lib/sortifiable/version.rb
|