mongoid-list 0.1.4 → 0.1.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.
@@ -7,18 +7,9 @@ module Mongoid
|
|
7
7
|
class << self
|
8
8
|
|
9
9
|
def update_positions!(klass, elements)
|
10
|
-
|
11
|
-
klass.collection.update({ _id: element.id }, { '$set' => { position: (idx + 1) } })
|
12
|
-
end
|
13
|
-
# return false if elements.size < klass.count
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def load_list_elements(klass, elements)
|
19
|
-
elements.collect do |element|
|
10
|
+
elements.each_with_index do |element, idx|
|
20
11
|
id = element.kind_of?(Hash) ? element['id'] : element
|
21
|
-
klass.
|
12
|
+
klass.collection.update({ _id: id }, { '$set' => { position: (idx + 1) } })
|
22
13
|
end
|
23
14
|
end
|
24
15
|
|
@@ -8,9 +8,9 @@ module Mongoid
|
|
8
8
|
|
9
9
|
def update_positions!(binding, elements)
|
10
10
|
load_list_elements(binding, elements).each_with_index do |element, idx|
|
11
|
-
binding.base.collection.update(
|
12
|
-
|
13
|
-
{ "$set" => { "#{
|
11
|
+
(binding.base._parent || binding.base).collection.update(
|
12
|
+
element.atomic_selector,
|
13
|
+
{ "$set" => { "#{element.atomic_path}.$.position" => (idx+1) } }
|
14
14
|
)
|
15
15
|
end
|
16
16
|
end
|
@@ -30,9 +30,9 @@ module Mongoid
|
|
30
30
|
def update_positions!
|
31
31
|
items.each do |item|
|
32
32
|
next unless should_operate_on_item?(item)
|
33
|
-
criteria =
|
34
|
-
updates = { '$inc' => { "#{
|
35
|
-
|
33
|
+
criteria = item.atomic_selector
|
34
|
+
updates = { '$inc' => { "#{item.atomic_path}.$.position" => changes[:by] } }
|
35
|
+
item._parent.class.collection.update(criteria, updates)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
data/lib/mongoid/list/version.rb
CHANGED
data/test/mongoid/list_test.rb
CHANGED
@@ -282,10 +282,14 @@ describe Mongoid::List do
|
|
282
282
|
assert_equal 1, @container.items.find(@list1.id).position
|
283
283
|
end
|
284
284
|
|
285
|
-
should "have moved
|
285
|
+
should "have moved @list3 up to :position 2" do
|
286
286
|
assert_equal 2, @container.items.find(@list3.id).position
|
287
|
+
end
|
288
|
+
|
289
|
+
should "have moved @list4 up to :position 3" do
|
287
290
|
assert_equal 3, @container.items.find(@list4.id).position
|
288
291
|
end
|
292
|
+
|
289
293
|
end
|
290
294
|
|
291
295
|
context "removing from the 4th and last position" do
|
@@ -734,8 +738,64 @@ describe Mongoid::List do
|
|
734
738
|
assert_equal 2, @obj1.reload.position
|
735
739
|
end
|
736
740
|
|
741
|
+
should "change @obj2 from :position of 2 to 1" do
|
742
|
+
assert_equal 2, @obj2.position
|
743
|
+
assert_equal 1, @obj2.reload.position
|
744
|
+
end
|
745
|
+
|
746
|
+
should "change @obj3 from :position of 3 to 4" do
|
747
|
+
assert_equal 3, @obj3.position
|
748
|
+
assert_equal 4, @obj3.reload.position
|
749
|
+
end
|
750
|
+
|
751
|
+
should "change @obj4 from :position of 4 to 3" do
|
752
|
+
assert_equal 4, @obj4.position
|
753
|
+
assert_equal 3, @obj4.reload.position
|
754
|
+
end
|
755
|
+
|
756
|
+
end
|
757
|
+
|
758
|
+
context "on a Deeply Embedded Collection" do
|
759
|
+
|
760
|
+
let :root do
|
761
|
+
Container.create!
|
762
|
+
end
|
763
|
+
|
764
|
+
let :embedded do
|
765
|
+
root.items.create!
|
766
|
+
end
|
767
|
+
|
768
|
+
setup do
|
769
|
+
@obj1 = embedded.items.create!
|
770
|
+
@obj2 = embedded.items.create!
|
771
|
+
@obj3 = embedded.items.create!
|
772
|
+
@obj4 = embedded.items.create!
|
773
|
+
embedded.items.update_positions_in_list!([ @obj3.id, @obj4.id, @obj1.id, @obj2.id ])
|
774
|
+
end
|
775
|
+
|
776
|
+
should "change @obj1 from :position of 1 to 3" do
|
777
|
+
assert_equal 1, @obj1.position
|
778
|
+
assert_equal 3, @obj1.reload.position
|
779
|
+
end
|
780
|
+
|
781
|
+
should "change @obj2 from :position of 2 to 4" do
|
782
|
+
assert_equal 2, @obj2.position
|
783
|
+
assert_equal 4, @obj2.reload.position
|
784
|
+
end
|
785
|
+
|
786
|
+
should "change @obj3 from :position of 3 to 1" do
|
787
|
+
assert_equal 3, @obj3.position
|
788
|
+
assert_equal 1, @obj3.reload.position
|
789
|
+
end
|
790
|
+
|
791
|
+
should "change @obj4 from :position of 4 to 2" do
|
792
|
+
assert_equal 4, @obj4.position
|
793
|
+
assert_equal 2, @obj4.reload.position
|
794
|
+
end
|
795
|
+
|
737
796
|
end
|
738
797
|
|
739
798
|
end
|
740
799
|
|
800
|
+
|
741
801
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-10-28 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &2153462200 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2153462200
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bson_ext
|
27
|
-
requirement: &
|
27
|
+
requirement: &2153461780 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2153461780
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitest
|
38
|
-
requirement: &
|
38
|
+
requirement: &2153461200 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.7.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2153461200
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mini_shoulda
|
49
|
-
requirement: &
|
49
|
+
requirement: &2153460680 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.4.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2153460680
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: spork
|
60
|
-
requirement: &
|
60
|
+
requirement: &2153460200 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.9.0.rc
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2153460200
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: spork-testunit
|
71
|
-
requirement: &
|
71
|
+
requirement: &2153459720 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.0.6
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2153459720
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: guard-minitest
|
82
|
-
requirement: &
|
82
|
+
requirement: &2153459240 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 0.4.0
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2153459240
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: guard-spork
|
93
|
-
requirement: &
|
93
|
+
requirement: &2153458760 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.3.1
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2153458760
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: turn
|
104
|
-
requirement: &
|
104
|
+
requirement: &2153458280 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: 0.8.3
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2153458280
|
113
113
|
description:
|
114
114
|
email: dave@davekrupinski.com
|
115
115
|
executables: []
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- test/mongoid/list_test.rb
|
137
137
|
- test/support/models/container.rb
|
138
138
|
- test/support/models/embedded.rb
|
139
|
+
- test/support/models/embedded_deeply.rb
|
139
140
|
- test/support/models/scoped.rb
|
140
141
|
- test/support/models/scoped_embedded.rb
|
141
142
|
- test/support/models/simple.rb
|
@@ -170,6 +171,7 @@ test_files:
|
|
170
171
|
- test/mongoid/list_test.rb
|
171
172
|
- test/support/models/container.rb
|
172
173
|
- test/support/models/embedded.rb
|
174
|
+
- test/support/models/embedded_deeply.rb
|
173
175
|
- test/support/models/scoped.rb
|
174
176
|
- test/support/models/scoped_embedded.rb
|
175
177
|
- test/support/models/simple.rb
|