mongoid_acts_as_list 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.travis.yml +2 -0
- data/README.markdown +9 -13
- data/Rakefile +21 -1
- data/acts_as_list.gemspec +3 -1
- data/lib/mongoid/acts_as_list/list.rb +32 -6
- data/lib/mongoid/acts_as_list/list/embedded.rb +33 -31
- data/lib/mongoid/acts_as_list/list/root.rb +4 -0
- data/lib/mongoid/acts_as_list/version.rb +1 -1
- data/lib/mongoid_acts_as_list.rb +23 -0
- data/spec/acts_as_list/embeds_many_recursively_spec.rb +58 -0
- data/spec/acts_as_list/embeds_many_spec.rb +5 -9
- data/spec/acts_as_list/relational_spec.rb +7 -21
- data/spec/fixtures/embeds_many_recursively_models.rb +16 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/list_examples.rb +98 -96
- metadata +37 -12
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/README.markdown
CHANGED
@@ -5,6 +5,8 @@ ActsAsList for Mongoid
|
|
5
5
|
|
6
6
|
Mongoid::ActsAsList provides the ability of ordering and sorting a number of objects in a list using Mongoid as an ODM.
|
7
7
|
|
8
|
+
[![Build Status](https://secure.travis-ci.org/olivoil/mongoid_acts_as_list.png)](http://travis-ci.org/olivoil/mongoid_acts_as_list)
|
9
|
+
[![Dependency Status](https://gemnasium.com/olivoil/mongoid_acts_as_list.png)](https://gemnasium.com/olivoil/mongoid_acts_as_list)
|
8
10
|
|
9
11
|
## Install
|
10
12
|
|
@@ -17,7 +19,7 @@ gem 'mongoid_acts_as_list', '~> 0.0.3'
|
|
17
19
|
Then run `bundle install`
|
18
20
|
|
19
21
|
|
20
|
-
##
|
22
|
+
## Configure
|
21
23
|
|
22
24
|
Configure defaults values used by ActsAsList:
|
23
25
|
|
@@ -35,7 +37,7 @@ end
|
|
35
37
|
|
36
38
|
Make sure it is loaded before calling ` acts_as_list `. You can place this code in an initializer file for example.
|
37
39
|
|
38
|
-
##
|
40
|
+
## Use
|
39
41
|
|
40
42
|
Activate ActsAsList in your models.
|
41
43
|
|
@@ -75,6 +77,10 @@ class Item
|
|
75
77
|
end
|
76
78
|
```
|
77
79
|
|
80
|
+
The public API is composed of the following methods.
|
81
|
+
All of the API from the original ActiveRecord ActsAsList gem is also available.
|
82
|
+
Check the source and [documentation](http://rubydoc.info/github/olivoil/mongoid_acts_as_list/master/frames) to find out more!
|
83
|
+
|
78
84
|
|
79
85
|
``` ruby
|
80
86
|
## Class Methods
|
@@ -83,7 +89,7 @@ list.items.order_by_position #=> returns all items in `list` ordered by position
|
|
83
89
|
|
84
90
|
## Instance Methods
|
85
91
|
|
86
|
-
item.move to: 2 #=> moves item to
|
92
|
+
item.move to: 2 #=> moves item to position number 2
|
87
93
|
item.move to: :start #=> moves item to the first position in the list
|
88
94
|
item.move to: :end #=> moves item to the last position in the list
|
89
95
|
item.move before: other_item #=> moves item before other_item
|
@@ -104,8 +110,6 @@ item.next_item #=> returns the item immediately following `item` i
|
|
104
110
|
item.previous_item #=> returns the item immediately preceding `item` in the list
|
105
111
|
```
|
106
112
|
|
107
|
-
Other methods are available, as well as all the methods from the original ActiveRecord ActsAsList gem.
|
108
|
-
Check the source and documentation to find out more!
|
109
113
|
|
110
114
|
|
111
115
|
## Requirements
|
@@ -113,10 +117,6 @@ Check the source and documentation to find out more!
|
|
113
117
|
Tested with Mongoid 2.4.6 on Ruby 1.9.3-p125, Rails 3.2.2, and Mongo 2.x
|
114
118
|
|
115
119
|
|
116
|
-
## Roadmap
|
117
|
-
|
118
|
-
* Test with several layers of embedding documents
|
119
|
-
|
120
120
|
|
121
121
|
## Contributing
|
122
122
|
|
@@ -125,10 +125,6 @@ Tested with Mongoid 2.4.6 on Ruby 1.9.3-p125, Rails 3.2.2, and Mongo 2.x
|
|
125
125
|
- Start writing tests
|
126
126
|
- Commit and push until all tests are green and you are happy with your contribution
|
127
127
|
|
128
|
-
- If you're using Vim, source the .vimrc.local file. It provides 2 shortcuts for running the specs:
|
129
|
-
- `<Leader>r` runs the current spec file
|
130
|
-
- `<Leader>R` runs all spec files
|
131
|
-
|
132
128
|
## Copyright
|
133
129
|
|
134
130
|
Copyright (c) 2012 Olivier Melcher, released under the MIT license
|
data/Rakefile
CHANGED
@@ -1 +1,21 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'rdoc/task'
|
4
|
+
|
5
|
+
desc 'Default: run specs.'
|
6
|
+
task :default => :spec
|
7
|
+
|
8
|
+
desc "Run specs"
|
9
|
+
RSpec::Core::RakeTask.new do |t|
|
10
|
+
t.pattern = "./spec/**/*_spec.rb"
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Open an irb session preloaded with this library"
|
14
|
+
task :irb do
|
15
|
+
sh "irb -rubygems -r ./lib/#{name}.rb"
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Open an pry session preloaded with this library"
|
19
|
+
task :pry do
|
20
|
+
sh "pry -r ./lib/#{name}.rb"
|
21
|
+
end
|
data/acts_as_list.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Mongoid::ActsAsList::VERSION
|
8
8
|
s.authors = ["Olivier Melcher"]
|
9
9
|
s.email = ["olivier.melcher@gmail.com"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "https://github.com/olivoil/mongoid_acts_as_list"
|
11
11
|
s.summary = %q{Implementation of the acts as list gem for Mongoid}
|
12
12
|
s.description = %q{}
|
13
13
|
|
@@ -20,6 +20,8 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
# specify any dependencies here; for example:
|
22
22
|
s.add_development_dependency "rspec"
|
23
|
+
s.add_development_dependency "rake"
|
24
|
+
s.add_development_dependency "simplecov"
|
23
25
|
s.add_development_dependency "bson_ext", "~> 1.5"
|
24
26
|
s.add_development_dependency "database_cleaner"
|
25
27
|
s.add_development_dependency "pry"
|
@@ -47,7 +47,8 @@ module Mongoid::ActsAsList
|
|
47
47
|
|
48
48
|
# Public: Moves the item to new position in the list
|
49
49
|
#
|
50
|
-
# where - a
|
50
|
+
# where - a Symbol in [:forward, :lower, :backward, :higher]
|
51
|
+
# or Hash specifying where to move the item:
|
51
52
|
# :to - an Integer representing a position number
|
52
53
|
# or a Symbol from the list :start, :top, :end, :bottom
|
53
54
|
# :before, :above - another object in the list
|
@@ -57,7 +58,6 @@ module Mongoid::ActsAsList
|
|
57
58
|
# :backward, :higher - an Integer specify by how much to move the item forward.
|
58
59
|
# will stop moving the item when it reaches the end of the list
|
59
60
|
#
|
60
|
-
# or a Symbol in :forward, :lower, :backward, :higher
|
61
61
|
#
|
62
62
|
# Examples
|
63
63
|
#
|
@@ -97,6 +97,10 @@ module Mongoid::ActsAsList
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
+
# Public: Moves the item to another position
|
101
|
+
#
|
102
|
+
# destination - a Symbol among :start, :end, :top, :bottom
|
103
|
+
# or an Integer indicating the new position number to move the item to
|
100
104
|
def move_to(destination)
|
101
105
|
if destination.is_a? Symbol
|
102
106
|
send("move_to_#{destination}")
|
@@ -106,29 +110,40 @@ module Mongoid::ActsAsList
|
|
106
110
|
end
|
107
111
|
end
|
108
112
|
|
113
|
+
# Public: Moves the item to the end of the list
|
109
114
|
def move_to_end
|
110
115
|
new_position = in_list? ? last_position_in_list : next_available_position_in_list
|
111
116
|
insert_at new_position
|
112
117
|
end
|
113
118
|
alias_method :move_to_bottom, :move_to_end
|
114
119
|
|
120
|
+
# Public: Moves the item to the start of the list
|
115
121
|
def move_to_start
|
116
122
|
insert_at start_position_in_list
|
117
123
|
end
|
118
124
|
alias_method :move_to_top, :move_to_start
|
119
125
|
|
126
|
+
# Public: Moves the item closer to the end of the list
|
127
|
+
#
|
128
|
+
# by_how_much - The number of position to move the item by (default: 1)
|
120
129
|
def move_forwards by_how_much = 1
|
121
130
|
move_to(self[position_field] + by_how_much) unless last?
|
122
131
|
end
|
123
132
|
alias_method :move_lower , :move_forwards
|
124
133
|
alias_method :move_forward, :move_forwards
|
125
134
|
|
135
|
+
# Public: Moves the item closer to the start of the list
|
136
|
+
#
|
137
|
+
# by_how_much - The number of position to move the item by (default: 1)
|
126
138
|
def move_backwards by_how_much = 1
|
127
139
|
move_to(self[position_field] - by_how_much) unless first?
|
128
140
|
end
|
129
141
|
alias_method :move_higher , :move_backwards
|
130
142
|
alias_method :move_forward, :move_forwards
|
131
143
|
|
144
|
+
# Public: Moves the item before another one in the list
|
145
|
+
#
|
146
|
+
# other_item - another item of the list
|
132
147
|
def move_before(other_item)
|
133
148
|
destination = other_item[position_field]
|
134
149
|
origin = self[position_field]
|
@@ -141,6 +156,9 @@ module Mongoid::ActsAsList
|
|
141
156
|
end
|
142
157
|
alias_method :move_above, :move_before
|
143
158
|
|
159
|
+
# Public: Moves the item after another one in the list
|
160
|
+
#
|
161
|
+
# other_item - another item of the list
|
144
162
|
def move_after(other_item)
|
145
163
|
destination = other_item[position_field]
|
146
164
|
origin = self[position_field]
|
@@ -210,18 +228,18 @@ module Mongoid::ActsAsList
|
|
210
228
|
end
|
211
229
|
alias_method :lower_item, :previous_item
|
212
230
|
|
213
|
-
|
231
|
+
private
|
232
|
+
|
233
|
+
# Internal: Insert at a given position in the list
|
214
234
|
#
|
215
235
|
# new_position - an Integer indicating the position to insert the item at
|
216
236
|
#
|
217
|
-
# Returns
|
237
|
+
# Returns true if the element's position was updated, false if not
|
218
238
|
def insert_at(new_position)
|
219
239
|
insert_space_at(new_position)
|
220
240
|
update_attribute(position_field, new_position)
|
221
241
|
end
|
222
242
|
|
223
|
-
private
|
224
|
-
|
225
243
|
# Internal: Make space in the list at a given position number
|
226
244
|
# used when moving a item to a new position in the list.
|
227
245
|
#
|
@@ -239,6 +257,14 @@ module Mongoid::ActsAsList
|
|
239
257
|
end
|
240
258
|
end
|
241
259
|
|
260
|
+
# Internal: get items of the list between two positions
|
261
|
+
#
|
262
|
+
# from - an Integer representing the first position number in the range
|
263
|
+
# to - an Integer representing the last position number in the range
|
264
|
+
# options - an Hash of options
|
265
|
+
# :strict - a Boolean indicating if the range is inclusing (false) or exclusive (true) (default: true)
|
266
|
+
#
|
267
|
+
# Returns a Mongoid::Criteria containing the items between the range
|
242
268
|
def items_between(from, to, options = {})
|
243
269
|
strict = options.fetch(:strict, true)
|
244
270
|
if strict
|
@@ -1,47 +1,49 @@
|
|
1
1
|
module Mongoid::ActsAsList
|
2
|
-
module List
|
3
|
-
extend ActiveSupport::Concern
|
2
|
+
module List
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
# Internal: Private methods used specifically for embedded collections
|
5
|
+
#
|
6
|
+
# Gets included when calling List.acts_as_list in an embedded document
|
7
|
+
module Embedded
|
8
|
+
extend ActiveSupport::Concern
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
included do
|
11
|
+
raise List::ScopeMissingError, "Mongoid::ActsAsList::Embedded can only be included in embedded documents" unless embedded?
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
private
|
11
16
|
|
12
|
-
|
13
|
-
|
17
|
+
def define_position_scope(scope_name)
|
18
|
+
define_method(:scope_condition) { {position_field.ne => nil} }
|
19
|
+
end
|
14
20
|
end
|
15
|
-
end
|
16
21
|
|
17
|
-
|
18
|
-
|
22
|
+
## InstanceMethods
|
23
|
+
private
|
19
24
|
|
20
|
-
|
21
|
-
|
22
|
-
|
25
|
+
def shift_position options = {}
|
26
|
+
criteria = options.fetch(:for, to_criteria)
|
27
|
+
by_how_much = options.fetch(:by, 1)
|
23
28
|
|
24
|
-
|
29
|
+
criteria = criteria.to_criteria if criteria.is_a? self.class
|
25
30
|
|
26
|
-
|
27
|
-
|
31
|
+
criteria.each do |doc|
|
32
|
+
doc.inc(position_field, by_how_much)
|
33
|
+
end
|
28
34
|
end
|
29
|
-
end
|
30
35
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
def items_in_list
|
36
|
-
embedded_collection.where(scope_condition)
|
37
|
-
end
|
36
|
+
def to_criteria
|
37
|
+
embedded_collection.where(_id: _id)
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
def items_in_list
|
41
|
+
embedded_collection.where(scope_condition)
|
42
|
+
end
|
42
43
|
|
43
|
-
|
44
|
-
|
44
|
+
def embedded_collection
|
45
|
+
_parent.send(metadata.name)
|
46
|
+
end
|
45
47
|
end
|
46
48
|
end
|
47
49
|
end
|
data/lib/mongoid_acts_as_list.rb
CHANGED
@@ -5,8 +5,31 @@ require_relative 'mongoid/acts_as_list/version'
|
|
5
5
|
module Mongoid
|
6
6
|
module ActsAsList
|
7
7
|
class << self
|
8
|
+
|
9
|
+
# Public: the configuration object used by Mongoid::ActsAsList
|
10
|
+
#
|
11
|
+
# Examples
|
12
|
+
#
|
13
|
+
# Mongoid::ActsAsList.configuration.default_position_field
|
14
|
+
# #=> :position
|
15
|
+
#
|
16
|
+
# Returns the configuration object
|
8
17
|
attr_accessor :configuration
|
9
18
|
|
19
|
+
# Public: set the configuration options for Mongoid::ActsAsList
|
20
|
+
#
|
21
|
+
# yields the configuration object
|
22
|
+
#
|
23
|
+
# Examples
|
24
|
+
#
|
25
|
+
# Mongoid::ActsAsList.configure do |config|
|
26
|
+
# # These are the default options.
|
27
|
+
# # Modify as you see fit:
|
28
|
+
# config.default_position_field = :position
|
29
|
+
# config.start_list_at = 0
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# Returns the configuration object
|
10
33
|
def configure
|
11
34
|
self.configuration ||= Configuration.new
|
12
35
|
yield(configuration) if block_given?
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongoid::ActsAsList::List do
|
4
|
+
[:position, :number].each do |default_field_name|
|
5
|
+
let(:position_field) { default_field_name }
|
6
|
+
|
7
|
+
before do
|
8
|
+
Mongoid::ActsAsList.configure do |config|
|
9
|
+
config.default_position_field = position_field
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'fixtures/embeds_many_recursively_models'
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Mongoid::ActsAsList::List::Embedded do
|
16
|
+
it_behaves_like 'a list' do
|
17
|
+
let(:category) { Category.create! }
|
18
|
+
|
19
|
+
before do
|
20
|
+
3.times do |n|
|
21
|
+
item = category.items.create! position_field => n
|
22
|
+
3.times do |x|
|
23
|
+
item.child_items.create! position_field => x
|
24
|
+
end
|
25
|
+
item.should have(3).child_items
|
26
|
+
end
|
27
|
+
category.should have(3).items
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
require 'delegate'
|
32
|
+
|
33
|
+
it_behaves_like 'a list' do
|
34
|
+
let(:category) do
|
35
|
+
cat = Category.create!
|
36
|
+
|
37
|
+
item = cat.items.create!
|
38
|
+
|
39
|
+
3.times do |n|
|
40
|
+
item.child_items.create! position_field => n
|
41
|
+
end
|
42
|
+
|
43
|
+
class SubItemAsCategory < SimpleDelegator
|
44
|
+
def items
|
45
|
+
__getobj__.child_items
|
46
|
+
end
|
47
|
+
def reload
|
48
|
+
__getobj__.reload
|
49
|
+
self
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
SubItemAsCategory.new(item)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -13,17 +13,13 @@ describe Mongoid::ActsAsList::List do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
describe Mongoid::ActsAsList::List::Embedded do
|
16
|
-
let(:
|
17
|
-
let(:category_2) { Category.create! }
|
18
|
-
let(:category_3) { Category.create! }
|
16
|
+
let(:category) { Category.create! }
|
19
17
|
|
20
18
|
before do
|
21
|
-
|
22
|
-
|
23
|
-
cat.items.create! position_field => n
|
24
|
-
end
|
25
|
-
cat.should have(3).items
|
19
|
+
3.times do |n|
|
20
|
+
category.items.create! position_field => n
|
26
21
|
end
|
22
|
+
category.should have(3).items
|
27
23
|
end
|
28
24
|
|
29
25
|
it "should be embedded" do
|
@@ -38,7 +34,7 @@ describe Mongoid::ActsAsList::List do
|
|
38
34
|
|
39
35
|
describe ".acts_as_list" do
|
40
36
|
it "defines #scope_condition" do
|
41
|
-
item =
|
37
|
+
item = category.items.first
|
42
38
|
item.scope_condition.should == {position_field.ne => nil}
|
43
39
|
end
|
44
40
|
end
|
@@ -14,25 +14,21 @@ describe Mongoid::ActsAsList::List do
|
|
14
14
|
|
15
15
|
|
16
16
|
describe Mongoid::ActsAsList::List::Root do
|
17
|
-
let(:
|
18
|
-
let(:category_2) { Category.create! }
|
19
|
-
let(:category_3) { Category.create! }
|
17
|
+
let(:category) { Category.create! }
|
20
18
|
|
21
19
|
before do
|
22
|
-
|
23
|
-
|
24
|
-
cat.items.create! position_field => n
|
25
|
-
end
|
26
|
-
cat.should have(3).items
|
20
|
+
3.times do |n|
|
21
|
+
category.items.create! position_field => n
|
27
22
|
end
|
23
|
+
category.should have(3).items
|
28
24
|
end
|
29
25
|
|
30
26
|
it_behaves_like 'a list'
|
31
27
|
|
32
28
|
describe ".acts_as_list" do
|
33
29
|
it "defines #scope_condition" do
|
34
|
-
item =
|
35
|
-
item.scope_condition.should == {:category_id =>
|
30
|
+
item = category.items.first
|
31
|
+
item.scope_condition.should == {:category_id => category.id}
|
36
32
|
end
|
37
33
|
|
38
34
|
it "raises a NoScope error if called without a scope option" do
|
@@ -44,17 +40,7 @@ describe Mongoid::ActsAsList::List do
|
|
44
40
|
|
45
41
|
describe ".order_by_position" do
|
46
42
|
it "works with a condition" do
|
47
|
-
RootItem.order_by_position(:category_id =>
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "Insert a new item to the list" do
|
52
|
-
it "scopes list to the relation" do
|
53
|
-
item_1 = category_1.items.create!
|
54
|
-
item_2 = category_2.items.create!
|
55
|
-
|
56
|
-
item_1[position_field].should == item_2[position_field]
|
57
|
-
item_2[position_field].should == 3
|
43
|
+
RootItem.order_by_position(:category_id => category.id).map(&position_field).should == [0,1,2]
|
58
44
|
end
|
59
45
|
end
|
60
46
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Category
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Timestamps
|
4
|
+
|
5
|
+
embeds_many :items
|
6
|
+
end
|
7
|
+
|
8
|
+
class Item
|
9
|
+
include Mongoid::Document
|
10
|
+
include Mongoid::Timestamps
|
11
|
+
include Mongoid::ActsAsList
|
12
|
+
|
13
|
+
embedded_in :category
|
14
|
+
recursively_embeds_many
|
15
|
+
acts_as_list
|
16
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
shared_examples_for "a list" do
|
2
|
+
|
2
3
|
describe ".acts_as_list" do
|
3
4
|
it "defines #position_field && .position_field" do
|
4
|
-
item =
|
5
|
+
item = category.items.first
|
5
6
|
item.position_field.should == position_field
|
6
7
|
item.class.position_field.should == position_field
|
7
8
|
end
|
@@ -9,19 +10,19 @@ shared_examples_for "a list" do
|
|
9
10
|
|
10
11
|
describe ".order_by_position" do
|
11
12
|
it "works without conditions" do
|
12
|
-
|
13
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
13
14
|
end
|
14
15
|
|
15
16
|
it "sorts by created_at if positions are equal" do
|
16
|
-
deuce =
|
17
|
-
items =
|
17
|
+
deuce = category.items.create! position_field => 1
|
18
|
+
items = category.items.order_by_position
|
18
19
|
items.map(&position_field).should == [0,1,1,2]
|
19
20
|
items[2].should == deuce
|
20
21
|
end
|
21
22
|
|
22
23
|
it "sorts in descending order if specified" do
|
23
|
-
deuce =
|
24
|
-
items =
|
24
|
+
deuce = category.items.create! position_field => 2, :created_at => Date.yesterday
|
25
|
+
items = category.items.order_by_position(:desc)
|
25
26
|
items.map(&position_field).should == [2,2,1,0]
|
26
27
|
items[1].should == deuce
|
27
28
|
end
|
@@ -29,7 +30,7 @@ shared_examples_for "a list" do
|
|
29
30
|
|
30
31
|
describe "Insert a new item to the list" do
|
31
32
|
it "inserts at the next available position for a given category" do
|
32
|
-
item =
|
33
|
+
item = category.items.create!
|
33
34
|
item[position_field].should == 3
|
34
35
|
end
|
35
36
|
end
|
@@ -37,67 +38,67 @@ shared_examples_for "a list" do
|
|
37
38
|
describe "Removing items" do
|
38
39
|
before do
|
39
40
|
3.times do
|
40
|
-
|
41
|
+
category.items.create!
|
41
42
|
end
|
42
|
-
|
43
|
+
category.reload.items.map(&position_field).should == [0,1,2,3,4,5]
|
43
44
|
end
|
44
45
|
|
45
46
|
describe " #destroy" do
|
46
47
|
it "reorders the positions in the list" do
|
47
|
-
item =
|
48
|
+
item = category.items.where(position_field => 3).first
|
48
49
|
item.destroy
|
49
50
|
|
50
|
-
items = item.embedded? ?
|
51
|
+
items = item.embedded? ? category.items : category.reload.items
|
51
52
|
items.map(&position_field).should == [0,1,2,3,4]
|
52
53
|
end
|
53
54
|
|
54
55
|
|
55
56
|
it "does not shift positions if the element was already removed from the list" do
|
56
|
-
item =
|
57
|
+
item = category.items.where(position_field => 2).first
|
57
58
|
item.remove_from_list
|
58
59
|
item.destroy
|
59
|
-
|
60
|
+
category.reload.items.map(&position_field).should == [0,1,2,3,4]
|
60
61
|
end
|
61
62
|
end
|
62
63
|
|
63
64
|
describe " #remove_from_list" do
|
64
65
|
it "sets position to nil" do
|
65
|
-
item =
|
66
|
+
item = category.items.where(position_field => 2).first
|
66
67
|
item.remove_from_list
|
67
68
|
item[position_field].should be_nil
|
68
69
|
end
|
69
70
|
|
70
71
|
it "is not in list anymore" do
|
71
|
-
item =
|
72
|
+
item = category.items.where(position_field => 3).first
|
72
73
|
item.remove_from_list
|
73
74
|
item.should_not be_in_list
|
74
75
|
end
|
75
76
|
|
76
77
|
it "reorders the positions in the list" do
|
77
|
-
|
78
|
-
|
78
|
+
category.items.where(position_field => 0).first.remove_from_list
|
79
|
+
category.reload.items.map(&position_field).compact.should == [0,1,2,3,4]
|
79
80
|
end
|
80
81
|
end
|
81
82
|
end
|
82
83
|
|
83
84
|
describe "#first?" do
|
84
85
|
it "returns true if item is the first of the list" do
|
85
|
-
|
86
|
+
category.items.order_by_position.first.should be_first
|
86
87
|
end
|
87
88
|
|
88
89
|
it "returns false if item is not the first of the list" do
|
89
|
-
all_but_first =
|
90
|
+
all_but_first = category.items.order_by_position.to_a[1..-1]
|
90
91
|
all_but_first.map(&:first?).uniq.should == [false]
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
94
95
|
describe "#last?" do
|
95
96
|
it "returns true if item is the last of the list" do
|
96
|
-
|
97
|
+
category.items.order_by_position.last.should be_last
|
97
98
|
end
|
98
99
|
|
99
100
|
it "returns false if item is not the last of the list" do
|
100
|
-
all_but_last =
|
101
|
+
all_but_last = category.items.order_by_position.to_a[0..-2]
|
101
102
|
all_but_last.map(&:last?).uniq.should == [false]
|
102
103
|
end
|
103
104
|
end
|
@@ -105,18 +106,18 @@ shared_examples_for "a list" do
|
|
105
106
|
%w[higher_item next_item].each do |method_name|
|
106
107
|
describe "##{method_name}" do
|
107
108
|
it "returns the next item in the list if there is one" do
|
108
|
-
item =
|
109
|
-
next_item =
|
109
|
+
item = category.items.where(position_field => 1).first
|
110
|
+
next_item = category.items.where(position_field => 2).first
|
110
111
|
item.send(method_name).should == next_item
|
111
112
|
end
|
112
113
|
|
113
114
|
it "returns nil if the item is already the last" do
|
114
|
-
item =
|
115
|
+
item = category.items.order_by_position.last
|
115
116
|
item.send(method_name).should be_nil
|
116
117
|
end
|
117
118
|
|
118
119
|
it "returns nil if the item is not in the list" do
|
119
|
-
item =
|
120
|
+
item = category.items.order_by_position.first
|
120
121
|
item.remove_from_list
|
121
122
|
item.send(method_name).should be_nil
|
122
123
|
end
|
@@ -126,18 +127,18 @@ shared_examples_for "a list" do
|
|
126
127
|
%w[lower_item previous_item].each do |method_name|
|
127
128
|
describe "##{method_name}" do
|
128
129
|
it "returns the previous item in the list if there is one" do
|
129
|
-
item =
|
130
|
-
previous_item =
|
130
|
+
item = category.items.where(position_field => 1).first
|
131
|
+
previous_item = category.items.where(position_field => 0).first
|
131
132
|
item.send(method_name).should == previous_item
|
132
133
|
end
|
133
134
|
|
134
135
|
it "returns nil if the item is already the first" do
|
135
|
-
item =
|
136
|
+
item = category.items.order_by_position.first
|
136
137
|
item.send(method_name).should be_nil
|
137
138
|
end
|
138
139
|
|
139
140
|
it "returns nil if the item is not in the list" do
|
140
|
-
item =
|
141
|
+
item = category.items.order_by_position.last
|
141
142
|
item.remove_from_list
|
142
143
|
item.send(method_name).should be_nil
|
143
144
|
end
|
@@ -146,59 +147,59 @@ shared_examples_for "a list" do
|
|
146
147
|
|
147
148
|
describe "#insert_at" do
|
148
149
|
context "to a lower position" do
|
149
|
-
let(:item) {
|
150
|
+
let(:item) { category.items.order_by_position.last }
|
150
151
|
|
151
152
|
it "changes the item's position" do
|
152
|
-
item.insert_at 1
|
153
|
+
item.send :insert_at, 1
|
153
154
|
item[position_field].should == 1
|
154
155
|
end
|
155
156
|
|
156
157
|
it "shuffles intermediary positions" do
|
157
|
-
positions =
|
158
|
+
positions = category.items.order_by_position.map(&position_field)
|
158
159
|
positions.should == [0,1,2]
|
159
|
-
item.insert_at 1
|
160
|
-
positions =
|
160
|
+
item.send :insert_at, 1
|
161
|
+
positions = category.items.order_by_position.map(&position_field)
|
161
162
|
positions.should == [0,1,2]
|
162
163
|
end
|
163
164
|
|
164
165
|
it "works for items that don't have a position yet" do
|
165
166
|
item.remove_from_list
|
166
|
-
item.insert_at 1
|
167
|
+
item.send :insert_at, 1
|
167
168
|
item[position_field].should == 1
|
168
169
|
end
|
169
170
|
end
|
170
171
|
|
171
172
|
context "to a higher position" do
|
172
|
-
let(:item) {
|
173
|
+
let(:item) { category.items.order_by_position.first }
|
173
174
|
|
174
175
|
it "changes the item's position" do
|
175
|
-
item.insert_at 2
|
176
|
+
item.send :insert_at, 2
|
176
177
|
item[position_field].should == 2
|
177
178
|
end
|
178
179
|
|
179
180
|
it "shuffles intermediary positions" do
|
180
|
-
positions =
|
181
|
+
positions = category.items.order_by_position.map(&position_field)
|
181
182
|
positions.should == [0,1,2]
|
182
|
-
item.insert_at 2
|
183
|
-
positions =
|
183
|
+
item.send :insert_at, 2
|
184
|
+
positions = category.items.order_by_position.map(&position_field)
|
184
185
|
positions.should == [0,1,2]
|
185
186
|
end
|
186
187
|
|
187
188
|
it "works for items that don't have a position yet" do
|
188
189
|
item.remove_from_list
|
189
|
-
item.insert_at 2
|
190
|
+
item.send :insert_at, 2
|
190
191
|
item[position_field].should == 2
|
191
192
|
end
|
192
193
|
end
|
193
194
|
|
194
195
|
context "to the same position" do
|
195
196
|
it "does nothing" do
|
196
|
-
item =
|
197
|
+
item = category.items.first
|
197
198
|
lambda do
|
198
|
-
positions =
|
199
|
+
positions = category.items.order_by_position.map(&position_field)
|
199
200
|
positions.should == [0,1,2]
|
200
|
-
item.insert_at item[position_field]
|
201
|
-
positions =
|
201
|
+
item.send :insert_at, item[position_field]
|
202
|
+
positions = category.items.order_by_position.map(&position_field)
|
202
203
|
positions.should == [0,1,2]
|
203
204
|
end.should_not change(item, position_field)
|
204
205
|
end
|
@@ -206,31 +207,31 @@ shared_examples_for "a list" do
|
|
206
207
|
|
207
208
|
context "to extreme positions" do
|
208
209
|
it "like 0" do
|
209
|
-
item =
|
210
|
+
item = category.items.order_by_position.last
|
210
211
|
|
211
212
|
item.remove_from_list
|
212
|
-
item.insert_at 0
|
213
|
+
item.send :insert_at, 0
|
213
214
|
|
214
215
|
item[position_field].should == 0
|
215
|
-
|
216
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
216
217
|
end
|
217
218
|
it "like the last position" do
|
218
|
-
item =
|
219
|
+
item = category.items.order_by_position.first
|
219
220
|
|
220
221
|
item.remove_from_list
|
221
|
-
item.insert_at 1
|
222
|
+
item.send :insert_at, 1
|
222
223
|
|
223
224
|
item[position_field].should == 1
|
224
|
-
|
225
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
225
226
|
end
|
226
227
|
it "like the next available position" do
|
227
|
-
item =
|
228
|
+
item = category.items.order_by_position.first
|
228
229
|
|
229
230
|
item.remove_from_list
|
230
|
-
item.insert_at 2
|
231
|
+
item.send :insert_at, 2
|
231
232
|
|
232
233
|
item[position_field].should == 2
|
233
|
-
|
234
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
234
235
|
end
|
235
236
|
end
|
236
237
|
end
|
@@ -239,7 +240,7 @@ shared_examples_for "a list" do
|
|
239
240
|
context ":to =>" do
|
240
241
|
context "an Integer" do
|
241
242
|
it "inserts at a given position" do
|
242
|
-
item =
|
243
|
+
item = category.items.order_by_position.first
|
243
244
|
item.should_receive(:insert_at).with 2
|
244
245
|
item.move to: 2
|
245
246
|
end
|
@@ -248,7 +249,7 @@ shared_examples_for "a list" do
|
|
248
249
|
context "a Symbol" do
|
249
250
|
[:start, :top, :end, :bottom].each do |destination|
|
250
251
|
it "moves to #{destination}" do
|
251
|
-
item =
|
252
|
+
item = category.items.first
|
252
253
|
item.should_receive("move_to_#{destination}")
|
253
254
|
item.move to: destination
|
254
255
|
end
|
@@ -259,8 +260,8 @@ shared_examples_for "a list" do
|
|
259
260
|
[:before, :above, :after, :below, :forward, :backward, :lower, :higher].each do |sym|
|
260
261
|
context "#{sym} =>" do
|
261
262
|
it "delegates to the right method" do
|
262
|
-
item =
|
263
|
-
other_item =
|
263
|
+
item = category.items.first
|
264
|
+
other_item = category.items.last
|
264
265
|
item.should_receive("move_#{sym}").with(other_item)
|
265
266
|
item.move(sym => other_item)
|
266
267
|
end
|
@@ -270,7 +271,7 @@ shared_examples_for "a list" do
|
|
270
271
|
[:backwards, :higher].each do |sym|
|
271
272
|
context "#{sym}" do
|
272
273
|
it "delegates to the right method" do
|
273
|
-
item =
|
274
|
+
item = category.items.last
|
274
275
|
item.should_receive("move_#{sym}").with()
|
275
276
|
item.move sym
|
276
277
|
end
|
@@ -281,18 +282,18 @@ shared_examples_for "a list" do
|
|
281
282
|
[:top, :start].each do |sym|
|
282
283
|
describe "#move_to_#{sym}" do
|
283
284
|
it "#{sym} moves an item in list to the start of list" do
|
284
|
-
item =
|
285
|
+
item = category.items.order_by_position.last
|
285
286
|
item.move to: sym
|
286
287
|
item[position_field].should == 0
|
287
|
-
|
288
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
288
289
|
end
|
289
290
|
|
290
291
|
it "#{sym} moves an item not in list to the start of list" do
|
291
|
-
item =
|
292
|
+
item = category.items.order_by_position.last
|
292
293
|
item.remove_from_list
|
293
294
|
item.move to: sym
|
294
295
|
item[position_field].should == 0
|
295
|
-
|
296
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
296
297
|
end
|
297
298
|
end
|
298
299
|
end
|
@@ -300,18 +301,18 @@ shared_examples_for "a list" do
|
|
300
301
|
[:end, :bottom].each do |sym|
|
301
302
|
describe "#move_to_#{sym}" do
|
302
303
|
it "#{sym} moves an item in list to the end of list" do
|
303
|
-
item =
|
304
|
+
item = category.items.order_by_position.first
|
304
305
|
item.move to: sym
|
305
306
|
item[position_field].should == 2
|
306
|
-
|
307
|
+
category.reload.items.order_by_position.map(&position_field).should == [0,1,2]
|
307
308
|
end
|
308
309
|
|
309
310
|
it "#{sym} moves an item not in list to the end of list" do
|
310
|
-
item =
|
311
|
+
item = category.items.order_by_position.first
|
311
312
|
item.remove_from_list
|
312
313
|
item.move to: sym
|
313
314
|
item[position_field].should == 2
|
314
|
-
|
315
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
315
316
|
end
|
316
317
|
end
|
317
318
|
end
|
@@ -321,7 +322,7 @@ shared_examples_for "a list" do
|
|
321
322
|
let(:method) { "move_#{sym}" }
|
322
323
|
|
323
324
|
context "for the last item of the list" do
|
324
|
-
let(:item) {
|
325
|
+
let(:item) { category.items.order_by_position.last }
|
325
326
|
|
326
327
|
it "does not change the item's position" do
|
327
328
|
lambda do
|
@@ -331,7 +332,7 @@ shared_examples_for "a list" do
|
|
331
332
|
|
332
333
|
it "keeps items ordered" do
|
333
334
|
item.send method
|
334
|
-
|
335
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
335
336
|
end
|
336
337
|
|
337
338
|
it "returns false" do
|
@@ -340,7 +341,7 @@ shared_examples_for "a list" do
|
|
340
341
|
end
|
341
342
|
|
342
343
|
context "for any other item" do
|
343
|
-
let(:item) {
|
344
|
+
let(:item) { category.items.order_by_position.first }
|
344
345
|
|
345
346
|
it "moves to the next position" do
|
346
347
|
lambda do
|
@@ -362,7 +363,7 @@ shared_examples_for "a list" do
|
|
362
363
|
|
363
364
|
it "keeps items ordered" do
|
364
365
|
item.send method, 2
|
365
|
-
|
366
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
366
367
|
end
|
367
368
|
|
368
369
|
it "returns true" do
|
@@ -377,7 +378,7 @@ shared_examples_for "a list" do
|
|
377
378
|
let(:method) { "move_#{sym}" }
|
378
379
|
|
379
380
|
context "for the first item of the list" do
|
380
|
-
let(:item) {
|
381
|
+
let(:item) { category.items.order_by_position.first }
|
381
382
|
|
382
383
|
it "does not change the item's position" do
|
383
384
|
lambda do
|
@@ -387,7 +388,7 @@ shared_examples_for "a list" do
|
|
387
388
|
|
388
389
|
it "keeps items ordered" do
|
389
390
|
item.send method
|
390
|
-
|
391
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
391
392
|
end
|
392
393
|
|
393
394
|
it "returns false" do
|
@@ -396,7 +397,7 @@ shared_examples_for "a list" do
|
|
396
397
|
end
|
397
398
|
|
398
399
|
context "for any other item" do
|
399
|
-
let(:item) {
|
400
|
+
let(:item) { category.items.order_by_position.last }
|
400
401
|
|
401
402
|
it "moves to the previous position" do
|
402
403
|
lambda do
|
@@ -418,7 +419,7 @@ shared_examples_for "a list" do
|
|
418
419
|
|
419
420
|
it "keeps items ordered" do
|
420
421
|
item.send method
|
421
|
-
|
422
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
422
423
|
end
|
423
424
|
|
424
425
|
it "returns true" do
|
@@ -435,8 +436,8 @@ shared_examples_for "a list" do
|
|
435
436
|
end
|
436
437
|
|
437
438
|
context "towards the start" do
|
438
|
-
let(:other_item) {
|
439
|
-
let(:item) {
|
439
|
+
let(:other_item) { category.items.order_by_position.first }
|
440
|
+
let(:item) { category.items.order_by_position.last }
|
440
441
|
|
441
442
|
it "moves to the same position as other_item" do
|
442
443
|
item[position_field].should == 0
|
@@ -447,12 +448,12 @@ shared_examples_for "a list" do
|
|
447
448
|
end
|
448
449
|
|
449
450
|
it "shifts any item after that by 1" do
|
450
|
-
|
451
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
451
452
|
end
|
452
453
|
end
|
453
454
|
context "towards the end" do
|
454
|
-
let(:item) {
|
455
|
-
let(:other_item) {
|
455
|
+
let(:item) { category.items.order_by_position.first }
|
456
|
+
let(:other_item) { category.items.order_by_position.last }
|
456
457
|
|
457
458
|
it "moves to the same position as other_item" do
|
458
459
|
item[position_field].should == 1
|
@@ -463,7 +464,7 @@ shared_examples_for "a list" do
|
|
463
464
|
end
|
464
465
|
|
465
466
|
it "shifts any item after that by 1" do
|
466
|
-
|
467
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
467
468
|
end
|
468
469
|
end
|
469
470
|
end
|
@@ -476,27 +477,27 @@ shared_examples_for "a list" do
|
|
476
477
|
end
|
477
478
|
|
478
479
|
context "towards the start" do
|
479
|
-
let(:other_item) {
|
480
|
-
let(:item) {
|
480
|
+
let(:other_item) { category.items.order_by_position.first }
|
481
|
+
let(:item) { category.items.order_by_position.last }
|
481
482
|
|
482
483
|
it "moves to other_item's next position" do
|
483
484
|
item[position_field].should == 1
|
484
485
|
end
|
485
486
|
|
486
487
|
it "shifts any item before that by -1" do
|
487
|
-
|
488
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
488
489
|
end
|
489
490
|
end
|
490
491
|
context "towards the end" do
|
491
|
-
let(:item) {
|
492
|
-
let(:other_item) {
|
492
|
+
let(:item) { category.items.order_by_position.first }
|
493
|
+
let(:other_item) { category.items.order_by_position.last }
|
493
494
|
|
494
495
|
it "moves to the same position as other_item" do
|
495
496
|
item[position_field].should == 2
|
496
497
|
end
|
497
498
|
|
498
499
|
it "shifts any item before that by -1" do
|
499
|
-
|
500
|
+
category.items.order_by_position.map(&position_field).should == [0,1,2]
|
500
501
|
end
|
501
502
|
end
|
502
503
|
end
|
@@ -510,14 +511,15 @@ shared_examples_for "a list" do
|
|
510
511
|
Mongoid::ActsAsList.configure {|c| c.start_list_at = @original_start}
|
511
512
|
end
|
512
513
|
|
513
|
-
it "is configurable" do
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
514
|
+
# it "is configurable" do
|
515
|
+
# empty_category = category.class.create!
|
516
|
+
# empty_category.items.should be_empty
|
517
|
+
# start = 1
|
518
|
+
# Mongoid::ActsAsList.configure {|c| c.start_list_at = start}
|
519
|
+
# item = empty_category.items.create!
|
520
|
+
# item[position_field].should == start
|
521
|
+
# item = empty_category.items.create!
|
522
|
+
# item[position_field].should == start+1
|
523
|
+
# end
|
522
524
|
end
|
523
525
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_acts_as_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-25 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &74681830 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,32 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *74681830
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &74681400 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *74681400
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: simplecov
|
38
|
+
requirement: &74681120 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *74681120
|
25
47
|
- !ruby/object:Gem::Dependency
|
26
48
|
name: bson_ext
|
27
|
-
requirement: &
|
49
|
+
requirement: &74680850 !ruby/object:Gem::Requirement
|
28
50
|
none: false
|
29
51
|
requirements:
|
30
52
|
- - ~>
|
@@ -32,10 +54,10 @@ dependencies:
|
|
32
54
|
version: '1.5'
|
33
55
|
type: :development
|
34
56
|
prerelease: false
|
35
|
-
version_requirements: *
|
57
|
+
version_requirements: *74680850
|
36
58
|
- !ruby/object:Gem::Dependency
|
37
59
|
name: database_cleaner
|
38
|
-
requirement: &
|
60
|
+
requirement: &74680180 !ruby/object:Gem::Requirement
|
39
61
|
none: false
|
40
62
|
requirements:
|
41
63
|
- - ! '>='
|
@@ -43,10 +65,10 @@ dependencies:
|
|
43
65
|
version: '0'
|
44
66
|
type: :development
|
45
67
|
prerelease: false
|
46
|
-
version_requirements: *
|
68
|
+
version_requirements: *74680180
|
47
69
|
- !ruby/object:Gem::Dependency
|
48
70
|
name: pry
|
49
|
-
requirement: &
|
71
|
+
requirement: &74679440 !ruby/object:Gem::Requirement
|
50
72
|
none: false
|
51
73
|
requirements:
|
52
74
|
- - ! '>='
|
@@ -54,10 +76,10 @@ dependencies:
|
|
54
76
|
version: '0'
|
55
77
|
type: :development
|
56
78
|
prerelease: false
|
57
|
-
version_requirements: *
|
79
|
+
version_requirements: *74679440
|
58
80
|
- !ruby/object:Gem::Dependency
|
59
81
|
name: mongoid
|
60
|
-
requirement: &
|
82
|
+
requirement: &74678270 !ruby/object:Gem::Requirement
|
61
83
|
none: false
|
62
84
|
requirements:
|
63
85
|
- - ! '>='
|
@@ -65,7 +87,7 @@ dependencies:
|
|
65
87
|
version: 2.0.1
|
66
88
|
type: :runtime
|
67
89
|
prerelease: false
|
68
|
-
version_requirements: *
|
90
|
+
version_requirements: *74678270
|
69
91
|
description: ''
|
70
92
|
email:
|
71
93
|
- olivier.melcher@gmail.com
|
@@ -75,6 +97,7 @@ extra_rdoc_files: []
|
|
75
97
|
files:
|
76
98
|
- .gitignore
|
77
99
|
- .rspec
|
100
|
+
- .travis.yml
|
78
101
|
- .vimrc.local
|
79
102
|
- Gemfile
|
80
103
|
- README.markdown
|
@@ -86,14 +109,16 @@ files:
|
|
86
109
|
- lib/mongoid/acts_as_list/list/root.rb
|
87
110
|
- lib/mongoid/acts_as_list/version.rb
|
88
111
|
- lib/mongoid_acts_as_list.rb
|
112
|
+
- spec/acts_as_list/embeds_many_recursively_spec.rb
|
89
113
|
- spec/acts_as_list/embeds_many_spec.rb
|
90
114
|
- spec/acts_as_list/relational_spec.rb
|
91
115
|
- spec/fixtures/embeds_many_models.rb
|
116
|
+
- spec/fixtures/embeds_many_recursively_models.rb
|
92
117
|
- spec/fixtures/relational_models.rb
|
93
118
|
- spec/mongoid_acts_as_list_spec.rb
|
94
119
|
- spec/spec_helper.rb
|
95
120
|
- spec/support/list_examples.rb
|
96
|
-
homepage:
|
121
|
+
homepage: https://github.com/olivoil/mongoid_acts_as_list
|
97
122
|
licenses: []
|
98
123
|
post_install_message:
|
99
124
|
rdoc_options: []
|