acts_as_list_mongoid 0.2.0 → 0.2.1
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/{spec/spec.opts → .rspec} +0 -0
- data/Gemfile +4 -0
- data/README.markdown +1 -1
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/acts_as_list_mongoid.gemspec +13 -9
- data/lib/mongoid/acts_as_list.rb +8 -7
- data/model/referenced_category.rb +17 -0
- data/spec/acts_as_list/embedded_item_spec.rb +13 -1
- data/spec/acts_as_list/referenced_category_spec.rb +177 -0
- data/spec/spec_helper.rb +1 -0
- metadata +13 -8
data/{spec/spec.opts → .rspec}
RENAMED
File without changes
|
data/Gemfile
ADDED
data/README.markdown
CHANGED
data/Rakefile
CHANGED
@@ -11,8 +11,8 @@ begin
|
|
11
11
|
gem.email = "kmandrup@gmail.com"
|
12
12
|
gem.homepage = "http://github.com/rails/acts_as_list"
|
13
13
|
gem.authors = ["Kristian Mandrup"]
|
14
|
-
gem.add_dependency "mongoid", ">= 2.0.0.
|
15
|
-
gem.add_dependency "mongoid_embedded_helper", ">= 0.2.
|
14
|
+
gem.add_dependency "mongoid", ">= 2.0.0.beta.14"
|
15
|
+
gem.add_dependency "mongoid_embedded_helper", ">= 0.2.5"
|
16
16
|
# gem.add_development_dependency "yard"
|
17
17
|
end
|
18
18
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{acts_as_list_mongoid}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-08}
|
13
13
|
s.description = %q{Make your Mongoid model acts as a list. This acts_as extension provides the capabilities for sorting and reordering a number of objects in a list.
|
14
14
|
The instances that take part in the list should have a +position+ field of type Integer.}
|
15
15
|
s.email = %q{kmandrup@gmail.com}
|
@@ -19,6 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.files = [
|
20
20
|
".DS_Store",
|
21
21
|
".gitignore",
|
22
|
+
".rspec",
|
23
|
+
"Gemfile",
|
22
24
|
"README.markdown",
|
23
25
|
"Rakefile",
|
24
26
|
"VERSION",
|
@@ -30,9 +32,10 @@ Gem::Specification.new do |s|
|
|
30
32
|
"lib/init.rb",
|
31
33
|
"lib/mongoid/acts_as_list.rb",
|
32
34
|
"model/embedded_item.rb",
|
35
|
+
"model/referenced_category.rb",
|
33
36
|
"spec/.rspec",
|
34
37
|
"spec/acts_as_list/embedded_item_spec.rb",
|
35
|
-
"spec/
|
38
|
+
"spec/acts_as_list/referenced_category_spec.rb",
|
36
39
|
"spec/spec_helper.rb"
|
37
40
|
]
|
38
41
|
s.homepage = %q{http://github.com/rails/acts_as_list}
|
@@ -42,6 +45,7 @@ Gem::Specification.new do |s|
|
|
42
45
|
s.summary = %q{acts_as_list for Mongoid}
|
43
46
|
s.test_files = [
|
44
47
|
"spec/acts_as_list/embedded_item_spec.rb",
|
48
|
+
"spec/acts_as_list/referenced_category_spec.rb",
|
45
49
|
"spec/spec_helper.rb"
|
46
50
|
]
|
47
51
|
|
@@ -50,15 +54,15 @@ Gem::Specification.new do |s|
|
|
50
54
|
s.specification_version = 3
|
51
55
|
|
52
56
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
|
-
s.add_runtime_dependency(%q<mongoid>, [">= 2.0.0.
|
54
|
-
s.add_runtime_dependency(%q<mongoid_embedded_helper>, [">= 0.2.
|
57
|
+
s.add_runtime_dependency(%q<mongoid>, [">= 2.0.0.beta.14"])
|
58
|
+
s.add_runtime_dependency(%q<mongoid_embedded_helper>, [">= 0.2.5"])
|
55
59
|
else
|
56
|
-
s.add_dependency(%q<mongoid>, [">= 2.0.0.
|
57
|
-
s.add_dependency(%q<mongoid_embedded_helper>, [">= 0.2.
|
60
|
+
s.add_dependency(%q<mongoid>, [">= 2.0.0.beta.14"])
|
61
|
+
s.add_dependency(%q<mongoid_embedded_helper>, [">= 0.2.5"])
|
58
62
|
end
|
59
63
|
else
|
60
|
-
s.add_dependency(%q<mongoid>, [">= 2.0.0.
|
61
|
-
s.add_dependency(%q<mongoid_embedded_helper>, [">= 0.2.
|
64
|
+
s.add_dependency(%q<mongoid>, [">= 2.0.0.beta.14"])
|
65
|
+
s.add_dependency(%q<mongoid_embedded_helper>, [">= 0.2.5"])
|
62
66
|
end
|
63
67
|
end
|
64
68
|
|
data/lib/mongoid/acts_as_list.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "mongoid"
|
2
2
|
require 'mongoid_embedded_helper'
|
3
|
+
require 'mongoid_adjust'
|
3
4
|
|
4
5
|
module ActsAsList
|
5
6
|
module Mongoid
|
@@ -99,7 +100,7 @@ module ActsAsList
|
|
99
100
|
sub_collection = if embedded?
|
100
101
|
sub_collection.sort { |x,y| x.my_position <=> y.my_position }
|
101
102
|
else
|
102
|
-
sub_collection.order_by(
|
103
|
+
sub_collection.order_by(position_key.to_sym.asc)
|
103
104
|
end
|
104
105
|
|
105
106
|
if !extras.empty?
|
@@ -145,12 +146,12 @@ module ActsAsList
|
|
145
146
|
end
|
146
147
|
|
147
148
|
def move_below(object)
|
148
|
-
new_pos = (
|
149
|
+
new_pos = (self == object) ? self.my_position : ((object.my_position > self.my_position) ? object.my_position : object.my_position + 1)
|
149
150
|
move_to(new_pos)
|
150
151
|
end
|
151
152
|
|
152
153
|
def move_above(object)
|
153
|
-
new_pos = ( self == object
|
154
|
+
new_pos = ( self == object ) ? self.my_position : ((object.my_position > self.my_position) ? object.my_position - 1 : object.my_position)
|
154
155
|
move_to(new_pos)
|
155
156
|
end
|
156
157
|
|
@@ -340,7 +341,7 @@ module ActsAsList
|
|
340
341
|
end
|
341
342
|
|
342
343
|
def adjust_all! collection, number
|
343
|
-
collection.adjust!
|
344
|
+
collection.adjust!(position_key => number).each{|doc| doc.save}
|
344
345
|
end
|
345
346
|
|
346
347
|
def increase_all! collection
|
@@ -406,7 +407,7 @@ module ActsAsList
|
|
406
407
|
def []=(key, value)
|
407
408
|
if set_allowed?(key)
|
408
409
|
@attributes[key.to_s] = value
|
409
|
-
|
410
|
+
else
|
410
411
|
self.send("#{key}=", value)
|
411
412
|
end
|
412
413
|
save!
|
@@ -414,7 +415,7 @@ module ActsAsList
|
|
414
415
|
|
415
416
|
def ==(other)
|
416
417
|
return true if other.equal?(self)
|
417
|
-
return true if other.instance_of?(self.class) and other._id == self._id
|
418
|
+
return true if other.instance_of?(self.class) and other.respond_to?('_id') and other._id == self._id
|
418
419
|
false
|
419
420
|
end
|
420
421
|
|
@@ -429,4 +430,4 @@ class Array
|
|
429
430
|
def init_list!
|
430
431
|
each {|i| i.init_list_item! }
|
431
432
|
end
|
432
|
-
end
|
433
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Category
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Timestamps
|
4
|
+
include ActsAsList::Mongoid
|
5
|
+
|
6
|
+
field :number, :type => Integer
|
7
|
+
|
8
|
+
field :pos, :type => Integer
|
9
|
+
acts_as_list :column => :pos
|
10
|
+
|
11
|
+
references_many :categories
|
12
|
+
referenced_in :category
|
13
|
+
|
14
|
+
def scope_condition
|
15
|
+
{:category_id => category.id, :pos.ne => nil}
|
16
|
+
end
|
17
|
+
end
|
@@ -134,6 +134,18 @@ describe 'ActsAsList for Mongoid' do
|
|
134
134
|
get_positions(@list).should == [2, 1, 3, 4]
|
135
135
|
end
|
136
136
|
|
137
|
+
it "items[3].move_below(item[1]) should move item 3 to position 2" do
|
138
|
+
item1 = @list.items.where(:number => 1).first
|
139
|
+
@list.items.where(:number => 3).first.move_below(item1)
|
140
|
+
get_positions(@list).should == [1, 3, 2, 4]
|
141
|
+
end
|
142
|
+
|
143
|
+
it "items[3].move_above(item[2]) should move item 3 to position 2" do
|
144
|
+
item2 = @list.items.where(:number => 2).first
|
145
|
+
@list.items.where(:number => 3).first.move_above(item2)
|
146
|
+
get_positions(@list).should == [1, 3, 2, 4]
|
147
|
+
end
|
148
|
+
|
137
149
|
it "items[1].move_above(item[3]) should move item 1 to position 2" do
|
138
150
|
item3 = @list.items.where(:number => 3).first
|
139
151
|
@list.items.where(:number => 1).first.move_above(item3)
|
@@ -162,4 +174,4 @@ describe 'ActsAsList for Mongoid' do
|
|
162
174
|
end
|
163
175
|
end
|
164
176
|
end
|
165
|
-
end
|
177
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
require 'acts_as_list_mongoid'
|
4
|
+
require 'referenced_category'
|
5
|
+
|
6
|
+
describe 'ActsAsList for Mongoid' do
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
@category = Category.create!
|
10
|
+
@category.categories = []
|
11
|
+
(1..4).each do |counter|
|
12
|
+
@category.categories << Category.new(:number => counter)
|
13
|
+
end
|
14
|
+
@category.save!
|
15
|
+
|
16
|
+
@category.categories.init_list!
|
17
|
+
end
|
18
|
+
|
19
|
+
after :each do
|
20
|
+
Mongoid.database.collections.each do |coll|
|
21
|
+
coll.remove
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_positions category
|
26
|
+
category.reload.categories.sort { |x,y| x.my_position <=> y.my_position }.map(&:number)
|
27
|
+
end
|
28
|
+
|
29
|
+
context "4 category categories (1,2,3,4) that have parent_id pointing to first category container" do
|
30
|
+
describe '# initial configuration' do
|
31
|
+
it "should category categories 1 to 4 in order" do
|
32
|
+
positions = get_positions @category
|
33
|
+
positions.should == [1, 2, 3, 4]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#reordering' do
|
38
|
+
it "should move item 2 to position 3" do
|
39
|
+
@category.categories[1].increment_position
|
40
|
+
@category.categories[2].decrement_position
|
41
|
+
get_positions(@category).should == [1, 3, 2, 4]
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
it "should move item 2 to position 3 directly" do
|
46
|
+
Category.where(:number => 2).first.move_lower
|
47
|
+
get_positions(@category).should == [1, 3, 2, 4]
|
48
|
+
end
|
49
|
+
|
50
|
+
it "move :down should move item 2 to position 3" do
|
51
|
+
Category.where(:number => 2).first.move(:down)
|
52
|
+
get_positions(@category).should == [1, 3, 2, 4]
|
53
|
+
end
|
54
|
+
|
55
|
+
it "move :lower should move item 2 to position 3" do
|
56
|
+
Category.where(:number => 2).first.move(:lower)
|
57
|
+
get_positions(@category).should == [1, 3, 2, 4]
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should move item 2 to position 1" do
|
61
|
+
Category.where(:number => 2).first.move_higher
|
62
|
+
get_positions(@category).should == [2, 1, 3, 4]
|
63
|
+
end
|
64
|
+
|
65
|
+
it "move :up should move item 2 to position 1" do
|
66
|
+
Category.where(:number => 2).first.move(:up)
|
67
|
+
get_positions(@category).should == [2, 1, 3, 4]
|
68
|
+
end
|
69
|
+
|
70
|
+
it "move :higher should move item 2 to position 1" do
|
71
|
+
Category.where(:number => 2).first.move(:higher)
|
72
|
+
get_positions(@category).should == [2, 1, 3, 4]
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should move item 1 to bottom" do
|
76
|
+
Category.where(:number => 1).first.move_to_bottom
|
77
|
+
get_positions(@category).should == [2, 3, 4, 1]
|
78
|
+
end
|
79
|
+
|
80
|
+
it "move :lowest should move item 1 to bottom" do
|
81
|
+
Category.where(:number => 1).first.move(:lowest)
|
82
|
+
get_positions(@category).should == [2, 3, 4, 1]
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should move item 1 to top" do
|
86
|
+
Category.where(:number => 1).first.move_to_top
|
87
|
+
get_positions(@category).should == [1, 2, 3, 4]
|
88
|
+
end
|
89
|
+
|
90
|
+
it "move :highest should move item 1 to top" do
|
91
|
+
Category.where(:number => 1).first.move(:highest)
|
92
|
+
get_positions(@category).should == [1, 2, 3, 4]
|
93
|
+
end
|
94
|
+
|
95
|
+
it "move :unknown should cause argument error" do
|
96
|
+
lambda {Category.where(:number => 1).first.move(:unknown)}.should raise_error
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
it "should move item 2 to bottom" do
|
101
|
+
Category.where(:number => 2).first.move_to_bottom
|
102
|
+
get_positions(@category).should == [1, 3, 4, 2]
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should move item 4 to top" do
|
106
|
+
Category.where(:number => 4).first.move_to_top
|
107
|
+
get_positions(@category).should == [4, 1, 2, 3]
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should move item 3 to bottom" do
|
111
|
+
Category.where(:number => 3).first.move_to_bottom
|
112
|
+
get_positions(@category).should == [1, 2, 4, 3]
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
it "categories[2].move_to(4) should move item 2 to position 4" do
|
117
|
+
Category.where(:number => 2).first.move_to(4)
|
118
|
+
get_positions(@category).should == [1, 3, 4, 2]
|
119
|
+
end
|
120
|
+
|
121
|
+
it "categories[2].insert_at(3) should move item 2 to position 3" do
|
122
|
+
Category.where(:number => 2).first.insert_at(3)
|
123
|
+
get_positions(@category).should == [1, 3, 2, 4]
|
124
|
+
end
|
125
|
+
|
126
|
+
it "categories[2].move(:to => 3) should move item 2 to position 3" do
|
127
|
+
Category.where(:number => 2).first.move(:to => 3)
|
128
|
+
get_positions(@category).should == [1, 3, 2, 4]
|
129
|
+
end
|
130
|
+
|
131
|
+
it "categories[1].move_below(item[2]) should move item 1 to position 2" do
|
132
|
+
item2 = Category.where(:number => 2).first
|
133
|
+
Category.where(:number => 1).first.move_below(item2)
|
134
|
+
get_positions(@category).should == [2, 1, 3, 4]
|
135
|
+
end
|
136
|
+
|
137
|
+
it "categories[3].move_below(item[1]) should move item 3 to position 2" do
|
138
|
+
item1 = Category.where(:number => 1).first
|
139
|
+
Category.where(:number => 3).first.move_below(item1)
|
140
|
+
get_positions(@category).should == [1, 3, 2, 4]
|
141
|
+
end
|
142
|
+
|
143
|
+
it "categories[3].move_above(item[2]) should move item 3 to position 2" do
|
144
|
+
item2 = Category.where(:number => 2).first
|
145
|
+
Category.where(:number => 3).first.move_above(item2)
|
146
|
+
get_positions(@category).should == [1, 3, 2, 4]
|
147
|
+
end
|
148
|
+
|
149
|
+
it "categories[1].move_above(item[3]) should move item 1 to position 2" do
|
150
|
+
item3 = Category.where(:number => 3).first
|
151
|
+
Category.where(:number => 1).first.move_above(item3)
|
152
|
+
get_positions(@category).should == [2, 1, 3, 4]
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
describe 'relative position queries' do
|
158
|
+
it "should find item 2 to be lower item of item 1" do
|
159
|
+
expected = Category.where(:pos => 2).first
|
160
|
+
Category.where(:pos => 1).first.lower_item.should == expected
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should not find any item higher than nr 1" do
|
164
|
+
Category.where(:pos => 1).first.higher_item.should == nil
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should find item 3 to be higher item of item 4" do
|
168
|
+
expected = Category.where(:pos => 3).first
|
169
|
+
Category.where(:pos => 4).first.higher_item.should == expected
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should not find item lower than item 4" do
|
173
|
+
Category.where(:pos => 4).first.lower_item.should == nil
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 1
|
9
|
+
version: 0.2.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristian Mandrup
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-08-08 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -29,8 +29,9 @@ dependencies:
|
|
29
29
|
- 2
|
30
30
|
- 0
|
31
31
|
- 0
|
32
|
-
-
|
33
|
-
|
32
|
+
- beta
|
33
|
+
- 14
|
34
|
+
version: 2.0.0.beta.14
|
34
35
|
type: :runtime
|
35
36
|
version_requirements: *id001
|
36
37
|
- !ruby/object:Gem::Dependency
|
@@ -44,8 +45,8 @@ dependencies:
|
|
44
45
|
segments:
|
45
46
|
- 0
|
46
47
|
- 2
|
47
|
-
-
|
48
|
-
version: 0.2.
|
48
|
+
- 5
|
49
|
+
version: 0.2.5
|
49
50
|
type: :runtime
|
50
51
|
version_requirements: *id002
|
51
52
|
description: |-
|
@@ -61,6 +62,8 @@ extra_rdoc_files:
|
|
61
62
|
files:
|
62
63
|
- .DS_Store
|
63
64
|
- .gitignore
|
65
|
+
- .rspec
|
66
|
+
- Gemfile
|
64
67
|
- README.markdown
|
65
68
|
- Rakefile
|
66
69
|
- VERSION
|
@@ -72,9 +75,10 @@ files:
|
|
72
75
|
- lib/init.rb
|
73
76
|
- lib/mongoid/acts_as_list.rb
|
74
77
|
- model/embedded_item.rb
|
78
|
+
- model/referenced_category.rb
|
75
79
|
- spec/.rspec
|
76
80
|
- spec/acts_as_list/embedded_item_spec.rb
|
77
|
-
- spec/
|
81
|
+
- spec/acts_as_list/referenced_category_spec.rb
|
78
82
|
- spec/spec_helper.rb
|
79
83
|
has_rdoc: true
|
80
84
|
homepage: http://github.com/rails/acts_as_list
|
@@ -110,4 +114,5 @@ specification_version: 3
|
|
110
114
|
summary: acts_as_list for Mongoid
|
111
115
|
test_files:
|
112
116
|
- spec/acts_as_list/embedded_item_spec.rb
|
117
|
+
- spec/acts_as_list/referenced_category_spec.rb
|
113
118
|
- spec/spec_helper.rb
|