sortifiable 0.2.4 → 0.2.5
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 +5 -0
- data/Rakefile +3 -6
- data/lib/sortifiable.rb +11 -6
- data/lib/sortifiable/version.rb +1 -1
- data/sortifiable.gemspec +4 -4
- data/test/sortifiable_test.rb +30 -0
- metadata +80 -126
data/CHANGELOG
CHANGED
data/Rakefile
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
require 'rake'
|
2
|
-
require 'rake/rdoctask'
|
3
1
|
require 'rake/testtask'
|
4
|
-
require '
|
5
|
-
|
6
|
-
Bundler::GemHelper.install_tasks
|
2
|
+
require 'rdoc/task'
|
3
|
+
require "bundler/gem_tasks"
|
7
4
|
|
8
5
|
desc 'Default: run sortifiable unit tests.'
|
9
6
|
task :default => :test
|
@@ -16,7 +13,7 @@ Rake::TestTask.new(:test) do |t|
|
|
16
13
|
end
|
17
14
|
|
18
15
|
desc 'Generate documentation for the sortifiable gem.'
|
19
|
-
|
16
|
+
RDoc::Task.new do |rdoc|
|
20
17
|
rdoc.rdoc_dir = 'rdoc'
|
21
18
|
rdoc.title = 'Sortifiable'
|
22
19
|
rdoc.options << '--line-numbers' << '--inline-source'
|
data/lib/sortifiable.rb
CHANGED
@@ -378,12 +378,17 @@ module Sortifiable
|
|
378
378
|
end
|
379
379
|
|
380
380
|
def decrement_position_on_lower_items #:nodoc:
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
381
|
+
list_class.transaction do
|
382
|
+
ids = lock_list!
|
383
|
+
current_position, last_position = ids.index(id) + 1, ids.size
|
384
|
+
|
385
|
+
if current_position == last_position
|
386
|
+
true
|
387
|
+
else
|
388
|
+
update = "#{quoted_position_column} = #{quoted_position_column} - 1"
|
389
|
+
conditions = "#{quoted_position_column} > #{current_position}"
|
390
|
+
list_scope.update_all(update, conditions) > 0
|
391
|
+
end
|
387
392
|
end
|
388
393
|
end
|
389
394
|
|
data/lib/sortifiable/version.rb
CHANGED
data/sortifiable.gemspec
CHANGED
@@ -37,9 +37,9 @@ EOF
|
|
37
37
|
|
38
38
|
s.add_dependency "activesupport", ">= 3.0"
|
39
39
|
s.add_dependency "activerecord", ">= 3.0"
|
40
|
-
s.add_development_dependency "bundler", ">= 1.0.
|
40
|
+
s.add_development_dependency "bundler", ">= 1.0.18"
|
41
41
|
s.add_development_dependency "mysql", "~> 2.8.1"
|
42
|
-
s.add_development_dependency "mysql2", "
|
43
|
-
s.add_development_dependency "pg", "
|
44
|
-
s.add_development_dependency "sqlite3", "
|
42
|
+
s.add_development_dependency "mysql2", ">= 0.2.7"
|
43
|
+
s.add_development_dependency "pg", ">= 0.9.0"
|
44
|
+
s.add_development_dependency "sqlite3", ">= 1.3.3"
|
45
45
|
end
|
data/test/sortifiable_test.rb
CHANGED
@@ -155,6 +155,12 @@ class ListTest < ActiveSupport::TestCase
|
|
155
155
|
assert_equal 2, ListMixin.find(4).pos
|
156
156
|
end
|
157
157
|
|
158
|
+
def test_destroy_all
|
159
|
+
assert_equal [1, 2, 3, 4], ListMixin.where(:parent_id => 5).map(&:id)
|
160
|
+
ListMixin.destroy_all
|
161
|
+
assert_equal [], ListMixin.where(:parent_id => 5).map(&:id)
|
162
|
+
end
|
163
|
+
|
158
164
|
def test_nil_scope
|
159
165
|
new1, new2, new3 = ListMixin.create, ListMixin.create, ListMixin.create
|
160
166
|
new2.move_higher
|
@@ -291,6 +297,18 @@ class ListTest < ActiveSupport::TestCase
|
|
291
297
|
assert_equal true, item.send(:decrement_position_on_lower_items_in_old_list)
|
292
298
|
end
|
293
299
|
|
300
|
+
def test_decrement_callbacks_maintain_list_order
|
301
|
+
assert_equal [1, 2, 3, 4], ListMixin.where(:parent_id => 5).map(&:pos)
|
302
|
+
|
303
|
+
third = ListMixin.where(:parent_id => 5, :pos => 3).first
|
304
|
+
first = ListMixin.where(:parent_id => 5, :pos => 1).first
|
305
|
+
|
306
|
+
first.destroy
|
307
|
+
third.destroy
|
308
|
+
|
309
|
+
assert_equal [1, 2], ListMixin.where(:parent_id => 5).map(&:pos)
|
310
|
+
end
|
311
|
+
|
294
312
|
end
|
295
313
|
|
296
314
|
class ListWithStringScopeTest < ActiveSupport::TestCase
|
@@ -475,6 +493,12 @@ class ListSubTest < ActiveSupport::TestCase
|
|
475
493
|
assert_equal 2, ListMixin.find(4).pos
|
476
494
|
end
|
477
495
|
|
496
|
+
def test_destroy_all
|
497
|
+
assert_equal [1, 2, 3, 4], ListMixin.where(:parent_id => 5000).map(&:id)
|
498
|
+
ListMixin.destroy_all
|
499
|
+
assert_equal [], ListMixin.where(:parent_id => 5000).map(&:id)
|
500
|
+
end
|
501
|
+
|
478
502
|
def test_higher_items
|
479
503
|
ListMixin.find(2).remove_from_list
|
480
504
|
assert_equal [1], ListMixin.find(3).higher_items.map(&:id)
|
@@ -640,6 +664,12 @@ class ArrayScopeListTest < ActiveSupport::TestCase
|
|
640
664
|
assert_equal 2, ArrayScopeListMixin.find(4).pos
|
641
665
|
end
|
642
666
|
|
667
|
+
def test_destroy_all
|
668
|
+
assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(conditions).map(&:id)
|
669
|
+
ArrayScopeListMixin.destroy_all
|
670
|
+
assert_equal [], ArrayScopeListMixin.where(conditions).map(&:id)
|
671
|
+
end
|
672
|
+
|
643
673
|
def test_remove_from_list_by_updating_scope_part_1_should_shift_lower_items
|
644
674
|
assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(conditions).map(&:id)
|
645
675
|
|
metadata
CHANGED
@@ -1,151 +1,114 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: sortifiable
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 4
|
10
|
-
version: 0.2.4
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Andrew White
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2011-06-18 00:00:00 +01:00
|
12
|
+
date: 2011-09-11 00:00:00.000000000 +01:00
|
19
13
|
default_executable:
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: activesupport
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &2161594080 !ruby/object:Gem::Requirement
|
25
18
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 3
|
32
|
-
- 0
|
33
|
-
version: "3.0"
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.0'
|
34
23
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: activerecord
|
38
24
|
prerelease: false
|
39
|
-
|
25
|
+
version_requirements: *2161594080
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: activerecord
|
28
|
+
requirement: &2161593620 !ruby/object:Gem::Requirement
|
40
29
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 3
|
47
|
-
- 0
|
48
|
-
version: "3.0"
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
49
34
|
type: :runtime
|
50
|
-
version_requirements: *id002
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: bundler
|
53
35
|
prerelease: false
|
54
|
-
|
36
|
+
version_requirements: *2161593620
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: bundler
|
39
|
+
requirement: &2161593160 !ruby/object:Gem::Requirement
|
55
40
|
none: false
|
56
|
-
requirements:
|
57
|
-
- -
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
|
60
|
-
segments:
|
61
|
-
- 1
|
62
|
-
- 0
|
63
|
-
- 10
|
64
|
-
version: 1.0.10
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.0.18
|
65
45
|
type: :development
|
66
|
-
version_requirements: *id003
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: mysql
|
69
46
|
prerelease: false
|
70
|
-
|
47
|
+
version_requirements: *2161593160
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: mysql
|
50
|
+
requirement: &2161592700 !ruby/object:Gem::Requirement
|
71
51
|
none: false
|
72
|
-
requirements:
|
52
|
+
requirements:
|
73
53
|
- - ~>
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
hash: 45
|
76
|
-
segments:
|
77
|
-
- 2
|
78
|
-
- 8
|
79
|
-
- 1
|
54
|
+
- !ruby/object:Gem::Version
|
80
55
|
version: 2.8.1
|
81
56
|
type: :development
|
82
|
-
version_requirements: *id004
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: mysql2
|
85
57
|
prerelease: false
|
86
|
-
|
58
|
+
version_requirements: *2161592700
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: mysql2
|
61
|
+
requirement: &2161592240 !ruby/object:Gem::Requirement
|
87
62
|
none: false
|
88
|
-
requirements:
|
89
|
-
- -
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
hash: 25
|
92
|
-
segments:
|
93
|
-
- 0
|
94
|
-
- 2
|
95
|
-
- 7
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
96
66
|
version: 0.2.7
|
97
67
|
type: :development
|
98
|
-
version_requirements: *id005
|
99
|
-
- !ruby/object:Gem::Dependency
|
100
|
-
name: pg
|
101
68
|
prerelease: false
|
102
|
-
|
69
|
+
version_requirements: *2161592240
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: pg
|
72
|
+
requirement: &2161591780 !ruby/object:Gem::Requirement
|
103
73
|
none: false
|
104
|
-
requirements:
|
105
|
-
- -
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
hash: 59
|
108
|
-
segments:
|
109
|
-
- 0
|
110
|
-
- 9
|
111
|
-
- 0
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
112
77
|
version: 0.9.0
|
113
78
|
type: :development
|
114
|
-
version_requirements: *id006
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: sqlite3
|
117
79
|
prerelease: false
|
118
|
-
|
80
|
+
version_requirements: *2161591780
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: sqlite3
|
83
|
+
requirement: &2161591320 !ruby/object:Gem::Requirement
|
119
84
|
none: false
|
120
|
-
requirements:
|
121
|
-
- -
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
hash: 29
|
124
|
-
segments:
|
125
|
-
- 1
|
126
|
-
- 3
|
127
|
-
- 3
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
128
88
|
version: 1.3.3
|
129
89
|
type: :development
|
130
|
-
|
131
|
-
|
132
|
-
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *2161591320
|
92
|
+
description: ! 'This gem provides an acts_as_list compatible capability for sorting
|
93
|
+
|
133
94
|
and reordering a number of objects in a list. The class that has this
|
95
|
+
|
134
96
|
specified needs to have a +position+ column defined as an integer on
|
97
|
+
|
135
98
|
the mapped database table.
|
136
|
-
|
99
|
+
|
100
|
+
|
137
101
|
This gem requires ActiveRecord 3.0 as it has been refactored to use
|
102
|
+
|
138
103
|
the scope methods and query interface introduced with Ruby on Rails 3.0
|
139
104
|
|
140
|
-
|
105
|
+
'
|
106
|
+
email:
|
141
107
|
- andyw@pixeltrix.co.uk
|
142
108
|
executables: []
|
143
|
-
|
144
109
|
extensions: []
|
145
|
-
|
146
110
|
extra_rdoc_files: []
|
147
|
-
|
148
|
-
files:
|
111
|
+
files:
|
149
112
|
- .gemtest
|
150
113
|
- CHANGELOG
|
151
114
|
- LICENSE
|
@@ -158,36 +121,27 @@ files:
|
|
158
121
|
has_rdoc: true
|
159
122
|
homepage: http://github.com/pixeltrix/sortifiable/
|
160
123
|
licenses: []
|
161
|
-
|
162
124
|
post_install_message:
|
163
125
|
rdoc_options: []
|
164
|
-
|
165
|
-
require_paths:
|
126
|
+
require_paths:
|
166
127
|
- lib
|
167
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
129
|
none: false
|
169
|
-
requirements:
|
170
|
-
- -
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
|
173
|
-
|
174
|
-
- 0
|
175
|
-
version: "0"
|
176
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
135
|
none: false
|
178
|
-
requirements:
|
179
|
-
- -
|
180
|
-
- !ruby/object:Gem::Version
|
181
|
-
|
182
|
-
segments:
|
183
|
-
- 0
|
184
|
-
version: "0"
|
136
|
+
requirements:
|
137
|
+
- - ! '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
185
140
|
requirements: []
|
186
|
-
|
187
141
|
rubyforge_project:
|
188
|
-
rubygems_version: 1.
|
142
|
+
rubygems_version: 1.6.2
|
189
143
|
signing_key:
|
190
144
|
specification_version: 3
|
191
145
|
summary: Sort your models
|
192
|
-
test_files:
|
146
|
+
test_files:
|
193
147
|
- test/sortifiable_test.rb
|