glebtv-mongoid_nested_set 0.4.1 → 0.4.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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +16 -0
- data/Gemfile +3 -5
- data/README.markdown +7 -3
- data/Rakefile +9 -1
- data/gemfiles/am-4.1.gemfile +6 -0
- data/gemfiles/mongoid-3.1.gemfile +5 -0
- data/gemfiles/mongoid-4.0.gemfile +5 -0
- data/glebtv-mongoid_nested_set.gemspec +11 -6
- data/lib/mongoid_nested_set/base.rb +11 -12
- data/lib/mongoid_nested_set/document.rb +5 -1
- data/lib/mongoid_nested_set/version.rb +1 -1
- data/spec/models/test_document.rb +1 -5
- data/spec/mongoid_nested_set_spec.rb +15 -7
- data/spec/spec_helper.rb +7 -2
- metadata +76 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c33f021b3089d426f8cd762d26c1527892c483c2
|
4
|
+
data.tar.gz: a2c4b42b74fac204f78bdead4dab8ded122389ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28bec66a742952b69fe7fbedbeeac8e4377a8ff33330c5e81767314f34a78cc5dd9519806424cc43657d8fd33afeb7bc87833b1d59412c4917082949acc13743
|
7
|
+
data.tar.gz: 7b60408b936e2adc0bf80138b316a7a6255c85a721a451a4c56d64afef3e46f93486c2ae147ce50f3b8d747b56b6578883f7742ec6b10f862e8ce486d008c410
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.0-
|
1
|
+
2.0.0-p353
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
+
#gem "activemodel", "~> 4.1.0.beta1"
|
4
|
+
#gem "mongoid", "~> 4.0.0.beta1"
|
5
|
+
|
3
6
|
# Specify your gem's dependencies in glebtv-mongoid_nested_set.gemspec
|
4
7
|
gemspec
|
5
8
|
|
6
|
-
group :test do
|
7
|
-
gem 'rspec-expectations', "~> 2.0"
|
8
|
-
gem 'rr'
|
9
|
-
gem 'remarkable_mongoid'
|
10
|
-
end
|
data/README.markdown
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
Mongoid Nested Set
|
2
2
|
==================
|
3
3
|
|
4
|
+
[](http://badge.fury.io/rb/glebtv-mongoid_nested_set)
|
5
|
+
[](https://travis-ci.org/glebtv/mongoid_nested_set)
|
6
|
+
[](https://gemnasium.com/glebtv/mongoid_nested_set)
|
7
|
+
|
4
8
|
Mongoid Nested Set is an implementation of the nested set pattern for Mongoid.
|
5
9
|
It is a port of [AwesomeNestedSet for ActiveRecord](https://github.com/galetahub/awesome_nested_set).
|
6
|
-
It supports Mongoid
|
10
|
+
It supports Mongoid 3/4 and Rails 3/4.
|
7
11
|
|
8
12
|
Nested Set represents hierarchies of trees in MongoDB using references rather
|
9
13
|
than embedded documents. A tree is stored as a flat list of documents in a
|
@@ -18,11 +22,11 @@ For more on the nested set pattern: <http://en.wikipedia.org/wiki/Nested_set_mod
|
|
18
22
|
|
19
23
|
Install as Gem
|
20
24
|
|
21
|
-
gem install mongoid_nested_set
|
25
|
+
gem install glebtv-mongoid_nested_set
|
22
26
|
|
23
27
|
via Gemfile
|
24
28
|
|
25
|
-
gem 'mongoid_nested_set', '0.
|
29
|
+
gem 'glebtv-mongoid_nested_set', '~> 0.4.2'
|
26
30
|
|
27
31
|
|
28
32
|
## Usage
|
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = MongoidNestedSet::VERSION
|
8
8
|
s.authors = ["GlebTV", "Brandon Turner"]
|
9
9
|
s.email = ["bt@brandonturner.net"]
|
10
|
-
s.homepage = "http://github.com/
|
10
|
+
s.homepage = "http://github.com/glebtv/mongoid_nested_set"
|
11
11
|
s.summary = %q{Nested set based tree implementation for Mongoid}
|
12
12
|
s.description = %q{Fully featured tree implementation for Mongoid using the nested set model}
|
13
13
|
s.licenses = ["MIT"]
|
@@ -19,11 +19,16 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_runtime_dependency
|
22
|
+
s.add_runtime_dependency 'mongoid', [">= 3.1.0", "< 4.1"]
|
23
23
|
|
24
|
-
s.add_development_dependency
|
25
|
-
s.add_development_dependency
|
26
|
-
s.add_development_dependency
|
27
|
-
s.add_development_dependency
|
24
|
+
s.add_development_dependency 'rake'
|
25
|
+
s.add_development_dependency 'rspec'
|
26
|
+
s.add_development_dependency 'bundler'
|
27
|
+
s.add_development_dependency 'simplecov'
|
28
|
+
s.add_development_dependency 'simplecov-rcov'
|
29
|
+
|
30
|
+
s.add_development_dependency 'rspec-expectations', "~> 2.0"
|
31
|
+
s.add_development_dependency 'rr'
|
32
|
+
s.add_development_dependency 'remarkable_mongoid'
|
28
33
|
end
|
29
34
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module Mongoid::Acts::NestedSet
|
2
|
-
|
3
2
|
module Base
|
4
|
-
|
5
3
|
# Configuration options are:
|
6
4
|
#
|
7
5
|
# * +:parent_field+ - field name to use for keeping the parent id (default: parent_id)
|
@@ -53,15 +51,7 @@ module Mongoid::Acts::NestedSet
|
|
53
51
|
|
54
52
|
attr_accessor :skip_before_destroy
|
55
53
|
|
56
|
-
|
57
|
-
# mass assignment control by default, but this methods can be restored
|
58
|
-
# by installing 'protected_attributes' gem. So here we just check
|
59
|
-
# accessible_attributes method presence
|
60
|
-
if respond_to?(:accessible_attributes) && accessible_attributes.blank?
|
61
|
-
attr_protected left_field_name.intern, right_field_name.intern
|
62
|
-
end
|
63
|
-
|
64
|
-
define_callbacks :move, :terminator => "result == false"
|
54
|
+
define_callbacks :move, :terminator => callback_terminator
|
65
55
|
|
66
56
|
before_create :set_default_left_and_right
|
67
57
|
before_save :store_new_parent
|
@@ -89,6 +79,15 @@ module Mongoid::Acts::NestedSet
|
|
89
79
|
|
90
80
|
end
|
91
81
|
end
|
92
|
-
end
|
93
82
|
|
83
|
+
private
|
84
|
+
def callback_terminator
|
85
|
+
if ::ActiveSupport::VERSION::STRING >= '4.1'
|
86
|
+
lambda { |target, result| result == false }
|
87
|
+
else
|
88
|
+
'result == false'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
94
92
|
end
|
93
|
+
|
@@ -105,7 +105,11 @@ module Mongoid::Acts::NestedSet
|
|
105
105
|
conditions = parents.map do |parent|
|
106
106
|
{left_field_name => {"$gt" => parent.left}, right_field_name => {"$lt" => parent.right}}
|
107
107
|
end
|
108
|
-
|
108
|
+
if conditions.empty?
|
109
|
+
where({})
|
110
|
+
else
|
111
|
+
where("$or" => conditions)
|
112
|
+
end
|
109
113
|
end
|
110
114
|
|
111
115
|
|
@@ -22,11 +22,7 @@ module Mongoid::Acts::NestedSet
|
|
22
22
|
def test_set_attributes(attrs)
|
23
23
|
attrs.each do |key, val|
|
24
24
|
key = key.to_s
|
25
|
-
|
26
|
-
fields.keys.any? { |k| k.to_s == key } ||
|
27
|
-
associations.any? { |a| a[0].to_s == key || a[1].foreign_key.to_s == key }
|
28
|
-
@attributes[key] = fields[key].mongoize(val)
|
29
|
-
end
|
25
|
+
@attributes[key] = val
|
30
26
|
end
|
31
27
|
self
|
32
28
|
end
|
@@ -191,13 +191,17 @@ describe "A Mongoid::Document" do
|
|
191
191
|
end
|
192
192
|
|
193
193
|
it "does not allow assigning the left field" do
|
194
|
-
expect { Node.new.lft = 1 }.to raise_error(NameError)
|
195
|
-
expect { RenamedFields.new.red = 1 }.to raise_error(NameError)
|
194
|
+
# expect { Node.new.lft = 1 }.to raise_error(NameError)
|
195
|
+
# expect { RenamedFields.new.red = 1 }.to raise_error(NameError)
|
196
|
+
expect { Node.new.lft = 1 }.to raise_error
|
197
|
+
expect { RenamedFields.new.red = 1 }.to raise_error
|
196
198
|
end
|
197
199
|
|
198
200
|
it "does not allow assigning the right field" do
|
199
|
-
expect { Node.new.rgt = 1 }.to raise_error(NameError)
|
200
|
-
expect { RenamedFields.new.black = 1 }.to raise_error(NameError)
|
201
|
+
# expect { Node.new.rgt = 1 }.to raise_error(NameError)
|
202
|
+
# expect { RenamedFields.new.black = 1 }.to raise_error(NameError)
|
203
|
+
expect { Node.new.rgt = 1 }.to raise_error
|
204
|
+
expect { RenamedFields.new.black = 1 }.to raise_error
|
201
205
|
end
|
202
206
|
|
203
207
|
|
@@ -360,7 +364,7 @@ describe "A Mongoid::Document" do
|
|
360
364
|
# Scopes
|
361
365
|
|
362
366
|
it "fetches all root nodes" do
|
363
|
-
Node.roots.should
|
367
|
+
Node.roots.entries.size.should eq(2)
|
364
368
|
end
|
365
369
|
|
366
370
|
it "fetches all leaf nodes in order" do
|
@@ -376,7 +380,7 @@ describe "A Mongoid::Document" do
|
|
376
380
|
|
377
381
|
it "fetches descendants of multiple parents" do
|
378
382
|
parents = Node.any_in(:name => %w[Men's Dresses])
|
379
|
-
Node.where(:root_id=>1).descendants_of(parents).should
|
383
|
+
Node.where(:root_id=>1).descendants_of(parents).entries.size.should eq(5)
|
380
384
|
end
|
381
385
|
|
382
386
|
it "fetches self and ancestors in order" do
|
@@ -478,7 +482,11 @@ describe "A Mongoid::Document" do
|
|
478
482
|
end
|
479
483
|
|
480
484
|
it "cannot move a node to a non-existent target" do
|
481
|
-
|
485
|
+
if defined?(Moped::BSON)
|
486
|
+
@nodes[:mens].parent_id = Moped::BSON::ObjectId.new
|
487
|
+
else
|
488
|
+
@nodes[:mens].parent_id = BSON::ObjectId.new
|
489
|
+
end
|
482
490
|
expect {
|
483
491
|
@nodes[:mens].save
|
484
492
|
}.to raise_error(Mongoid::Errors::MongoidError, /possible.*(exist|found)/)
|
data/spec/spec_helper.rb
CHANGED
@@ -2,6 +2,8 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
3
|
require 'rspec'
|
4
4
|
require 'rr'
|
5
|
+
require 'active_support'
|
6
|
+
require 'active_support/deprecation'
|
5
7
|
require 'mongoid'
|
6
8
|
require 'mongoid_nested_set'
|
7
9
|
require 'remarkable/mongoid'
|
@@ -24,17 +26,20 @@ end
|
|
24
26
|
module Mongoid::Acts::NestedSet::Matchers
|
25
27
|
end
|
26
28
|
|
29
|
+
#Mongoid.logger = Logger.new($stdout)
|
30
|
+
#Moped.logger = Logger.new($stdout)
|
31
|
+
#Moped.logger.level = Logger::DEBUG
|
32
|
+
|
27
33
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
28
34
|
Dir["#{File.dirname(__FILE__)}/models/*.rb"].each {|file| require file }
|
29
35
|
Dir["#{File.dirname(__FILE__)}/matchers/*.rb"].each {|file| require file }
|
30
36
|
|
31
37
|
Mongoid.configure do |config|
|
32
38
|
config.connect_to("mongoid_nested_set_test")
|
33
|
-
config.allow_dynamic_fields = false
|
34
39
|
end
|
35
40
|
|
36
41
|
RSpec.configure do |config|
|
37
|
-
config.mock_with :rr
|
42
|
+
#config.mock_with :rr
|
38
43
|
config.include(Mongoid::Acts::NestedSet::Matchers)
|
39
44
|
|
40
45
|
config.after(:each) do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glebtv-mongoid_nested_set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GlebTV
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-02-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
@@ -17,42 +17,62 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 3.
|
20
|
+
version: 3.1.0
|
21
|
+
- - <
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '4.1'
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
28
|
- - '>='
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: 3.
|
30
|
+
version: 3.1.0
|
31
|
+
- - <
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.1'
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rake
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
type: :development
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
28
48
|
- !ruby/object:Gem::Dependency
|
29
49
|
name: rspec
|
30
50
|
requirement: !ruby/object:Gem::Requirement
|
31
51
|
requirements:
|
32
52
|
- - '>='
|
33
53
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
54
|
+
version: '0'
|
35
55
|
type: :development
|
36
56
|
prerelease: false
|
37
57
|
version_requirements: !ruby/object:Gem::Requirement
|
38
58
|
requirements:
|
39
59
|
- - '>='
|
40
60
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
61
|
+
version: '0'
|
42
62
|
- !ruby/object:Gem::Dependency
|
43
63
|
name: bundler
|
44
64
|
requirement: !ruby/object:Gem::Requirement
|
45
65
|
requirements:
|
46
66
|
- - '>='
|
47
67
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
68
|
+
version: '0'
|
49
69
|
type: :development
|
50
70
|
prerelease: false
|
51
71
|
version_requirements: !ruby/object:Gem::Requirement
|
52
72
|
requirements:
|
53
73
|
- - '>='
|
54
74
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
75
|
+
version: '0'
|
56
76
|
- !ruby/object:Gem::Dependency
|
57
77
|
name: simplecov
|
58
78
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,6 +101,48 @@ dependencies:
|
|
81
101
|
- - '>='
|
82
102
|
- !ruby/object:Gem::Version
|
83
103
|
version: '0'
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: rspec-expectations
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.0'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.0'
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: rr
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: remarkable_mongoid
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
84
146
|
description: Fully featured tree implementation for Mongoid using the nested set model
|
85
147
|
email:
|
86
148
|
- bt@brandonturner.net
|
@@ -93,10 +155,14 @@ files:
|
|
93
155
|
- .rspec
|
94
156
|
- .ruby-gemset
|
95
157
|
- .ruby-version
|
158
|
+
- .travis.yml
|
96
159
|
- Gemfile
|
97
160
|
- LICENSE.txt
|
98
161
|
- README.markdown
|
99
162
|
- Rakefile
|
163
|
+
- gemfiles/am-4.1.gemfile
|
164
|
+
- gemfiles/mongoid-3.1.gemfile
|
165
|
+
- gemfiles/mongoid-4.0.gemfile
|
100
166
|
- glebtv-mongoid_nested_set.gemspec
|
101
167
|
- lib/glebtv-mongoid_nested_set.rb
|
102
168
|
- lib/mongoid_nested_set.rb
|
@@ -122,7 +188,7 @@ files:
|
|
122
188
|
- spec/models/unscoped_node.rb
|
123
189
|
- spec/mongoid_nested_set_spec.rb
|
124
190
|
- spec/spec_helper.rb
|
125
|
-
homepage: http://github.com/
|
191
|
+
homepage: http://github.com/glebtv/mongoid_nested_set
|
126
192
|
licenses:
|
127
193
|
- MIT
|
128
194
|
metadata: {}
|
@@ -142,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
208
|
version: '0'
|
143
209
|
requirements: []
|
144
210
|
rubyforge_project: mongoid_nested_set
|
145
|
-
rubygems_version: 2.
|
211
|
+
rubygems_version: 2.2.1
|
146
212
|
signing_key:
|
147
213
|
specification_version: 4
|
148
214
|
summary: Nested set based tree implementation for Mongoid
|